Cómo aceleramos Modbus en nuestro controlador en una semana / Sudo Null IT News

estamos en la empresa Lavritech Llevamos varios años desarrollando dispositivos de automatización y controladores. También hemos desarrollado un ecosistema de software que puede funcionar con diferentes interfaces, incluido Modbus. Inicialmente no lo consideraron importante, pero con el tiempo resultó que muchos de nuestros clientes necesitaban Modbus, por lo que comenzaron a ampliar su soporte en sus dispositivos y soluciones.

Cómo agregamos soporte Modbus

Nuestros controladores ESP32 inicialmente tienen un subsistema para trabajar con el bus Modbus, pero en las primeras implementaciones la funcionalidad Modbus era limitada: el controlador admitía los dispositivos más simples, no había plantillas listas para usar. Aunque para los mismos módulos de relés con una pequeña cantidad de registros la funcionalidad era suficiente.

Registramos cada dispositivo Modbus mediante registros y una plantilla de respuesta en una pequeña ventana, por ejemplo:

Plantilla de respuesta (máscara): r1d1,r2d3,r2d1,r2,r1d1,rd2

salidas en orden: tensión (1 registro, 1 decimal), corriente (2 registros, 3 decimales), potencia actual (2 registros, 1 decimal), energía consumida (2 registros), frecuencia de red (1 registro, 1 decimal) lugar), Factor de potencia (1 registro, 2 decimales)

Los usuarios podían agregar soporte para sus dispositivos, pero teníamos que descubrir nuestra sintaxis. Todo esto era bastante doloroso para los usuarios; a menudo agregaban plantillas erróneas que no funcionaban. Luego torturaron a nuestro apoyo para encontrar la causa de los problemas. Necesitamos hacerlo mejor, por eso cambiamos a la segunda versión de Modbus con plantillas listas para usar.

En la segunda versión del subsistema Modbus para nuestro controlador, ya agregamos plantillas listas para usar al firmware. Ahora los usuarios no podían instalar una plantilla “torcida” y arruinarlo todo. El firmware contenía solo aquellas plantillas que escribimos nosotros mismos. Pero si necesitaba agregar soporte para una nueva plantilla y dispositivo al controlador del cliente, tenía que actualizar el firmware.

Lista de plantillas listas para usar, principalmente para módulos Wiren Board
Lista de plantillas listas para usar, principalmente para módulos Wiren Board

Lista de plantillas listas para usar, principalmente para módulos Wiren Board

Nuestra base de usuarios siguió creciendo y, por lo tanto, hubo más solicitudes de clientes. En primer lugar, queríamos ofrecer a los usuarios la posibilidad de agregar nuevas plantillas al controlador sin necesidad de volver a flashear. En segundo lugar, los usuarios necesitaban la capacidad de escribir sus propias plantillas y agregarlas al controlador.

Así surgió la tercera versión actual del subsistema Modbus en nuestro controlador, al que llamamos Modbus FS. Puedes leer más sobre esto en Documentación de Lavritech. Creamos un sistema de archivos para que las plantillas se puedan cargar como archivos, sin actualizar todo el firmware. Ahora el usuario puede descargar las plantillas necesarias de nuestro repositorio e instalarlas en el controlador. Puede escribir las plantillas usted mismo, pero luego deberá enviárnoslas para su verificación, después de lo cual las publicaremos.

Administrador de archivos de plantillas en firmware

Administrador de archivos de plantillas en firmware

Fotos adicionales
Editor de archivos de plantilla en el firmware del controlador, en este caso para el sensor WB-MSW

Editor de archivos de plantilla en el firmware del controlador, en este caso para el sensor WB-MSW

Interfaz de opción Modbus FS en nuestro controlador

Interfaz de opción Modbus FS en nuestro controlador

Modbus lento

Descubrimos plantillas y agregamos dispositivos. Pero ¿qué pasa con el tiempo de respuesta? Los usuarios se han quejado durante mucho tiempo de que los dispositivos Modbus tardan en responder. Digamos que la luz se encendió un segundo después de presionar un botón en la aplicación.

