Bjr,
j'ai une appli qui doit lire des données texte à la sortie d'un automate.
La liaison est une RS232 avec config standard (9600bps, 8 bits data, 1bit stop, sans controle de flux). On reçoit une chaine de caractères simples (20 à 40 caractères) contenant les paramètres machine (séparés par un caractère 'NULL').
En branchant sur HyperTerminal, je reçois sans problème la chaine.
Par contre, avec mon appli, j'utilise TComPort pour recevoir et ces événements :
Le Timer est réglé sur 5000ms.
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 void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) { AnsiString temp=""; ComPort1->ReadStr(temp, Count); // lit les 'Count' octets du buffer et les affecte à temp Timer1->Enabled = true; // Démarrage du Timer capture += temp; // On concatène le contenu du buffer à l'ansistring capture TCapture->Text = capture; // pour finalement afficher la chaine reconstituée dans une editbox } void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (Tag) // Traitement des données au bout de 5s de réception { Timer1->Enabled = false; Tag = 0; TCapture->Clear(); Memo1->Lines->Add(capture); // ajout dans le Memo num++; // on incrémente num après chaque réception capture = ""; // on vide la variable de récupération } else Tag++; // on attend 5s avant de faire le traitement }
Le résultat est que j'obtiens toujours seulement le début de chaine, jusqu'au caractère 'NULL'. Est-ce normal avec TComPort ? Comment modifier mon code pour dire que si on rencontre un caractère 'NULL' on le remplace par un espace ?? Cela peut-il être un pb avec la gestion du Timer ?
Ex pour une chaine : 240507 T1 1340 0056
Je reçois : 240507
Précision: la chaine est envoyée en une seule fois.
Merci de m'éclairer...
Partager