Ir al contenido

Cómo conectar una pantalla HMI usando el PLC de Arduino

HMI Kinco como esclavo Modbus TCP y M-Duino como maestro: ajustes, código y vídeo
24 de diciembre de 2020 por
Cómo conectar una pantalla HMI usando el PLC de Arduino
Boot & Work Corp. S.L, Marti Guillem Cura

Para conectar una pantalla HMI a un PLC basado en Arduino, usa Modbus: Modbus TCP por Ethernet o Modbus RTU por RS-485. En este ejemplo una HMI Kinco G100E es esclavo Modbus TCP (IP 192.168.0.5, puerto 502, estación 1) y un M-Duino 21+ es el maestro: con la librería Modbus de Industrial Shields escribe la bobina 0 en el bit LB 0 de la HMI y el registro 0 en la palabra LW 0, una vez por segundo.

Las pantallas táctiles HMI son la interfaz de operario habitual en una máquina: botones, pilotos y valores que el PLC lee y escribe. Esta guía configura una pantalla Kinco en Kinco DTools, la conecta al PLC por Ethernet y adapta dos ejemplos de la librería Modbus de Industrial Shields. Al final, un vídeo muestra toda la configuración.

  1. Paso 1Cableado y alimentaciónHMI a 24 Vdc, PLC a 12-24 Vdc, cable Ethernet entre los dos
  2. Paso 2HMI como esclavo ModbusNetwork Device Setting: Modbus TCP Slave, puerto 502, estación 1
  3. Paso 3Pantalla de la HMIUn Bit State Lamp en LB 0, un valor en LW 0
  4. Paso 4PLC como maestroEscribir la bobina 0 y el registro 0 con la librería Modbus

¿Qué necesitas?

ElementoUsado en este ejemplo
PLCM-Duino 21+: Arduino Mega 2560 dentro, Ethernet, 13 entradas y 8 salidas
HMIKinco G100E: 10,1 pulgadas, 1024 x 600, Ethernet, puertos serie COM0 (RS-232, RS-485, RS-422), COM1 (RS-485, RS-422) y COM2 (RS-232)
Software de la HMIKinco DTools (V3.5.1 en las capturas), desde la web de Kinco
Software del PLCArduino IDE con las placas de Industrial Shields y la librería Modbus de Industrial Shields (versión 1.1.0 al actualizar esta guía)
CableadoFuente de 24 Vdc para la HMI, fuente de 12-24 Vdc para el PLC, un cable Ethernet, un cable USB para el PLC y un cable USB para la HMI

Los papeles los fija la configuración de la HMI: la HMI es el esclavo Modbus TCP (servidor) y espera peticiones en el puerto 502; el PLC es el maestro (cliente) y las envía. Muchas HMI también pueden trabajar al revés, como maestros que consultan a un PLC esclavo; consulta Modbus TCP esclavo con un PLC basado en Arduino para ese caso.

¿Cómo se cablean y alimentan la HMI y el PLC?

  • Alimenta la HMI con una fuente de 24 Vdc y el PLC con su fuente de 12-24 Vdc (12 Vdc en este ejemplo).
  • Conecta el PLC y la HMI con un cable Ethernet, directamente o a través de un switch. Los dos deben estar en la misma subred: 192.168.0.4 para el PLC y 192.168.0.5 para la HMI en este ejemplo.
  • Conecta el PC al PLC con un cable USB para cargar el programa, y a la HMI con un cable USB para descargar el proyecto de pantalla.

Paso 1: crea el proyecto de la HMI en Kinco DTools

Abre Kinco DTools y crea un proyecto nuevo. En el diálogo New Project, elige el HMI Model (aquí G100E); el diálogo muestra su información de hardware (Figura 1). Pulsa Next, sáltate el diálogo siguiente y pulsa Finish. En el centro del proyecto aparece un bloque para la pantalla, HMI0 (Figura 2).

Diálogo New Project de Kinco DTools con el modelo de HMI G100E y su información de hardware: 10,1 pulgadas, 1024 x 600, Ethernet
Figura 1. Diálogo New Project con el modelo G100E.
Ventana de proyecto de Kinco DTools con el bloque HMI0 G100E en el centro y el árbol de estructura del proyecto a la derecha
Figura 2. El bloque HMI0 en la ventana del proyecto.

