bonsoir à tous,
svp il y a quelqu'un peut me fournir un lien de telechargement ou le nom d'une bibliothèque pour la communication RS232 qui fonctionne sur Microsoft Visual c++ ?
merci pour toute aide
-----
bonsoir à tous,
svp il y a quelqu'un peut me fournir un lien de telechargement ou le nom d'une bibliothèque pour la communication RS232 qui fonctionne sur Microsoft Visual c++ ?
merci pour toute aide
Tu programmes en .net ou pas?
A+
de MSDN, tu peux adapter pour rs-232
http://msdn.microsoft.com/en-us/library/ms810467.aspx
j'avais un professeur à l'université qui avait adapté le code en fonction justement du protocole et ca fonctionnait nickel.
Merci Padboy, mais tu vois pas que c'est un peut compliquer l'histoire d'adaptation.
Non je programme avec des objets non managés, j'utilise le new classique.
je veux expliquer mieux ce que je cherche. Alors, j'ai programmé un logiciel sur Visual C++ qui me permet de tester des afficheur LCD. bref, il me manque l'adaptation de la communication Rs232 pour la commande de la carte de test.
l'idée est d'envoyer une commande (caractère ou chiffre) via RS232 est attendre une réponse (sous forme d'un caractère aussi)
donc une simple bibliothèque de communication me suffira.
merciiii pour l'aide.
Ce n'est pas tellement compliqué... On s'en servait en C par exemple
util_rs232.cpp:
util_rs232.hCode:// Fonctions utiles à la transmission de donnée par communication sérielle // Source: Allen Denver, Microsoft Windows Developer Support // adapté par David Marche // librairies #include <wtypes.h> // prototypes et définitions utiles pour transformation #include "util_rs232.h" //----------------------------- // nom: OpenPortCom // description:Ouverture de port de communication serie // exemple d'appel: déclatation de structure DCB et ouverture du port COM1 // à 9600 baud, 8 bits par caractère pas de parité, et 1 bit d'arrêt. // HANDLE mon_hCom; // DCB mon_dcb; // mon_hCom=OpenPortCom("COM1",GENERIC_READ,&mon_dcb,9600,8,0,1); // paramètres: // nomPort: chaîne de caractères contenant le nom du port (ex:"COM1") // mode: mode d'ouverture (GENERIC_READ, GENERIC_WRITE, ou GENERIC_READ|GENERIC_WRITE) // dcb: pointeur à une structure de param. de com DCB // baudrate: vitesse de com (ex: 9600) // ByteSize; number of bits/byte, 4-8 // Parity; 0-4=no,odd,even,mark,space // StopBits; 0,1,2 = 1, 1.5, 2 // retour: (HANDLE) variable designant le port ouvert. Si l'ouverture du // port échoue, la valeur INVALID_HANDLE_VALUE est renvoyée // Source:Allen Denver, Microsoft Windows Developer Support // (Adapté par David Marche) //----------------------------- HANDLE OpenPortCom(char nomPort[], DWORD mode, DCB *dcb, DWORD baudRate, BYTE byteSize, BYTE parite, BYTE stopbit) { HANDLE hCom; // variable de reference au port de communication sériel BOOL bRes; // ouverture du port de communication sériel hCom = CreateFile( nomPort, mode, // lecture, écriture ou les deux 0, // comm devices must be opened w/exclusive-access NULL, // no security attributes OPEN_EXISTING, // comm devices must use OPEN_EXISTING 0, // not overlapped I/O NULL ); // hTemplate must be NULL for comm devices // si le port a pu être ouvert, définir les paramètres de communication if (hCom != INVALID_HANDLE_VALUE) { bRes=FALSE; if (bRes=GetCommState(hCom, dcb)){ // remplir la structure avec les paramètres de communication dcb->BaudRate = 9600; //baudRate; dcb->ByteSize = 8; //byteSize; dcb->Parity = NOPARITY; //parite; dcb->StopBits = ONESTOPBIT; //stopbit; bRes=SetCommState(hCom, dcb); } // si les paramètres ne peuvent être fixées, // fermer le port et échouer l'ouverture du port if (!bRes){ CloseHandle(hCom); hCom=INVALID_HANDLE_VALUE; } } // renvoyer la reference au port ou INVALID_HANDLE_VALUE en cas d'échec return hCom; } //----------------------------- // nom: WriteABuffer // description:transmettre un caractere par communication série // exemple d'appel: // WriteABuffer(mon_hCom,'A'); //envoyer le caractere A par transmission série. // WriteABuffer(mon_hCom,18); //envoyer la valeur 18 par transmission série. // paramètres: // hComm: variable designant le port de communication série // et obtenue par la fonction OpenPortCom lors de l'ouverture // du port de communication. // car: chaîne de caractères à transmettre // retour: booléen (vrai/faux) indiquant la réussite ou l'échec de l'envoie // Source:Allen Denver, Microsoft Windows Developer Support // (Adapté par David Marche) //----------------------------- BOOL WriteABuffer(HANDLE hComm, char car) { OVERLAPPED osWrite = {0}; DWORD dwWritten; DWORD dwRes; BOOL fRes; // Create this write operation's OVERLAPPED structure's hEvent. osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (osWrite.hEvent == NULL) // error creating overlapped event handle return FALSE; // Issue write. if (!WriteFile(hComm, &car, 1, &dwWritten, &osWrite)) { if (GetLastError() != ERROR_IO_PENDING) { // WriteFile failed, but isn't delayed. Report error and abort. fRes = FALSE; } else{ // Write is pending. dwRes = WaitForSingleObject(osWrite.hEvent, INFINITE); switch(dwRes) { // OVERLAPPED structure's event has been signaled. case WAIT_OBJECT_0: if (!GetOverlappedResult(hComm, &osWrite, &dwWritten, FALSE)) fRes = FALSE; else // Write operation completed successfully. fRes = TRUE; break; default: // An error has occurred in WaitForSingleObject. // This usually indicates a problem with the // OVERLAPPED structure's event handle. fRes = FALSE; break; } } } else{ // WriteFile completed immediately. fRes = TRUE; } CloseHandle(osWrite.hEvent); return fRes; }
Cite bien ta source..Code:// librairie de fonctions utiles aux transformations matricielles 3D // et affichage graphique // Auteur: David Marche #ifndef _UTIL_RS232_ // pour éviter d'inclure plusieurs fois cette librairie #define _UTIL_RS232_ // librairies #include <wtypes.h> // constantes // ------------------------------------------- // -- Prototypes -- // -- (plus de détails sur ces fonctions -- // -- dans les commentaires du fichier -- // -- util_rs232.cpp) -- // ------------------------------------------- BOOL WriteABuffer(HANDLE hComm, char car); HANDLE OpenPortCom(char nomPort[],DWORD mode,DCB* dcb,DWORD baudRate, BYTE byteSize, BYTE parite, BYTE stopbit); #endif
Sinon tu peux utiliser cette DLL:
http://automatepc.fr/?page=IntroPortSerie
A+