Para los sistemas con sensores, el tiempo de respuesta no es tan importante, donde sondeamos los dispositivos una vez cada diez segundos. En una casa inteligente, el tiempo de sondeo se puede reducir a un segundo. Menos ya es arriesgado: la potencia de procesamiento del controlador ESP32 no es tan grande, se cargará con una gran cantidad de solicitudes y no tendrá tiempo para procesar otras tareas. Y cuantos más dispositivos hay en el autobús, más grave se vuelve este problema.

Probamos el bus I²C para entradas discretas rápidas (botones, interruptores). Sin embargo, es muy corto porque está destinado a conectar componentes en una placa de circuito impreso. Es decir, a través de I²C no será posible distribuir los mismos módulos de control y botones a larga distancia. Además, los dispositivos de diferentes proveedores no son “compatibles” con I²C. Finalmente, los usuarios quieren una forma simple, universal y confiable de conectar módulos externos al controlador, y I²C es una “muleta”, y además es caprichosa, es necesario monitorear la calidad de la conexión;

Una de las opciones para implementar módulos I²C son los módulos laterales Wiren Board, los utilizamos desde hace mucho tiempo. Sí, todo funciona muy rápidamente dentro de los módulos laterales, pero esta configuración es difícil de configurar: es inconveniente de expandir, requiere un monitoreo constante del orden de las conexiones de los módulos y no es adecuado en todas partes. Lo quería mejor.

En WBCE 2023 supimos que Wiren Board ha desarrollado una extensión Fast Modbus. La idea era buena, pero ¿funcionará en la práctica? En la exposición acordamos con los ingenieros enviarnos el equipo bajo carta de garantía. Aún así, una demostración es buena, pero siempre querrás tocarla con las manos. Se pidió una amplia gama de productos, casi toda la gama de módulos compatibles con Fast Modbus. Colocamos los dispositivos en el escritorio del programador, ensamblamos el bus, lo conectamos a la PC mediante un adaptador UART y comenzamos a conducir y capturar paquetes. ¿Qué clase de “bestia” es esta? Rápidamente entendimos cómo funciona todo. La “bestia” resultó no dar nada de miedo. Así nació la idea de agregar soporte para Fast Modbus a nuestro subsistema Modbus FS, que se estaba desarrollando en ese momento. ¿Fue difícil? Al principio parecía que habría dolor y lágrimas, pero en realidad no.

Soporte de prueba de dispositivos con un convertidor USB-RS485 para la depuración inicial del protocolo Modbus desde una computadora

Soporte de prueba de dispositivos con un convertidor USB-RS485 para la depuración inicial del protocolo Modbus desde una computadora

Agregar soporte Fast Modbus a nuestro controlador

Observemos inmediatamente dos puntos importantes: para comprender el funcionamiento de Fast Modbus, es necesario tener hardware a mano. Afortunadamente, Wiren Board puede enviarlos de forma gratuita mediante una carta de garantía. Y los desarrolladores de startups no tendrán que soportar costes adicionales. Por cierto, nuestro programador ni siquiera empezó a entender el funcionamiento de Fast Modbus hasta que recibió el hardware, porque era demasiado vago y no tenía tiempo.

Segundo punto: todo está bien. descrito en la documentación. Durante varios días probamos los módulos de Wiren Board de varias maneras, observando las luces que parpadeaban rápidamente. Parecía como si los dispositivos Modbus estuvieran justo en el controlador: la comunicación fue (casi) instantánea. Seguimos la documentación paso a paso y comprobamos el funcionamiento de todas las funciones. Descubrimos la prioridad de las encuestas, el apoyo a eventos en el autobús y el escaneo del autobús. Luego llegó una comprensión completa de cómo funciona todo. Y si hay entendimiento, entonces es hora de implementar soporte en nuestros controladores Lavritech.

