J’ai un ordinateur connecté à des appareils externes via une communication série (c.-à-d. RS-232 / RS-422 de ports série physiques ou émulés). Ils communiquent entre eux par échange fréquent de données (30 Hz) mais avec seulement un petit paquet de données (moins de 16 octets pour chaque paquet).
L’exigence la plus critique de la communication est la faible latence ou le délai entre la transmission et la réception.
Le modèle d’échange de données est semblable à une poignée de main. Un appareil hôte initie la communication et continue d’envoyer des notifications sur un périphérique client. Un périphérique client doit répondre à toutes les notifications du périphérique hôte aussi rapidement que possible (c’est exactement là où la faible latence doit être atteinte). Les paquets de données des notifications et des réponses sont bien définis. à savoir la longueur des données est connue. Et fondamentalement, la perte de données n’est pas autorisée.
J’ai utilisé les fonctions API Win suivantes pour effectuer les opérations d’E / S en lecture / écriture de manière synchrone: CreateFile, ReadFile, WriteFile
Un périphérique client utilise ReadFile pour lire les données d’un périphérique hôte. Une fois que le client lit le paquet de données complet dont la longueur est connue, il utilise WriteFile pour répondre au périphérique hôte avec le paquet de données correspondant. Les lectures et écritures sont toujours séquentielles sans concurrence.
D’une certaine manière, la communication n’est pas assez rapide. A savoir que la durée entre l’envoi et la réception des données est trop longue. Je suppose que cela pourrait être un problème avec la mise en tampon du port série ou les interruptions.
Ici, je résume quelques actions possibles pour améliorer le délai. S’il vous plaît donnez-moi des suggestions et des corrections 🙂
Merci d’avance!
J’ai rencontré un problème similaire avec le port série. Dans mon cas, j’ai résolu le problème en diminuant la latence du port série. Vous pouvez modifier la latence de chaque port (qui est défini par défaut sur 16 ms) à l’aide du panneau de commande. Vous pouvez trouver la méthode ici: http://www.chipkin.com/reducing-latency-on-com-ports/
Bonne chance!!!