[Débutant] Lenteur avec TComPort
Bonjour,
Pour dialoguer avec un systeme externe (mC), via le port série, nous utilisons le composant TComPort.
Le principe du protocole de dialogue est un mirroir (chaque octet envoyé est retourné par le mC et nous devons attendre le retour pour envoyer l'octet suivant).
Nous traitons le dialogue dans l'evènement OnRxChar où nous recevons 1 octet et envoyons immédiatement le suivant ce qui a pour effet d'alimenter constament le dialogue.
Configuration du port : 19200 bauds, 8 bits, pas de parité et 1 bit de stop.
Problème :
Avec cette methode nous mettons 3 ms à renvoyer un caratère après en avoir reçu 1,(Mesures faites à l'oscilloscope) et nous avons l'assurance que le mC réagit immédiatement.
Code:
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
//------------------------------------------------------------------------------
void __fastcall TForm1::Envoi (__int8 *Octet)
{
ComPort1->Write(Octet,1);
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Recoit(__int8 *Octet)
{
Form1->ComPort1->Read(Octet,1);
}
//------------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
char Octet;
while(ComPort1->InputCount()!=0);
{
Recoit(&Octet);
switch (Dialogue.Type)
{
case 1:
switch (Dialogue.Octet)
{
case 1: //Reception N° Esclave
Dialogue.Octet=2;
Envoi (&Dialogue.Type);
break;
case 2: //Reception Type de dialogue
Dialogue.Octet=3;
break;
case 3: //Reception de l'octet d'état
Dialogue.Octet=4;
Canton[Dialogue.Esclave].Etat=Octet;
Envoi(&Octet);
break;
case 4: //Reception N° Esclave (Acquittement)
Dialogue.Octet=1;
Dialogue.Esclave=RechercheCantonSuivant(Dialogue.Esclave);
Octet=Dialogue.Esclave|0x80;
Envoi(&Octet); //Relance du dialogue suivant
break;
}
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
} |
Comment pourrait-on améliorer le programme pour ne pas perdre ces 3 ms qui sont trop pénalisantes pour notre système?
Nous vous remercions d'avance pour l'intérêt que vous voudrez bien porter à ce post et pour les solutions que vous pourrez y apporter.
PhDt