Comunicación Modbus entre el host y el Smart Display
Para facilitar a los desarrolladores los primeros pasos con los Smart Display de WINSTAR y ayudarles a comprender mejor su funcionamiento, seguimos ofreciendo proyectos de demostración prácticos para distintos escenarios de aplicación. En este artículo presentamos un nuevo ejemplo basado en Modbus, pensado para que tanto los desarrolladores que se inician en esta tecnología como los más experimentados puedan comprender rápidamente sus principios fundamentales.
Modbus es un protocolo ampliamente utilizado en automatización industrial para la comunicación y el control de distintos dispositivos y sensores. En esta aplicación, una placa Arduino actúa como controlador host para la integración del sistema. Mediante Modbus, el Arduino trabaja con distintos sensores y Toggle Buttons para controlar el Smart Display, el Gauge, el Indicator y los LED. En esta demostración se utiliza un Arduino Mega 2560 con un shield RS485 para establecer la comunicación Modbus con el Smart Display.
El programa muestra cómo leer los valores de los sensores, cambiar entre las páginas de visualización y controlar los LED en función de las lecturas de los sensores mediante registros Modbus.

Diagrama de bloques del sistema
Para esta aplicación se necesitan los siguientes componentes:
- Smart Display de 7 pulgadas con Modbus
- Arduino Mega 2560
- Shield RS485 Modbus para Arduino Mega 2560
- Arduino IDE v2.0.4
- Dongle Modbus RS485
- Pulsador físico
- Sensor de ángulo de giro con resistencia variable (Variable Resistor / Rotary Angle Sensor)
- LED
- GUI Builder v0.4.2 o posterior
La demostración se divide en tres etapas:
- Diseñar el proyecto de demostración en GUI Builder.
- Compilar y cargar el proyecto.
- Programar el host Arduino.
Diseñar el proyecto de demostración en GUI Builder
En primer lugar, abra una versión actualizada de GUI Builder y cree un nuevo proyecto. Introduzca el nombre del proyecto y compruebe la carpeta de destino seleccionada automáticamente de forma predeterminada. A continuación, seleccione el tipo de dispositivo correspondiente al Smart Display de 7 pulgadas utilizado en esta demostración y elija el protocolo de comunicación. Mantenga la orientación de la pantalla en modo horizontal, seleccione « Blank » en UI Template y, por último, haga clic en « Create » para crear el nuevo proyecto, tal como se muestra a continuación.

Una vez creado el proyecto, se mostrará la siguiente página.

De acuerdo con el escenario de esta demostración, es necesario añadir una segunda página. Para ello, haga clic en el botón « Page » y, a continuación, en el botón « + ».

Puede seleccionar un fondo personalizado desde el panel Resource.

El estilo de fondo también puede seleccionarse directamente desde la sección Page.

A continuación, vuelva a la primera página y acceda a la sección Controls. De acuerdo con el escenario de la demostración, seleccione el Toggle Button y arrástrelo hasta el área de diseño de la página. Repita el mismo procedimiento para añadir los widgets Gauge e Indicator.

Compilar y cargar el proyecto
Una vez completados los pasos anteriores, con las dos páginas creadas y los widgets Toggle Button, Gauge e Indicator añadidos a la primera página, el proyecto puede compilarse y cargarse en el Smart Display. Acceda a la sección Page Info, haga clic en « Device » y seleccione « Device Properties ». Compruebe el protocolo configurado, seleccione el puerto COM y establezca la velocidad de transmisión (baud rate). A continuación, haga clic en « Connect to device » para establecer la conexión con el Smart Display. Por último, haga clic en « Upload » para cargar el proyecto, tal como se muestra a continuación, y espere hasta que finalice el proceso.

Una vez finalizada la carga del proyecto, haga clic en « OK », tal como se muestra a continuación.

Una vez completada la carga, aparecerá la pantalla de inicio, tal como se muestra a continuación.

Después de la pantalla de inicio, el Smart Display cambiará automáticamente a la primera página del proyecto. Con ello, el proceso de compilación y carga del proyecto mediante GUI Builder habrá finalizado, tal como se muestra a continuación.

Programar el host Arduino
La figura siguiente muestra las direcciones de los registros y las principales definiciones utilizadas en el programa desarrollado en Arduino IDE. El programa comienza definiendo los pines del pulsador físico, del sensor de ángulo de giro con resistencia variable y de los LED. A continuación, se inicializa la comunicación Modbus mediante la biblioteca ModbusMaster. También se definen las direcciones de los registros Modbus utilizadas para cambiar de página y controlar los widgets Indicator, Gauge y Toggle Button.

Para comprender mejor el proceso de comunicación, consulte la sección Test Device o Simulator del registro de comunicación de GUI Builder. Desde allí puede comprobarse cómo se realiza la comunicación entre el dispositivo host y el Smart Display mediante Modbus RS485.
La figura siguiente muestra los datos del registro de comunicación del « Toggle Button ». Estos datos permiten identificar la dirección utilizada para acceder al widget en el Smart Display. El segundo byte del campo Data Byte contiene el valor hexadecimal 00 06, que corresponde a la dirección del Toggle Button. Al convertirlo a decimal, el valor resultante es 6. Esta dirección puede utilizarse para escribir datos en el widget. Sin embargo, en esta aplicación el Toggle Button se utiliza para leer datos procedentes del Smart Display. Para ello se utiliza la dirección de registro « 7 ».

