En este post, configuraremos un M-Duino como esclavo MQTT y un ordenador como maestro. Primero configuraremos el M-Duino para enviar el valor de I0.0 al maestro; después veremos cómo configurarlo para recibir información.
Tutoriales previos de OpenPLC para programar MQTT en M-Duino
Este post forma parte de una serie de posts sobre OpenPLC en Arduino y M-Duino. Si aún no te has familiarizado con el software, te recomendamos que repases los posts anteriores primero:
Modbus on Arduino with OpenPLC
Mapping any M-Duino on OpenPLC
Configurar el maestro M-Duino para recibir mensajes MQTT en OpenPLC
Para el maestro, crearemos un flujo sencillo en Node-RED para leer los mensajes enviados por el M-Duino. Añade un nodo "mqtt in" y conéctalo a un nodo de texto para ver el mensaje recibido en el dashboard. También puedes añadir un nodo de depuración para ver el mensaje en el terminal de debug.
Si aún no te has familiarizado con Node-RED y MQTT, te recomendamos que hagas este curso gratuito:
Develop your SCADA Application based on Node-RED
Configurar el esclavo M-Duino para publicar mensajes MQTT en OpenPLC
Partiremos del ejemplo MQTT_Send incluido en OpenPLC. Ve a File > Tutorials and Examples y abre el ejemplo MQTT_Send.
Primero configuraremos las variables. Crea tres nuevas variables llamadas "broker", "topic" y "msg". Asigna el tipo string a "broker" y "topic", y el tipo bool a "msg". Las ubicaciones serán %QX0.0 para "blink_led", %IX0.0 para "msg" y %QX0.1 para "mqtt_connected". El valor inicial de "broker" será la IP del maestro; en nuestro caso, "10.10.10.60". Para "topic", asigna el valor inicial "test". La tabla de variables debe quedar así:
Ahora debes modificar el diagrama ladder. Conecta "broker" al pin "BROKER" de "MQTT_CONNECT0" y "topic" al pin "TOPIC" de "MQTT_SEND0". Para conectar "msg" al pin "MESSAGE" necesitarás un bloque de función que lo convierta de bool a string. Añade un bloque de función trigger entre el contacto "blink_led" y el pin "SEND" para evitar que el mensaje se envíe continuamente cuando "blink_led" está activo.
El diagrama ladder resultante se conectará al broker y encenderá el LED Q0.1 del M-Duino si la conexión es correcta. Después enviará el valor de la señal recibida en I0.0 al maestro por MQTT. Este proceso se repetirá cada segundo.
Para compilar y cargar el código correctamente necesitas hacer dos cosas:
- The first is to correctly map your M-Duino in the OpenPLC Editor. This is explained in the post Mapping any M-Duino on OpenPLC linked above.
- La segunda es habilitar Modbus TCP Ethernet. No vamos a usar Modbus TCP, pero al habilitarlo también se activan las funcionalidades necesarias para usar MQTT por Ethernet. Para ello, ve a la pestaña de comunicaciones en el menú "Transfer Program to PLC" y configúralo. En nuestro caso usamos 10.10.10.70 como IP, pero puedes usar cualquier IP.
Tras eso, deberías poder cargar el código en el M-Duino y ver los cambios en Node-RED.
Configurar el maestro M-Duino para publicar mensajes MQTT en OpenPLC
Haremos una configuración similar a la anterior, pero en lugar de usar "mqtt in" y un nodo de texto, usaremos "mqtt out" y un nodo switch.
Configura el nodo switch para trabajar con cadenas de texto:
Configurar el esclavo M-Duino para recibir mensajes MQTT en OpenPLC
Para recibir mensajes debemos hacer algo similar a lo anterior, pero con bloques de función y variables distintos. Abre el ejemplo MQTT_Send y configura las variables así:
Esta vez, "msg" estará vinculado a la salida Q0.4 del M-Duino. El maestro controlará esta salida enviando mensajes por MQTT. Ahora configura el diagrama ladder:
Usamos el bloque de función "MQTT_SUBSCRIBE" para suscribirnos al topic. Una vez suscrito correctamente, "MQTT_RECIEVE" escuchará continuamente los mensajes entrantes. Como "MQTT_RECIEVE" solo devuelve strings, necesitamos una función de conversión para transformar el mensaje a booleano. Es importante añadir el biestable SR para mantener el valor positivo de "msg" cuando no se recibe ningún mensaje.
Tras cargar el código en el M-Duino, puedes usar el interruptor del dashboard de Node-RED para activar la salida Q0.4 del M-Duino.
Siguiente post:

MQTT en M-Duino con OpenPLC