En este blog configuraremos un M-Duino como esclavo MQTT y un Raspberry PLC como maestro. Si seguiste nuestro blog anterior en el que usamos Node-RED como maestro, puedes reutilizar los mismos diagramas ladder.
Tutoriales previos de OpenPLC y MQTT para M-Duino y Raspberry PLC
Este blog forma parte de una serie sobre OpenPLC en Arduino y M-Duino. Si aún no te has familiarizado con el software, te recomendamos que repases los blogs anteriores primero:
Modbus on Arduino with OpenPLC
Mapping any M-Duino on OpenPLC
Requisitos de hardware para la integración MQTT de M-Duino y Raspberry PLC
Para el maestro usamos un Raspberry PLC con Mosquitto. El cliente es un M-Duino 42+, aunque puedes usar cualquier M-Duino o placa compatible con OpenPLC. El cliente se conecta al servidor por Ethernet; puede ser necesario un switch Ethernet.
Configurar el Raspberry PLC como broker MQTT con Mosquitto
Si necesitas recordar cómo conectarte a tu Raspberry PLC, te recomendamos este curso gratuito:
Tras conectarte a tu Raspberry PLC, ejecuta estos dos comandos para instalar Mosquitto:
Ahora necesitas editar la configuración de Mosquitto. Ejecuta este comando para ir a la carpeta de Mosquitto y abrir el archivo de configuración:
Luego añade estas dos líneas al final:
Guarda el archivo y reinicia Mosquitto con este comando:
Ahora puedes crear un topic. Los dispositivos esclavos usarán este topic para enviar o recibir información al Raspberry PLC:
Usamos la IP 10.10.11.20 porque estamos usando el puerto Ethernet de la parte superior del Raspberry PLC. El del lateral sería 10.10.10.20. El topic en este caso es "openplc".
Después de ejecutar ese último comando, Mosquitto debería estar escuchando los mensajes entrantes.
Configurar M-Duino como esclavo MQTT para publicar mensajes en OpenPLC
Abre el ejemplo MQTT_Send en OpenPLC (File > Tutorials and Examples).
Crea una nueva variable llamada "msg", asigna el tipo bool y la ubicación %IX0.0. Luego, en el diagrama ladder, cambia el broker de "MQTT_CONNECT0" de 'test.mosquitto.org' a '10.10.11.20', cambia el topic de "MQTT_SEND0" de 'openplc-test-topic' a 'openplc' y cambia el mensaje de 'Hello from OpenPLC!' a la variable "msg". Añade un bloque de función "R_TRIG" justo antes de "SEND" y un "BOOL_TO_STRING" antes de "MESSAGE".
La tabla de variables debe quedar así:
Y el diagrama ladder así (ignorando la parte superior del blink):
Esto enviará "TRUE" o "FALSE" por MQTT según el valor de %IX0.0, que corresponde a la entrada I0.0 del M-Duino.
Para compilar y cargar el código correctamente necesitas hacer dos cosas:
- La primera es mapear correctamente tu M-Duino en el OpenPLC Editor. Esto se explica en este blog:
Mapping any M-Duino PLC for OpenPLC
- 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 confíguralo. Lo hemos configurado así:
Ahora puedes cargarlo en el M-Duino. Si tu Raspberry PLC sigue escuchando mensajes MQTT, deberías empezar a recibir mensajes "FALSE" o "TRUE" cada segundo.
Siguiente blog: