Bonjour à tous,
Encore une problématique sur le port série...
J'utilise le port série pour communiquer avec une machine industrielle. Pour cela je me sers évidement de la librairie QextSerialPort.
Mon port s'ouvre et est bien configuré, j'arrive à faire marcher l'appli en émission et réceptions de données.
Cependant j'ai un petit (gros?) problème...
Pour le dialogue avec un équipement particulier, mon appli doit vérifier la présence d'un caractère dans les trames reçues et lui en renvoyer un autre afin d'avoir en permanence la certitude que le dialogue est établit. (A la manière d'une poignée de main en réseau)
C'est ici que les choses se gâtent!
Je réceptionne bien la trame envoyée par l'équipement et je détecte le caractère qui nécessite un acquittement.
Lorsqu'il est détecté je fais un write() sur le port série pour envoyer le caractère d'acquittement. Pourtant ce caractère ne part pas tout de suite.
L'équipement me renvoie une demande d'acquittement, puis deux... Puis coupe le dialogue.
A ce moment, mon appli répond avec les 3 acquittements demandés quelques secondes plus tôt.
J'ai donc plusieurs questions:
1. La librairie QextSerialPort permet elle un full-duplex total? (D'après ce que j'avais lu, oui, mais bon ne sait-on jamais...)
2. La fonction write() héritant de QIOdevice est-elle instantanée?
3. Je sais que le port série a un buffer intégré qui se vide après un certain temps ou un certain remplissage, savez-vous ou l'on pourrait régler ce paramètre?
4. Vous avez d'autres idées ?
Je viens demander votre aide parce que je ne sais pas si je dois chercher du côté de la librairie QextSerialPort ou modifier mon code (je préférerais nettement la deuxième solution pour être honnête)
Merci d'avance...
Partager