Paso 2: configura la HMI como esclavo Modbus TCP

Haz doble clic en el bloque de la HMI, o clic derecho y Attribute. En la pestaña HMI, pulsa Network Device Setting (Figura 3), pulsa Add y configura el nuevo equipo como en la Figura 4:

CampoValor
Device TypeHMI
Device No.HMI0
IP Address192.168.0.5
Port Num502
Comm ProtocolModbus TCP Slave
Station NO.1
Diálogo HMI Attribute de Kinco DTools, pestaña HMI, con el botón Network Device Setting y la configuración IP de Network 0
Figura 3. Diálogo HMI Attribute, pestaña HMI.
Network Device Setting de Kinco DTools: tipo de equipo HMI, HMI0, IP 192.168.0.5, puerto 502, protocolo Modbus TCP Slave, estación 1
Figura 4. Network Device Setting para un esclavo Modbus TCP.

En la Figura 3 el campo Network 0 todavía muestra la dirección por defecto 192.168.0.100. Use la HMI la dirección que use al final, el programa del PLC debe apuntar a esa misma dirección (192.168.0.5 en este ejemplo).

Paso 3: añade los elementos de pantalla

Haz clic derecho en el bloque de la HMI y elige Edit para abrir la pantalla. La Graph element window de la izquierda muestra los elementos que puedes añadir.

  • Para un bit, arrastra un Bit State Lamp a la pantalla y configura Addr Type: LB y Address: 0. Deja el resto de valores por defecto. Para más bits, usa las direcciones siguientes (LB 1, LB 2...). En las opciones de estado de bit eliges cómo se comporta el elemento; este ejemplo usa conmutación (toggle).
  • Para un valor, usa un elemento con el tipo de dirección LW (palabra), y aumenta la longitud de palabra si necesitas más de 16 bits.

Compila con Tools > Compile. Si no hay errores, descarga el proyecto con Tools > Download: pon el tipo de comunicación en USB port y pulsa Download.

Ventana KHDownload de Kinco con HMI0 seleccionada, Data file marcado y tipo de comunicación USB port, antes de pulsar Download
Descarga del proyecto a la HMI por USB.

Paso 4: programa el PLC como maestro Modbus TCP

Instala las placas de Industrial Shields en el IDE de Arduino, descarga la librería Modbus de GitHub como archivo ZIP y añádela con Programa > Incluir librería > Añadir biblioteca .ZIP. Reinicia el IDE si los ejemplos no aparecen.

Menú Programa del IDE de Arduino con Incluir librería y Añadir biblioteca .ZIP seleccionados, para instalar la librería Modbus de Industrial Shields
Instalación de la librería Modbus como archivo ZIP en el IDE de Arduino.

Selecciona tu modelo de M-Duino y el puerto, y abre Archivo > Ejemplos > Modbus > ModbusTCPMasterWriteSingleCoil. Cambia el bloque de configuración del principio con las direcciones de este montaje:

// Modbus master IP (the M-Duino)
#define ETHERNET_MASTER_IP IPAddress(192, 168, 0, 4);
// Modbus slave IP (the Kinco HMI)
#define ETHERNET_SLAVE_IP IPAddress(192, 168, 0, 5);
// Modbus slave port
#define ETHERNET_SLAVE_PORT 502
// Modbus address of the slave (Station NO.)
#define MODBUS_SLAVE_ADDRESS 1
// Coil address to write (LB 0 in the HMI)
#define MODBUS_COIL_TO_WRITE 0
// Milliseconds between requests
#define MS_BETWEEN_REQUESTS 1000

El ejemplo abre una conexión TCP con la HMI, se reconecta si se cae y cada 1.000 ms envía una petición Write Single Coil (código de función 05) que conmuta la bobina 0. El Bit State Lamp de LB 0 cambia de estado cada segundo.

static void sendModbusRequest(void) {
  static bool coilValue;

  if (master.writeSingleCoil(slaveEth, MODBUS_SLAVE_ADDRESS, MODBUS_COIL_TO_WRITE, coilValue)) {
    coilValue = !coilValue;
  }
  else {
    // For some reason, the request could not be completed.
    Serial.println("Request to write a coil failed");
  }
}