Primero probamos nuestro entorno de software en una PC con Linux y luego compilamos el firmware. El programador miró la documentación y los ejemplos y luego escribió el código. Todo el trabajo se dividió en cuatro etapas:

  1. Suscribirse: el maestro envía comandos a todos los dispositivos para indicar qué registros monitoreará.

  2. El maestro envía una solicitud de transmisión de nuevos datos a todos los dispositivos.

  3. Luego, según el algoritmo, los dispositivos transmiten paquetes, los analizamos.

  4. El último paso es escanear el bus mediante Fast Modbus. Al principio hubo algunos errores, pero durante el proceso de depuración todo se resolvió rápidamente.

En total, a uno de nuestros programadores le tomó una semana de tardes agregar Fast Modbus, mientras al mismo tiempo resolvía otros problemas de trabajo. Es decir, todo el soporte se puede realizar en un solo sprint. Como resultado, agregamos a nuestro firmware un escáner de dispositivos de bus, soporte de eventos, cambio de velocidad del dispositivo con una solicitud, etc.

En el código, todo esto parece un hilo adicional que solicita datos en el bus Modbus a una frecuencia determinada y luego verifica los siguientes paquetes en un ciclo. Básicamente, un flujo con solicitudes periódicas que no interfiere con otros datos.

Como resultado, configuramos el intervalo de sondeo en 100 ms, aunque la documentación indica la posibilidad de establecer 50 ms. Pero incluso 100 ms es una respuesta casi instantánea.

Para habilitar Fast Modbus en el controlador, debe tener un firmware que lo admita, después de lo cual puede activar la opción marcando la casilla en la interfaz web. Hay una nota en las plantillas: si necesita usar Fast Modbus para algún registro, coloque uno. Es decir, el cliente puede elegir para qué dispositivos necesita Fast Modbus. Si no se necesita Fast Modbus, la comunicación con dichos dispositivos y registros se realizará de forma tradicional.

¿Cómo afectó Fast Modbus a la carga del controlador? Aún así, el ESP32 tiene pocos recursos. Nos preocupamos por esto, pero fue completamente en vano. Incluso logramos reducir la carga. ¿Cómo? Aumentamos el tiempo de sondeo para dispositivos convencionales a 10 s, y el sondeo Fast Modbus casi no requirió recursos adicionales. Como resultado, incluso aceleramos el trabajo con dispositivos I²C, ya que el controlador liberó recursos.

Rápida interfaz de escáner Modbus en nuestro controlador

Rápida interfaz de escáner Modbus en nuestro controlador

Fotos adicionales
En la interfaz web de la plataforma Lavritech, si crea el firmware usted mismo, debe marcar la casilla, después de lo cual aparece soporte para Modbus rápido en el controlador.

En la interfaz web de la plataforma Lavritech, si crea el firmware usted mismo, debe marcar la casilla, después de lo cual aparece soporte para Modbus rápido en el controlador.

Conclusión

Inicialmente, Modbus no era el principal para nosotros, pero los clientes lo necesitaban, por lo que poco a poco lo fuimos ampliando. Cuando estábamos trabajando en la tercera versión del subsistema Modbus en nuestro controlador, aprendimos sobre Fast Modbus. La idea parecía interesante, así que decidimos agregar soporte.

Para ser honesto, esperábamos que fuera más difícil. Pero Wiren Board transfirió toda la complejidad de Fast Modbus al lado del dispositivo y del firmware, por lo que tomó un poco de tiempo. Se agregó literalmente en una semana y se dedicó algo más de tiempo a las pruebas. Como resultado, incluso fue posible reducir la carga en el controlador, ya que los dispositivos lentos no necesitan ser sondeados con frecuencia y los dispositivos con retardo crítico funcionan a través de Fast Modbus. Los recursos liberados permitieron incluso acelerar el trabajo con dispositivos I²C. Estamos felices. Esperamos que nuestros clientes también lo hagan.

¿Qué opinas sobre Fast Modbus? ¿Tiene sus propios casos de implementación? Comparte en los comentarios.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *