Bonjour,
J'utilise un port COM rs232 (donc en UART) pour la reception de trame via le protocol "Cctalk".
La particularité de ce protocol est qu'il n'utilise pas de marqueur de fin de string comme CR par exemple.
La taille de la trame est contenue dans la trame elle même, il est donc impossible de savoir a l'avance combien de bytes seront contenu dans la trame.
1er byte recus = adresse du destinataire.
2eme byte = nbr de byte de data (0 à 200)
3eme byte = adresse de la source (expediteur)
4eme byte = header (ordre dela commande)
5eme byte = data 0 à N
...
dernier byte = checksum
Mon probleme:
j'ai créer un socket et un evenement pour gérer la reception des byte.
sEvénement(gnNumeroPortComOuvert,sEveCaractèreReçu,"gProc_LecturePortCom")
cela fonctionne tres bien, je construit la trame de reception a chaque byte recus.
Mais le probleme arrive si il manque un byte lors de le reception de la trame, c'est a dire du à un parasite par exemple.
la trame se decalle et n'est jamais plus bien interpreter par le programme.
il faudrait pouvoir reseter la reception de la trame, c'st a dire repositionner le programme de reception sur le 1er byte a recevoir si il n'y a plus de reception de byte apres 20 ms par exemple. donc créer une sorte de time out entre reception de byte.
Mais comment faire ???
Merci de votre aide.
Partager