Para enviar un valor, abre ModbusTCPMasterWriteSingleRegister y cambia las mismas líneas (la dirección del registro es MODBUS_HOLDING_REGISTER_TO_WRITE, 0). Envía una petición Write Single Register (código de función 06) que alterna el valor del registro 0, la palabra LW 0 de la HMI, entre 0 y 1000:

if (master.writeSingleRegister(slaveEth, MODBUS_SLAVE_ADDRESS, MODBUS_HOLDING_REGISTER_TO_WRITE, registerValue)) {
  registerValue = registerValue == 0 ? 1000 : 0;
}

Carga el programa en el PLC. Hemos compilado los dos ejemplos con estos cambios para el M-Duino 21+ (ATmega2560) con la versión 1.1.0 de la librería; pruébalos con tu propia HMI antes de usarlos en una máquina.

Petición del PLCFunción ModbusDirecciónElemento de la HMI
writeSingleCoil05, Write Single CoilBobina 0Bit State Lamp, LB 0
writeSingleRegister06, Write Single RegisterRegistro de retención 0Elemento de palabra, LW 0

Más sobre la librería maestra y sus funciones de lectura en Modbus TCP maestro con PLC basados en Arduino y ESP32.

Vídeo: HMI Kinco y M-Duino por Modbus TCP

El vídeo muestra la configuración de la HMI y la comunicación entre el PLC y la pantalla, paso a paso.

 
 

Solución de problemas

  • El monitor serie muestra "The first connection attempt failed": revisa el cable Ethernet, que el PLC y la HMI estén en la misma subred y que la IP del programa sea la que usa de verdad la HMI.
  • La conexión funciona pero la pantalla no cambia: comprueba que el número de estación del programa (MODBUS_SLAVE_ADDRESS) y el de DTools sean el mismo, y que el elemento use LB 0 o LW 0.
  • La respuesta contiene un error: la HMI ha contestado con una excepción Modbus; revisa el tipo de dirección y la dirección del elemento.

Preguntas frecuentes sobre cómo conectar una HMI a un PLC basado en Arduino

¿Puedo conectar la HMI por RS-485 en lugar de Ethernet?

Sí, con Modbus RTU, si la HMI tiene puerto RS-485 (la G100E lo tiene en COM0 y COM1). El PLC usa entonces los ejemplos de maestro RTU de la misma librería. Consulta Modbus RTU con PLC basados en Arduino y ESP32.

¿Funciona con otras marcas de HMI?

Sí, con cualquier HMI que admita Modbus TCP o Modbus RTU. Solo cambia la herramienta de configuración; la parte del PLC es la misma.

¿La HMI debe ser maestro o esclavo?

Las dos opciones funcionan. Con la HMI como esclavo, como aquí, el PLC decide cuándo escribir. Con la HMI como maestro, la HMI consulta al PLC, que ejecuta un esclavo Modbus; es la opción habitual cuando la pantalla debe leer muchos valores del PLC.

¿Puede el PLC leer valores de la HMI?

Sí. La librería tiene funciones de lectura de bobinas y registros de retención; úsalas para leer botones (LB) o consignas (LW) que escribe el operario.

¿Qué protocolo Modbus elijo para una planta?

Modbus TCP entre PLC, HMI y SCADA, y Modbus RTU en el bus de campo. La guía de Modbus RTU, Modbus TCP y OPC UA explica dónde encaja cada uno.

Llévalo a la práctica

Pantallas de operario alrededor de un PLC en uso real: una cinta con un Panel PC, una bodega de fermentación con un panel PC y una pantalla táctil con LEDs de estado.

Una HMI y un PLC del mismo catálogo. La TouchBerry Pi es un panel PC con Raspberry Pi, dashboards de Node-RED y algunas E/S propias, y habla Modbus TCP con M-Duino, ESP32 PLC y Raspberry PLC.

Ver la TouchBerry PiElige un controlador industrial

Buscar en nuestro blog

Cómo conectar una pantalla HMI usando el PLC de Arduino
Boot & Work Corp. S.L, Marti Guillem Cura 24 de diciembre de 2020
Compartir esta publicación

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs