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 :
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 Timer est réglé sur 5000ms.

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...