On pourrait être excusé pour croire parfois que l’idée de relier les gadgets avec d’autres gadgets pour les fonctions d’automatisation est une invention relativement récente. Pourtant, pour tout le battage médiatique (relativement) récent du réseau de choses ainsi que de la «maison intelligente», les laboratoires ont cassé leur équipement pour effectuer une mesure difficile ainsi que des séquences de test pendant de nombreuses décennies, ainsi que des usines qui font beaucoup de même pour l’automatisation des processus de production.
Tout comme le monde chaotique des périphériques IOT, les appareils de laboratoire de différents fabricants fonctionnent un grand nombre de protocoles incompatibles ainsi que des normes d’interface. Ceux-ci finissent par se fusionner dans IEEE-488.1 (GPIB) en tant que couche physique ainsi qu’en 1990, les toutes premières commandes de base pour les instruments programmables (SCPI) ont été publiées qui ont été publiées au-dessus de l’IEEE-488.
SCPI définit (comme son nom l’indique) des commandes de base à interagir avec les instruments. Au cours des dernières décennies, il a continué à fournir des capacités d’interaction à distance à quoi que ce soit des oscilloscopes ainsi que des fournitures électriques aux équipements scientifiques exotiques. Beaucoup de gadgets de tablette Un hobbyiste peut acheter aujourd’hui une interface SCPI via son (s) ports Ethernet, USB ou RS-232C qui intégré à une application logicielle peut être utilisé pour automatiser son laboratoire de maison.
Mieux encore mieux est qu’il est assez simple d’ajouter des performances SCPI à ses propres gadgets également, tant qu’il a au moins une MCU ainsi qu’une méthode pour interagir avec le monde extérieur.
Réinventer la roue n’est pas amusant
Beaucoup amusant que de trouver sa propre communication de base pour un widget personnalisé, il y a beaucoup à préciser pour rester avec les normes existantes, au lieu d’ajouter une “standard” de plus à la pile. Une grande raison est le moment où vous passerez à propos d’un protocole qui fonctionne, qui couvre toutes les situations de bord et laisse suffisamment d’espace pour la croissance future lorsque de nouvelles fonctionnalités sont ajoutées.
Une autre raison est celle de la compatibilité avec les logiciels existants, qui touche également pourquoi les personnes finales susceptibles d’être enthousiastes à ce sujet incroyable nouveau protocole. Lors de l’utilisation de SCPI, il peut être relativement intégré au logiciel d’automatisation existant (laboratoire), car toute idée de SCPI est que chaque instrument implémentera sa propre variété de commandes personnalisées en plus d’un certain nombre de personnes nécessaires.
Pour les individus d’applications logicielles telles que LabVIEW ou SIGROK, la situation idéale est que le gadget parle SCPI, ainsi que dans le pire des cas, un gestionnaire personnalisé doit être écrit pour les commandes SCPI personnalisées quand on n’est pas encore offert. Ce qui ne modifiera jamais la syntaxe de SCPI fondamentale, ce qui permettra à une bootstress rapide de nouveaux périphériques, la prévention des bogues (aucun analyseur n’est parfait) ainsi que la réutilisation du code. La commande de base de SCPI définit également les performances telles que les mécanismes de synchronisation par défaut.
Malgré cela, lorsque le vôtre regarde vraiment la pile actuelle de matériel de mesure ainsi que des alimentations de puissance programmables empilées dans le laboratoire de la maison, tous ne parlent pas SCPI. L’oscilloscope Rigol DS1104Z fait via son port Ethernet. Le frère des bits de l’Owon XDM2041 DMM (XDM1041) parle SCPI via son port USB. Jusqu’ici tout va bien, mais les tonnes électroniques (Arachnid Labs recharge Pro) parle un protocole personnalisé via USB qui aurait pu être SCPI.
L’alimentation programmable de Manson HCS-3304 fait exactement la même chose avec un autre protocole personnalisé, les commandes énumérées dans les révisions du manuel étant évidemment faussement erronées. Avec seulement quelques-uns de ces gadgets soutenus par SIGROK à ce stade, l’automatisation des tests inclurait le piratage de mon propre décodeur, plutôt que d’un peu de fumé de haut niveau avec des commandes de gadgets SCPI personnalisées.
L’utilisation des exigences correctement peut économiser beaucoup de temps, de santé mentale ainsi que de poils gris. Ce qui conduit à la question suivante: exactement à quel point il est simple d’ajouter SCPI à son propre widget incroyable?
Entrez libscpi
Tout le monde ne souhaite pas composer leur propre analyseur SCPI à partir de zéro, c’est pourquoi la bibliothèque d’analyseurs SCPI V2, ou simplement «libscpi» est un excellent départ. Il met en œuvre la norme actuelle SCPI de 1999. Comme nous penserions à utiliser SCPI sur un appareil intégré, nous examinerons l’exemple Freertos fourni avec LwIP (Netconn). Cela montre l’application d’un serveur SCPI qui fonctionne dans un fil Freertos.
Le serveur SCPI définit un port d’écoute TCP sur le port SCPI de base (5025), après quoi les commandes peuvent être envoyées au gadget via n’importe quel type de client telnet ou similaire en mode brut, c’est-à-dire un texte ordinaire. Notez que dans cet exemple de serveur, NetConn_Copy de Lwip Netconn est utilisé au lieu de NetConn_Nocopy. Il est important de prévenir la corruption des données (utilisation des données tampon après la suppression) lors de l’utilisation des commandes SCPI chaînées.
Pour utiliser libscpi avec une interface USART ou une autre interface, la toute première chose à faire est de configurer la bibliothèque en appelant SCPI_INIT. L’esprit conformetechniques h doivent également être mises en œuvre dans votre code:
SCPI_Write (scpi_t * contexte, const char * données, size_t len)
SCPI_Flush (* scpi_t contexte)
SCPI_Error (scpi_t * contexte, err int_fast16_t)
SCPI_Control (scpi_t * contexte, scpi_ctrl_name_t ctrl, scpi_reg_val_t val)
SCPI_Reset (* scpi_t contexte)
Ces fonctions sont principalement explicites. Comme on peut le constater à partir de la mise en œuvre d’exemple, SCPI_Write permet libscpi de composer à votre sortie de choix, avec SCPI_Flush utilisé pour débusquer tous les types de tampons de sortie qui peuvent exister. SCPI_Error affiche des messages d’erreur de libscpi, SCPI_Reset remet à zéro l’appareil, ainsi que SCPI_Control est utilisé pour composer le canal à gérer (en option, ici sur le port TCP 5026).
Pour obtenir libscpi pour analyser tout type de chaînes entrantes frais (toujours terminé par un saut de ligne, \ n ou \ r \ n), votre téléphone code appelle SCPI_Input, ou dans la situation des commandes singulières, SCPI_Parse peut également être utilisé directement.
Un exemple d’application de libscpi sur STM32 avec le ST HAL avec FreeRTOS ainsi qu’un simple serveur HTTP peuvent être découverts dans ce dépôt GitHub. Cette cible le conseil d’avancement nucléo-F746ZG.
IPAC numérique Multimètre
L’invention concerne également l’exemple de libscpi est l’exemple d’application d’un dispositif de multimètre numérique. Si nous ouvrons les définitions de commandes ainsi que les mises en œuvre dans IPAC-def.c, il nous donne un aperçu de ce qu’est une application gadget personnalisé nécessiterait. Cela commence par la table de commande, appelée scpi_commands.
Cette table définit toutes les commandes dans le style d’un motif de rappel associé (tous les cependant de celles de base mises en oeuvre dans le fichier exactement la même), en commençant par les commandes mandaté IEEE, par exemple * CLS (état): CLear
{.Pattern = “* CLS”, .callback = SCPI_CoreCls,}
Le « * » (astérisque) devant un moyen de commande qu’il est nécessaire, commande IPAC typique que chaque gadget doit mettre en œuvre. plus importants sont * IDN ?, les requêtes (notez la marque de préoccupation) le gadget sur son identité, * RST pour commander le gadget pour réinitialiser ainsi que * WAI qui indique le gadget d’attendre avec l’exécution de tout type de nouvelles commandes jusqu’à la les commandes précédentes cette commande ont été accomplies.
Après ce bloc de commandes nécessaires, nous obtenons le bloc avec les fonctions DMM:
1
2
3
4
5
6
7
8
9
dix
{.Pattern = “Measure: VOLTage: DC”, .callback = DMM_MeasureVoltageDcQ,},
{.Pattern = “CONFigure: VOLTage: DC”, .callback = DMM_ConfigureVoltageDc,},
{.Pattern = “Measure: VOLTage: DC: RATIO”, .callback = SCPI_StubQ,},
{.Pattern = “Measure: VOLTage: AC”, .callback = DMM_MeasureVoltageAcQ,},
{.Pattern = “Measure: CURRent: DC”, .callback = SCPI_StubQ,},
{.Pattern = “Measure: CURRent: AC”, .callback = SCPI_StubQ,},
{.Pattern = “Measure: RESistance”, .callback = SCPI_StubQ,},
{.Pattern = “Measure: FRESistance”, .callback = SCPI_StubQ,},
{.Pattern = “Measure: FREQuency?”, .Callback = SCPI_StubQ,},
{.Pattern = “Measure: PERiod”, .callback = SCPI_StubQ,},
La raison de la mixte supérieure ainsi que les minuscules utilisent dans les commandes a à voir avec l’aspect « pattern »: en IPAC seule la partie majuscule du motif est nécessaire, ainsi que la section minuscule d’une commande peut être omise par souci de concision . Comme indiqué plus haut, une commande respectée par une marque de préoccupation est une requête. L’utilisent des côlons est de séparer les niveaux de la hiérarchie de l’arborescence qui définit une interface SCPI.
Pour utiliser cette hiérarchie pour déterminer la tension ainsi que présente pour DC dans une seule chaîne, on utiliserait la conformité avec la commande:
Mesure: VOLTage: DC;: MEASure: CURRent: AC?
Le point-virgule sépare les commandes privées, ainsi que les deux points principaux remet à zéro la hiérarchie à la racine de l’arbre de commande. Cette dernière fonction peut être utilisée pour produire des chaînes de commande extrêmement court pour concaténés par exemple mesurer à la fois la tension CA et CC:
Mesure: VOLTage: DC, AC?
Depuis la première commande nous a laissé au niveau de la hiérarchie VOLTage, la commande suivante déclencherait l’AC? mettre en doute. Cela signifie qu’une interface bien conçue pour un gadget peut faire contrôler même assez efficace lors de la saisie manuelle dans les requêtes en évitant les répétitions inutiles.
Fonctionnalités avancées
Tout cela fait qu’effleurer simplement la surface de ce que IPAC est capable, bien sûr. En plus de la sortie de texte ordinaire, les chaînes numériques peuvent également être marqués comme étant hexadécimal (#H), comme octal (#Q), ou sous forme binaire (# B). Les arguments peuvent être fournis avec des commandes séparées par un espace. Avec libscpi ces arguments peuvent être récupérés dans la fonction de rappel.
séquentiel complexe ainsi que des séquences de commande qui se chevauchent peuvent également être mis en place en utilisant l’OPC * ainsi que des commandes * WAI, conjointement avec l’* OPC? mettre en doute. Ceux-ci peuvent être utilisés en combinaison avec les commandes de registre de condition, ainsi que tout type de commandes spécifiques à l’appareil pour gérer des séquences particulièrement chronométrés.
La plus belle partie sur les SCPI est plus probable que les échelles ainsi que la complexité du dispositif, que ce soit d’un simple appareil de mesure de tension, ou une lecture instrument scientifique en tantperturbations de NTUM, le protocole sous-jacent ne change pas. En ne pas avoir à réinventer exactement les mêmes fondamentaux à chaque fois, le designer ainsi que l’individu du gadget peuvent plutôt se concentrer sur les choses qui comptent.
Dans la situation de l’utilisateur final, qui est probablement l’expérience de déballage de l’appareil, de le brancher ainsi que de la programmation dans les séquences SCPI qui le rendent performant les fonctions préférées. Qui est l’avantage majeur de se conformer aux normes établies.
[Image de la tête: l’arrière de l’oscilloscope DS1104Z Rigol avec les ports Ethernet ainsi que des ports USB visibles. Crédit: Rigol]