Salut à tous
J’ai besoin de conseils pour migrer en Delphi 7 une appli industrielle Windev qui doit communiquer avec divers matériels via les ports COM.
N’ayant jamais travaillé avec les ports COM, je ne sais pas quelle méthode mettre en place. J’ai déjà récupéré via la FAQ la bibliothèque ComPort.
Ensuite, pour la communication continue avec l’une des machines, j’hésite entre utiliser des timers et les threads (les timers je connais, pas les threads)
Le principe est le suivant : tous les dixièmes de seconde, l’appli interroge un appareil, via une séquence d’instructions.
Une interrogation d’état se fait sous cette forme :
- l’appli envoie ENQ
- la machine retourne ACK
- l’appli envoie STX / SOH / …. / ETX
- la machine répond ACK
et ainsi de suite (je pourrai développer cette partie si besoin)
Problème : à chaque fois que le programme attend une réponse de la machine, il y a une boucle qui est sensée gérer les timeouts. Cette boucle, de type while, dure trois secondes, sauf si la machine envoie une réponse de taille égale à celle attendue, ou si la machine répond NAK. J’ai l’impression que cette gestion des timeouts via une boucle bloque le programme et les utilisateurs n’ont plus la main, et que ce n’est pas la bonne manière de faire.
Ensuite, l’utilisation de timer pour la répétition des interrogations pose le problème suivant : si les utilisateurs souhaitent interrompre la communication, le bouton dédié ne répond pas tant que le programme est en cours d’interrogation. Le timer a beau être arrêté, les trames continuent de circuler sur le port, et les boucles de timeouts provoquent des délais dans l’arrêt du système.
Donc, pour palier à tous ces problèmes, je cherche la meilleure solution en matière de gestion des ports COM, de timeout et de répétition de procédures avec arrêt instantané sur demande manuelle.
Merci pour vos conseils et vos idées (et aussi d’avoir eu la patience de lire mon roman jusqu’au bout).
Partager