salut a tous.
Je voudrais savoir comment lire des données arrivant sur un port série com1 et les stocker dans un fichier texte(pour les visualiser)
Merci
salut a tous.
Je voudrais savoir comment lire des données arrivant sur un port série com1 et les stocker dans un fichier texte(pour les visualiser)
Merci
on lit les données reçues d'un port série comme dans un fichier : avec CreateFile() puis ReadFile().
Cela peut être très simple si tu fais du mono-directionnel et que tu sais ce que tu attends, mais cela peut devenir nettement plus compliqué si tu communiques en asynchrone...
Il existe des composants sur CodeProject, je crois.
Merci pour le tuyau. J'ai étudié l'API ReadFile(). En fait je cherche a recuperer les donnees arrivant d'une télécommande infrarouge a travers la liaison série. tu pourrais m'indiquer le protocole intégralement stp.
C'est à dire : -Type de projet(MFC, API Win32 ,..... ????)
-initialisation des handles demandés par ReadFile() , ....
Merci encore
salut ,pour les liaisons series tu peux utiliser sans pb un project mfc ou api win32 aucun pb de ce cote la .
je te conseille neanmoins de faire un petit tour du cote de codeguru pour voir des classes de com déjà faites .
parcque il y a quand meme des écueils :
reglages du port serie ;:vitesse, flux ,parite ,bit de data.
methode de reception des caracteres :
style thread en attente d'un event sur la reception etc...
envoye un car c'est le plus simple la reception est plus complexe.
exemple :
http://codeguru.earthweb.com/network/CSerialPort.html
ou encore
http://codeguru.earthweb.com/network/Serial_Communication.html
qui montre l'utilisation d'un thread pour la reception.
quand au protocole de communication (l'organisation des trames échangées) ça dépend de ta télécommande : voir la doc constructeur...
J utilise la telecommande pinnacle pctv en fait. Tu sai ou trouver une doc???
bonsoir ,ta regarde sur le site de pinnacle ?
ouai mais g rien trouvé de spécial. Quelqu'un aurait t il trouvé quelque chose???
si la doc technique n'est pas disponible, il va te falloir faire du reverse ingeneering avec un espion de liaison série :
Tu fais fonctionner le système à espionner et avec un autre PC tu espionnes ce qui transit sur le port série : connectes les Rx et Tx du port à espionner sur le Rx de Com1 et Rx de Com2 des ports du PC espion, et avec un terminal RS 232 quelconque tu vois les trames qui s'échange entre le PC espionné et ton système (la télécommande en l'occurrence).
Bon courage, c'est pas évident, mais c'est rigolo à faire.
ouais à mon avis t'es pas sortie de l'auberge....
ou essaye d'envoyer un mail à un service technique ou support .
Avec un readfile n'est il pa possible de voir ce qui arrive sur le port série , sans se fatiguer a utiliser un autre PC et des connections.??
c'est clair que ce que je t'ai expliqué est à utiliser en dernier recours, mais c'est faisable : je l'ai fait plusieurs fois sur du matériel industriel.
Expliques-nous ce que tu veux fair, en détails; parce qu'il doit bien éxister des logiciels pour cette télécommande.
OUVERTURE DU PORT :
LECTURE DU PORT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 bool FONCTION_COM_COM1(void) { DCB dcb; BOOL fSuccess; char *pcCommPort = "COM1"; hComm = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hComm == INVALID_HANDLE_VALUE) return false; fSuccess = GetCommState(hComm, &dcb); if (!fSuccess) return false; dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; fSuccess = SetCommState(hComm, &dcb); if (!fSuccess) return false; return true; }
La trame reçue est dans pc_Trame
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 bool FONCTION_COM_ClearError(void) { DWORD ErrorMask; COMSTAT comstat; DWORD NumberOfBytesToRead; DWORD NumberOfBytesRead; if( ClearCommError(hComm, &ErrorMask, &comstat) != 0 ) { if( unsignedint_Position >= 5100 ) unsignedint_Position = 0; NumberOfBytesToRead = comstat.cbInQue; if( NumberOfBytesToRead ) { ReadFile(hComm, pc_Buffer, NumberOfBytesToRead, &NumberOfBytesRead, NULL); for( unsigned int ui_=0 ; ui_<NumberOfBytesRead ; ui_++ ) pc_Trame[unsignedint_Position++] = pc_Buffer[ui_]; pc_Trame[unsignedint_Position] = '\0'; } } if( pc_Trame[unsignedint_Position - 1] == __ETX ) { bool_Trame = true; } return bool_Trame; }
bool_Trame me permet de savoir si cette dernière est entière (son dernier caractère vaut __ETX chz moi). Il faut donc traiter le contenu de la chaîne de caractères pc_Trame (char* pc_Trame)
FERMETURE DU PORT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void FONCTION_CLOSE(void) { CloseHandle(hComm); }
merci je vai voir ca
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager