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);
}
}
}
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
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é. –