J'ai quelques préférences (et bêtes noires) en ce qui concerne l'écriture d'un logiciel pour contrôler les médias et les dispositifs d'affichage à l'aide de RS232. En fonction de votre matériel, certaines de ces préférences peuvent ne pas s'appliquer :
-
Je pense que c'est une bonne idée de rendre votre protocole plus convivial pour l'automatisation. Si vous avez besoin d'une interface interactive (ligne de commande ou autre), construisez-la séparément et faites-la utiliser le protocole d'automatisation. Je ne m'inquiéterais pas trop de le rendre lisible par l'homme, mais c'est à vous de voir.
-
Retournez toujours une réponse, même (surtout) si vous obtenez une commande invalide. Quelque chose de simple comme $06 pour ACK et $15 pour NAK. Ou écrivez-le en toutes lettres si vous voulez que ce soit un peu plus lisible pour les humains.
-
Si vous pouvez définir n'importe quelle valeur, assurez-vous qu'il existe un moyen d'interroger cette même valeur. Si vous avez beaucoup de valeurs, cela peut prendre un certain temps pour les interroger toutes. Envisagez d'avoir une ou quelques méta-requêtes qui renvoient plusieurs valeurs à la fois.
-
Si vous disposez d'informations qui ne peuvent pas être définies, mais qui sont importantes (numéro de modèle, numéro de série, version, copyright, etc.), assurez-vous qu'elles peuvent être interrogées au lieu de les afficher une seule fois au démarrage ou à la réinitialisation.
-
Ne répondez jamais par une erreur pour une commande valide. On pourrait penser que celle-ci est évidente...
-
En parlant d'évidence, documentez les paramètres de série que votre matériel prend en charge. Surtout s'il est destiné à être utilisé par quelqu'un d'autre que vous et que vous ne voulez pas qu'il passe les 30 premières minutes à essayer de comprendre s'il ne peut pas parler à l'appareil à cause du port série, des connexions, du câble ou de son logiciel. Non pas que je sois amer...
-
Utilisez des commandes absolues au lieu de valeurs basculantes. Par exemple, utilisez des commandes distinctes pour la mise sous tension et la mise hors tension au lieu d'envoyer la même commande et de faire basculer la mise sous tension et hors tension.
-
Les réponses doivent inclure des informations sur la commande à laquelle elles répondent. Ainsi, un programme n'a pas besoin de se souvenir de la dernière chose qu'il a demandée pour traiter la réponse (voir l'option de crédit supplémentaire ci-dessous).
-
Si votre appareil supporte un mode veille (éteint, mais pas vraiment éteint), assurez-vous que les requêtes fonctionnent toujours lorsque vous êtes dans cet état.
Cela dépend de votre degré de paranoïa concernant l'exhaustivité des données :
-
Emballez votre message dans une enveloppe. L'en-tête peut comprendre un caractère de départ, la longueur du message et un caractère de fin. Juste au cas où vous recevriez des messages partiels ou malformés. Peut-être $02 pour le début et $03 pour la fin.
-
Si vous êtes vraiment paranoïaque quant à l'intégrité du message, incluez une somme de contrôle. Mais cela peut être un peu pénible.
Pour un crédit supplémentaire :
- Si vos paramètres matériels peuvent être modifiés manuellement, vous pouvez peut-être envoyer cette modification par le port série comme si l'utilisateur l'avait demandée. Par exemple, vous ne souhaitez peut-être pas que l'utilisateur puisse modifier la source d'entrée d'un écran d'affichage public.
J'espère que cela vous aidera.
Mise à jour :
J'ai oublié quelque chose d'important. Avant de l'utiliser sérieusement et surtout avant de le donner à quelqu'un d'autre, essayez-le sur quelque chose de trivial pour vous assurer qu'il fonctionne comme vous l'attendez et (plus important) pour vous assurer que vous n'avez rien oublié. Il vous faudra plus de temps et d'efforts pour corriger les choses si vous découvrez un problème au milieu d'un projet plus important.
Il s'agit d'une bonne règle de base, que vous conceviez un protocole de commande, un service Web, un schéma de base de données ou une classe, etc.