2017-01-19 1 views
-1

J'ai donc un objet lib que j'utilise pour un objet de communication série de base. Dans l'autre application C++, je crée des instances de cet objet. On se connecte à com 4 et l'autre à com 6. Lors de l'envoi de données à deux appareils différents. Je vois les données que j'envoie d'un port série apparaissent sur l'autre périphérique. J'essaie de voir si cela a quelque chose à voir avec mes paramètres CreateFile ou s'il y a quelque chose d'autre qui peut causer cela. J'ai essayé de changer les paramètres et les options dans le fichier de création, mais la diaphonie se produit toujours.Conversation croisée avec communication série.

Voici l'exemple de code que j'utilise actuellement. Si quelqu'un a des conseils sur ce que je peux regarder, il serait très apprécié.

ser_disconnect(); 
    //We're not yet connected 
    connected = false; 

    //std::wstring stemp(L"\\\\.\\COM"); 
    std::wstring stemp(L"COM"); 
    stemp = stemp + std::to_wstring(Port); 
    LPCWSTR sw = stemp.c_str(); 
    //Try to connect to the given port throuh CreateFile 
    hSerial = CreateFile(sw, 
     GENERIC_READ | GENERIC_WRITE, 
     0, 
     NULL, 
     CREATE_NEW,//OPEN_EXISTING, 
     FILE_ATTRIBUTE_NORMAL, 
     NULL); 

    //Check if the connection was successfull 
    if (hSerial == INVALID_HANDLE_VALUE) 
    { 
     //If not success full display an Error 
     if (GetLastError() == ERROR_FILE_NOT_FOUND) { 
      //Print Error if neccessary 
      set_Last_Error("ERROR: Handle was not attached. Reason: Port not available.\n", errMsg); 
      return 0x01; 
     } 
     else 
     { 
      set_Last_Error("Serial Handel ERROR!!!", errMsg); 
      return 0x02; 
     } 
    } 
    else 
    { 
     //If connected we try to set the comm parameters 
     DCB dcbSerialParams = { 0 }; 

     //Try to get the current 
     if (!GetCommState(hSerial, &dcbSerialParams)) 
     { 
      //If impossible, show an error 
      set_Last_Error("failed to get current serial parameters!", errMsg); 
      return 0x03; 
     } 
     else 
     { 
      //Define serial connection parameters for the arduino board 
      dcbSerialParams.BaudRate = BaudRate; 
      dcbSerialParams.ByteSize = Data; 
      dcbSerialParams.StopBits = StopBits; 
      dcbSerialParams.Parity = Parity; 
      //Setting the DTR to Control_Enable ensures that the Arduino is properly 
      //reset upon establishing a connection 
      dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE; 

      //Set the parameters and check for their proper application 
      if (!SetCommState(hSerial, &dcbSerialParams)) 
      { 
       set_Last_Error("ALERT: Could not set Serial Port parameters", errMsg); 
       return 0x04; 
      } 
      else 
      { 
       //If everything went fine we're connected 
       connected = true; 
       //Flush any remaining characters in the buffers 
       PurgeComm(hSerial, PURGE_RXCLEAR | PURGE_TXCLEAR); 
      } 
     } 
    } 
+0

Avez-vous essayé de séparer les câbles de COM3 et 6? (Êtes-vous sûr que c'est un problème SW?) – idanp

+0

Il a semblé être un problème avec comment j'ai eu la variable pour la série manipulée stockée. C'était une var globale dans le fichier cpp. Dès que j'ai mis cela dans le domaine de la classe, ça a très bien fonctionné. –

Répondre

-1

Il semblait y avoir un problème avec la façon dont j'avais la variable pour la série manipulée. C'était une var globale dans le fichier cpp. Dès que j'ai mis cela dans le domaine de la classe, cela a très bien fonctionné