LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Reception RS232

Bonjour,

 

Dans une application, j'utilise 3 ports séries RS232 sur une machine, sur lesquels je reçoie des chaines de caractères ASCII, que je dois exploiter. Certains des ports COM utilisés sont des interfaces USB-RS232. La cadence de dialogue est de 115200 Bauds. J'utilise la fonction ComRd pour récupérer les chaines reçues dans la fonction ComCallback, qui se déclenche sur la réception du caractère 'LF', flag 'LWRS_RXFLAG'.

 

Au bout d'une certaine durée d'utilisation de mon application, la fonction ComCallback n'est subitement plus appelée.

C'est comme si plus aucun caractères n'étaient reçus sur le port COM, alors qu'il y a bien des caractères qui y arrivent.

Tous les ports COM utilisés finissent, les uns après les autres, par ne plus voir les caractères, que ce soit ceux des interfaces USB-RS232, ou le COM du PC.

A part la réception des chaines de caractères sur les ports séries, mon application fonctionne normalement.

 

L'application est développée avec LabWindows CVI 2013. Le système d'exploitation des machines sur lesquels j'ai installé l'application est soit Windows 7, soit Windows 10. Le phénomène est identique.

 

J'ai fait plusieurs essais, sans pouvoir trouver l'origine du problème.

 

Merci pour votre aide.

 

Cordialement.

0 Kudos
Message 1 of 5
(3,844 Views)

Bonjour pataga,

 

Vous pouvez dans un premier temps essayer d'utiliser NI IO Trace qui permet de visualiser les traces de communication et voir s'il y a des trames d'erreurs par exemple.

 

N'hésitez pas à les envoyer pour que l'on puisse avoir plus d'informations sur ce problème.

 

Bien cordialement,

 

Jérôme Henrion | ONERA - Digital RF Engineer | CLA | CTA
0 Kudos
Message 2 of 5
(3,819 Views)

Bonjour,

 

Merci pour votre réponse.

 

Je vais télécharger l'outil et j'essaierai début de semaine prochaine.

 

J'ai essayé de gérer la réception des chaînes de caractères en 'polling', avec un Timer déclenché toutes les 50ms. Dans le Callback, je récupère tous les caractères et je traite mes trames.

J'arrive à lire les chaînes de caractères, mais au bout d'un certain temps, je perds des caractères car l'intervalle de déclenchement du Timer se désynchronise je pense et que le nombre de caractère dans le buffer de réception est supérieur à la taille de la chaine que j'utilise pour les stocker.

Lorsque ce cas arrive, je nettoie le buffer d'entrée (FlushInQ), mais ces caractères sont perdus.

Je rencontre également ce problème, lorsque je clique sur le bandeau d'une fenêtre pour la déplacer par exemple. Le Callnback du Timer n'est plus appelé et le nombre de caractères reçus devient trop grand.

J'ai essayé également d'utiliser les Timers asynchrones (NewAsyncTimer). Mais je perds encore des caractères.

Je peux bien sûr augmenter la taille de mon buffer de réception, mais ceci ne fera que repousser le problème.

 

Existe-t-il une solution pour rendre l'appel d'un Callback prioritaire et surtout sur les tâches Windows ?

 

Cordialement.

 

 

Message 3 of 5
(3,804 Views)

Salut pataga,

Est-ce que t'as trouvé une solution à ce probléme ? en fait j'ai eu le même 😕 

0 Kudos
Message 4 of 5
(1,710 Views)

Hello, the OP hasn't posted anything in the forum but these messages so I doubt he/she will answer you. I suggest you to place a new question describing your problem, possibly translating it in English in this international board just to avoid problems due to automatic translations that may be incorrect or unclear.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Message 5 of 5
(1,701 Views)