Question

Je suis en train d'écrire un protocole simple RS485 multi-drop pour les communications série dans un système distribué. J'utilise un modèle adressable où les dispositifs esclaves sont donnés une fenêtre de 20ms pour répondre. Le maître sondages uC les appareils connectés pour les mises à jour et ils réagissent en conséquence. Je suis employé checksums et prendre les précautions de dépassement nécessaires pour assurer que les appareils connectés ne répondent pas aux messages malformés. Cette méthode a prouvé son efficacité dans environ 99% des situations, mais je perds le paquet si un nouveau dispositif est introduit au cours d'une session de communication. Dans un nouveau branchement dispositif « chaud » aura des effets négatifs sur le signal surveillés par les dispositifs esclaves, si seulement pour un temps extrêmement court. Je suis sur le côté logiciel de l'ingénierie, mais comment je peux atténuer cette situation sans essayer de recréer TCP? Nous utilisons un modèle de vote car il est rapide et fait bien le travail pour notre application, pas besoin de fonctionnalité RTOS. J'ai une abondance de cycles sur chaque cpu, penser en termes de base.

Était-ce utile?

La solution

L'envoi des paquets sur le RS485 est pas une communication fiable. Vous devrez gérer la perte de paquets de toute façon. Bien sûr, vous n'aurez pas à réinventer TCP. Mais vous devrez détecter les paquets perdus au moyen de surveillance de délai d'attente et les numéros de séquence. Dans les applications simples, cela peut être fait au niveau de l'application, ce qui vous permet de rester loin de la complexité du TCP. Lorsque votre modèle d'interrogation supprime tous les paquets avec la somme de contrôle invalide cela pourrait être intégré avec moins d'effort.

Si vous voulez vérifier les collisions, qui peut être causée par des bouchons chauds ou des dispositifs mal conduit, il y a probablement quelques améliorations. Certains matériels permet de lire l'historique propre transmissing. Si vous trouvez une différence entre les données envoyées et recevoir des données, vous pouvez supposer une collision et répéter le paquet. Il faudra aussi une sorte de numérotation de séquence.

Autres conseils

Peut-être que je l'ai raté quelque chose dans votre question, mais je ne peux vous écrire juste le maître de sorte que si une réponse ne se voit pas d'un appareil dans le délai imparti, il re-sondages appareil?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top