¿Por qué se utiliza la dirección de registro « 7 » para leer el estado del Toggle Button? Para obtener información más detallada sobre la asignación de registros y el proceso de comunicación, consulte la hoja de datos del Smart Display Modbus. La imagen siguiente muestra un extracto de la hoja de datos con las direcciones utilizadas por el primer objeto (widget), el Toggle Button.

La figura siguiente muestra los datos del registro de comunicación del « Gauge ». A partir de estos datos puede identificarse la dirección del widget Gauge. El segundo byte del campo Data Byte contiene el valor hexadecimal 00 6A, que corresponde a la dirección del Gauge. Al convertirlo a decimal, el valor resultante es 106. Esta dirección puede utilizarse para escribir datos en el widget Gauge.

La figura siguiente muestra los datos del registro de comunicación del « Indicator ». A partir de estos datos puede identificarse la dirección del widget Indicator. El segundo byte del campo Data Byte contiene el valor hexadecimal 00 CE, que corresponde a la dirección del Indicator. Al convertirlo a decimal, el valor resultante es 206. Esta dirección puede utilizarse para escribir datos en el widget Indicator.

La constante ADC_REF está definida en 5 V y representa la tensión de referencia del ADC (convertidor analógico-digital). GROVE_VCC está definida con el valor 5 y corresponde a la tensión VCC de la interfaz Grove utilizada en el circuito. La constante FULL_ANGLE está definida con el valor 300 y representa el ángulo máximo de giro del sensor utilizado en esta aplicación, expresado en grados.

A continuación, se declaran las variables necesarias y sus correspondientes tipos de datos, y se inicializan con el valor cero.

Seguidamente, se configuran los modos de los pines y los parámetros de los componentes externos, como el pulsador físico y los LED. También se establece la velocidad de transmisión de la comunicación serie, tal como se muestra a continuación.

La figura siguiente muestra la definición de la función « ChangePageFunction ». La función « writeSingleRegister » se utiliza para escribir los datos en el registro Modbus correspondiente.

La figura siguiente muestra el procesamiento del valor del sensor de ángulo de giro con resistencia variable (Variable Resistor / Rotary Angle Sensor). Cuando el host Arduino detecta un cambio en el valor del sensor, envía dicho valor al Smart Display mediante Modbus para actualizar el Gauge. Cuando el valor del Gauge es inferior a 120, el LED conectado al pin 13 permanece apagado y el Indicator se muestra en verde. Cuando el valor alcanza o supera 120, el LED se enciende y el Indicator cambia a rojo.

La figura siguiente muestra el procesamiento del estado del pulsador físico. Cuando el host Arduino detecta un cambio en el estado del pulsador, envía el valor correspondiente al Smart Display mediante Modbus para cambiar la página mostrada.

La figura siguiente muestra cómo el host Arduino lee el estado del Toggle Button desde el Smart Display mediante Modbus. En función del valor recibido, el LED conectado al pin 12 se enciende o se apaga.

Una parte importante del programa es el uso de las funciones « writeSingleRegister » y « readHoldingRegisters ». La función « writeSingleRegister » se utiliza para escribir datos en los registros del Smart Display, mientras que « readHoldingRegisters » permite leer los datos procedentes del Smart Display. Al comunicarse con widgets activos, como el Gauge, también es necesario establecer un intervalo adecuado entre las operaciones Modbus. Una vez enviada una solicitud y recibida la respuesta correspondiente, puede ejecutarse la siguiente operación. Por este motivo, el programa incorpora intervalos entre las operaciones de lectura y escritura.

Una vez verificado y cargado correctamente el programa mediante Arduino IDE, pueden ejecutarse los distintos escenarios de la demostración. Cuando el Toggle Button está en estado OFF, el LED externo conectado al pin 12 también permanece apagado. Cuando el Toggle Button cambia a ON, el LED se enciende inmediatamente, tal como se muestra a continuación.

En este escenario de demostración, el Gauge se controla mediante el sensor de ángulo de giro con resistencia variable. Cuando el valor del Gauge es inferior a 120, el Indicator se muestra en verde y el LED conectado al pin 13 permanece apagado. Cuando el valor alcanza o supera 120, el Indicator cambia a rojo y el LED conectado al pin 13 se enciende, tal como se muestra a continuación.

En este escenario también es posible cambiar de página mediante el pulsador físico. Al pulsarlo por primera vez, el Smart Display cambia a la segunda página. Al pulsarlo de nuevo, vuelve a la primera página, tal como se muestra a continuación.

Con esto queda completado el proyecto de demostración para el Smart Display de 7 pulgadas. El ejemplo utiliza distintos sensores y LED para cambiar de página mediante un pulsador físico y controlar el Gauge, el Indicator y los LED externos. Para descargar el programa y obtener más información sobre este proyecto de demostración, consulte el programa de demostración en GitHub.
Nota: para obtener más información sobre el Modbus RS485 Shield utilizado en este proyecto de demostración, consulte la documentación del Modbus RS485 Shield. La configuración real del hardware se muestra a continuación.

Conclusión
En conjunto, este programa muestra de forma práctica cómo utilizar una placa Arduino y el protocolo Modbus para comunicarse con un Smart Display y controlar distintos elementos del sistema. El ejemplo permite comprender cómo leer los valores de los sensores, cambiar entre las páginas de visualización y controlar el Indicator y los LED mediante registros Modbus. De este modo, el proyecto ofrece una introducción práctica a la comunicación Modbus con un Smart Display, tanto para desarrolladores que se inician en esta tecnología como para profesionales que deseen profundizar en su integración.