se puede excusar para creer, a veces, la idea de vincular los gadgets con otros gadgets para funciones de automatización es un invento relativamente reciente. Sin embargo, para todos los exageraciones (relativamente) recientes de la web de las cosas, así como la ‘casa inteligente’, los laboratorios han estado cableando su equipo para ejecutar una medición desafiante, así como las secuencias de prueba durante muchas décadas, junto con las fábricas que hacen muchas fábricas. exactamente lo mismo para automatizar los procesos de producción.
Al igual que el mundo caótico de los dispositivos IOT, los dispositivos de laboratorio de diferentes fabricantes funcionan un gran número de protocolo incompatible, así como estándares de interfaz. Eventualmente, estos se unen en IEEE-488.1 (GPIB) como la capa física, así como para 1990, se lanzó los primeros comandos básicos para instrumentos programables (SCPI) básicos que se desarrollaron en la parte superior de IEEE-488.
SCPI define (como su nombre sugiere) los comandos básicos para interactuar con los instrumentos. Se ha realizado en las últimas décadas para proporcionar capacidades de interacción remotas a lo que sea de los osciloscopios, así como las fuentes de alimentación a equipos científicos exóticos. Muchos fuera de los gadgets de estantería que un aficionado puede comprar hoy funciona una interfaz SCPI a través de su (los) puerto Ethernet, USB o RS-232C que se puede utilizar con la aplicación de software para automatizar el laboratorio de la casa.
Mucho mejor es que es bastante simple agregar un rendimiento de SCPI a los propios gadgets, siempre que tenga al menos una MCU, así como un método para interactuar con el mundo exterior.
Reinventar la rueda no es divertido.
Tan muy divertido, ya que es encontrar la propia comunicación básica para un widget personalizado, existe una gran oferta que se debe establecer para mantenerse con los estándares existentes, en lugar de agregar un ‘estándar’ más a la pila. Una gran razón es el momento en que gastará un protocolo que funciona, que cubre todas las situaciones de borde, así como deja espacio suficiente para el crecimiento futuro cuando se agregan nuevas características.
Otra razón es la de la compatibilidad con el software existente, lo que también toca por qué los individuos finales probablemente estén entusiasmados con este nuevo protocolo increíble. Al utilizar SCPI, se puede integrar relativamente sin dolor en el software de automatización existente (Laboratorio), ya que toda la idea detrás de SCPI es que cada instrumento implementará su propia variedad de comandos personalizados además de una serie de los necesarios.
Para los individuos de la aplicación de software como LabVIEW o SIGROK, la situación perfecta es que el gadget habla SCPI, así como que, en el peor de los casos, se debe escribir un controlador personalizado para los comandos de SCPI personalizados cuando no se ofrece uno. Lo que nunca se modificará aquí es la sintaxis de SCPI fundamental, lo que permite el arranque rápido de los nuevos dispositivos, la prevención de errores (ningún analizador es perfecto), así como la reutilización del código. El conjunto de comandos de base de SCPI también permite un rendimiento como mecanismos de sincronización de forma predeterminada.
A pesar de esto, cuando los suyos consideran verdaderamente la pila actual de equipos de medición, así como las fuentes de alimentación programables que se acumulan en el laboratorio de la casa, no todos hablan SCPI. El osciloscopio Rigol DS1104Z hace a través de su puerto Ethernet. El bitle hermano del OWON XDM2041 DMM (XDM1041) habla SCPI a través de su puerto USB. Hasta ahora, tan bueno, sin embargo, las toneladas electrónicas (Arachnid Labs Reload PRO) habla un protocolo personalizado a través de USB que podría haber sido SCPI.
La fuente de alimentación programable de Manson HCS-3304 hace lo mismo con el mismo protocolo personalizado, con los comandos enumerados en las revisiones de los manuales, obviamente, lo que también está equivocado. Con solo algunos de estos dispositivos apoyados por SIGROK en este punto, las pruebas de automatización incluirían la piratería de mi propio decodificador, en lugar de un poco de torre de alto nivel con comandos de gadgets de SCPI personalizados.
El uso de requisitos adecuadamente puede ahorrar mucho tiempo, la cordura, así como los pelos grises. Lo que lleva a la siguiente pregunta: ¿exactamente lo simple que es para agregar SCPI a su propio widget de increíble?
Entrar en libscpi
No todos desean componer su propio analizador SCPI desde cero, por lo que la biblioteca del analizador SCPI V2, o simplemente ‘libscpi’ es un gran comienzo. Implementa el presente estándar SCPI 1999. Dado que estaríamos pensando en utilizar SCPI en un dispositivo incrustado, echaremos un vistazo a los Freertos proporcionados con el ejemplo LWIP (NETCONN). Esto muestra la aplicación de un servidor SCPI que se ejecuta en un hilo de Freertos.
El servidor SCPI configura un puerto de audición TCP en el puerto básico SCPI (5025), después de qué comandos se pueden enviar al gadget a través de cualquier tipo de cliente de Telnet o similar en modo RAW, es decir, texto ordinario. Tenga en cuenta que en este ejemplo del servidor, se utiliza NetConn_Copy de LWIP NetConn en lugar de NetConNN_NOCOPY. Esto es importante para prevenir la corrupción de datos (uso de datos de búfer después de eliminar) cuando utilice comandos de SCPI encadenados.
Para utilizar LIBSCPI con un USART u otra interfaz, lo primero que debe hacer es configurar la biblioteca llamando a SCPI_init. El ingenio cumpliendoLas técnicas de H deben implementarse también en su código:
Scpi_write (scpi_t * contexto, const char * data, size_t len)
Scpi_flush (scpi_t * contexto)
Scpi_error (scpi_t * contexto, int_fast16_t err)
Scpi_control (scpi_t * contexto, scpi_ctrl_name_t ctrl, scpi_reg_val_t val)
Scpi_reset (contexto scpi_t *)
Estas funciones son principalmente autoexplicativas. Como se puede determinar de la implementación de ejemplo, SCPI_WRITE permite a LIBSCPI componer su salida de elección, con SCPI_FLUSH utilizado para eliminar cualquier tipo de búferes de salida que puedan existir. Scpi_Error Imprime los mensajes de error de LIBSCPI, SCPI_Reset restablece el dispositivo, así como SCPI_CONTROL se utiliza para componer al canal de administración (función opcional, aquí, aquí en el puerto TCP 5026).
Para obtener libscpi para analizar cualquier tipo de cadenas entrantes frescas (siempre terminadas con una nueva línea, \ n, o \ r \ n), su código llamadas telefónicas scpi_input, o en la situación de los comandos singulares, SCPI_PARSE también se puede utilizar directamente.
Una aplicación de ejemplo de LIBSCPI en STM32 con el St Hal junto con Freertos, así como un servidor HTTP simple, se puede descubrir en este repositorio de GitHub. Esto se dirige a la Junta de Avance Nucleo-F746ZG.
Multímetro digital SCPI
También provisto con el ejemplo libscpi es la aplicación de ejemplo de un dispositivo multímetro digital. Si abrimos las definiciones de comando, así como las implementaciones en SCPI-DEF.C, nos proporciona un gran vistazo a lo que requeriría una solicitud de gadget personalizada. Esto comienza con la tabla de comandos, llamados scpi_commands.
Esta tabla define todos los comandos en el estilo de un patrón con la devolución de llamada asociada (todos, sin embargo, los núcleos implementados en el mismo archivo exactamente), comenzando con los comandos obligatorios de IEEE, por ejemplo. * CLS (estado claro):
{.pattern = “* CLS”, .callback = scpi_corecls,}
El ‘*’ (asterisco) delante de un comando significa que es un comando SCPI típico requerido que todos los gadget deben implementar. Los importantes son * idn?, que consultas (note la marca de preocupación) el gadget sobre su identidad, * RST para ordenar el gadget para restablecer, así como * WAI que le indique al gadget que espere con la ejecución de cualquier tipo de comandos nuevos hasta el Los comandos anteriores a este comando se han completado.
Después de este bloque de los comandos necesarios, obtenemos el bloque con las funciones DMM:
1
2
3
4
5
6
7
8
9
10
{.pattern = “Medida: voltaje: DC?”, .callback = dmm_measurevoltagedcq,},
{.pattern = “Configurar: Voltaje: DC”, .callback = dmm_configurevoltaged,},
{.pattern = “Medida: voltaje: DC: ¿Relación?”, .callback = scpi_stubq,},
{.pattern = “Medida: voltaje: AC?”, .callback = dmm_Measurevoltageacq,},
{.pattern = “Medida: Current: DC?”, .callback = scpi_stubq,},
{.pattern = “Medida: Current: AC?”, .callback = scpi_stubq,},
{.pattern = “Medida: Resistencia?”, .callback = scpi_stubq,},
{.pattern = “Medida: Fresistencia?”, .callback = scpi_stubq,},
{.pattern = “Medida: Frecuencia?”, .callback = scpi_stubq,},
{.pattern = “Medida: ¿Período?”, .callback = scpi_stubq,},
La razón de la parte superior mixta y minúscula en minúscula en los comandos tiene que ver con el aspecto ‘patrón’: en SCPI solo se requiere la parte en mayúscula del patrón, así como la sección en minúscula de un comando se puede omitir para la brevedad . Como se señaló anteriormente, un comando cumplido por una pregunta de preocupación es una consulta. El utilizado de los colones es separar los niveles de la jerarquía de árbol que define una interfaz SCPI.
Para utilizar esta jerarquía para determinar el voltaje, así como presente para DC en una sola cadena, uno utilizaría el cumplimiento con el comando:
Medida: Voltaje: DC?;: Medida: Corriente: AC?
El semi-colon separa los comandos privados, así como el luminoso colon restablece la jerarquía a la raíz del árbol de comandos. Esta última función se puede utilizar para producir cadenas de comando concatenadas extremadamente cortas para por ejemplo. Midiendo tanto el voltaje de AC y CC:
Medida: Voltaje: DC ?; AC?
Dado que el primer comando nos dejó en el nivel de jerarquía de voltaje, el comando posterior activaría el AC? consulta. Esto significa que una interfaz bien diseñada para un gadget puede hacer que lo controlen sea bastante efectivo incluso cuando escriba manualmente las consultas al evitar la repetición innecesaria.
Características avanzadas
Todo esto simplemente rasguña la superficie de lo que Scpi es capaz de, por supuesto. Además de la salida de texto ordinario, las cadenas numéricas también pueden marcarse como hexadecimal (#H), como octal (#q), o como binario (#B). Los argumentos se pueden proporcionar junto con los comandos separados por un espacio. Con LIBSCPI, estos argumentos se pueden recuperar en la función de devolución de llamada.
También se pueden configurar complejos secuenciales, así como secuencias de comandos superpuestas. consulta. Estos se pueden utilizar en combinación con los comandos de registro de condición, así como cualquier tipo de comandos específicos del dispositivo para administrar secuencias especialmente cronometradas.
La mejor parte de SCPI es muy probable que se vea junto con la complejidad del dispositivo, ya sea un medidor de voltaje simple, o un instrumento científico que lee quaPerturbaciones a nivel de NTUM, el protocolo subyacente no cambia. Al no tener que reinventar los mismos fundamentos exactamente cada vez que, el diseñador, así como el individuo del gadget, en cambio, puede centrarse en las cosas que importan.
En la situación del usuario final, es probable que sea la experiencia de desempacar el dispositivo, enchufarlo, así como la programación en las secuencias de SCPI que lo hacen realizar las funciones preferidas. Que es el principal beneficio de cumplir con los estándares establecidos.
[Imagen de encabezado: Osciloscopio de Rigol DS1104Z con el Ethernet, así como los puertos USB visibles. Crédito: Rigol]