Bonjour
J'ai une appli qui discute avec une pompe à essence via le port série j'utilise donc l'evenement datareceived pour ecouté le port en continu .
mon problème est lors de la reception de ma trame celle ci est en plusieurs morceaux .
Exemple de trame type : 00 6434 0016 18/06/08 10H49 312636 G 000037.2L 000006.4L 000000.8L 1
Malheuresement il peut arrivé que je recoivent d'autres type de trame qui n'ont rien a voir mais que je veux quand meme récupéré.
Je voulais donc savoir si il était possible de savoir si le port avait finit d'émettre afin de stocker les bouts de trames dans une variable et ainsi récupré n'importe quelle trame en entiere.
J'ai déja essayé ReadLine mais ma pompe n'envoie pas de "\n"
mais aussi ReadTo("L 1") qui ne me recupere que la trame situé au dessus en rouge.
J'utilise actuellement ReadExisting.
Si quelqu'un à une idée ça serait le bienvenu pasque la je tourne en rond
Mon code est le suivant
et la configuration du port série est la suivante Baudrate : 300 Databits :7 Parity : Even StopBits : 1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { receptionTrame(); //Réception de la trame émise via le port série BeginInvoke(new InvokeDelegate(invokeLectureTxt)); } private void receptionTrame() { string msg=""; //Message Recu byte[] ACK = new byte[1]; //Tableau de byte afin d'envoyer en Hexadecimal ACK[0] = 0x06; //Valeur de retour de trame ACK = 0x06 (ETX = 0x03) string hex = ""; char[] test = new char[77]; int i = 0; msg = serialPort1.ReadExisting(); //msg = serialPort1.ReadLine(); //Lecture de la donnée recu msg = msg.Replace("\0", ""); trameRecu = msg; BeginInvoke(new InvokeDelegate(invokeReception)); //Affiche dans la textBox la trame recu //Si la trame recu ne contient qu'un seul caractère alors on transforme le caractere ASCII en valeur Hexa if (msg.Length == 1) { char msg1 = Convert.ToChar(msg); //Transforme le Msg(String) en Char int value = Convert.ToInt32(msg1); //Transforme le Char en Int hex = String.Format("{0:X}", value); //Convertit le Int dans sa valeur Hexa string hex2 = String.Format("{0:X}", "6"); //Format la chaine au format Hexa if (hex == "3") { serialPort1.Write(ACK, 0, 1); //Retourne 0x06 à l'emeteur de 0x03 } }
D'avance merci .
Partager