02-11-2016 02:07 AM
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.
02-12-2016 04:36 AM
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,
02-12-2016 09:00 AM
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.
11-05-2020 02:52 AM
Salut pataga,
Est-ce que t'as trouvé une solution à ce probléme ? en fait j'ai eu le même 😕
11-05-2020 06:43 AM
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.