Cómo usar la biblioteca Modbus TCP Slave con un controlador PLC Arduino
21 marzo, 2020 por
Cómo usar la biblioteca Modbus TCP Slave con un controlador PLC Arduino
Bernat Garcia

Lectura previa

Biblioteca maestra Modbus RTU para la automatización industrial 

Lee el post >>

Para poder seguir fácilmente la explicación de nuestras bibliotecas Modbus TCP para PLC industrial Arduino, en primer lugar sería interesante echar un vistazo a la publicación Modbus RTU para comprender mejor las características y configuraciones de este tipo de comunicación en dispositivos industriales Arduino.

Cómo usar la biblioteca Modbus TCP Slave con un controlador PLC Arduino

Introducción

En este post, te presentaremos nuestras bibliotecas para poder implementar el modo Modbus TCP / IP Slave cuando trabajes con controladores lógicos programables. Básicamente, funciona de la misma manera que el Modbus RTU con algunas excepciones.

  • TCP - Protocolo de Control de Transmisión. . 

  • IP - Protocolo de internet. 

Esta es una variante Modbus utilizada para las comunicaciones a través de redes TCP / IP en controladores industriales para la automatización Arduino, conectando a través del puerto 502. No requiere un cálculo de suma de verificación, ya que las capas inferiores ya proporcionan protección de suma de verificación.

Detalles técnicos

Modbus TCP encapsula los paquetes de datos de solicitud y respuesta Modbus RTU en un paquete TCP transmitido a través de redes Ethernet estándar. El número de unidad todavía se incluye y su interpretación varía según la aplicación: la dirección de la unidad o del esclavo no es el medio principal de direccionamiento en TCP. La dirección más importante aquí es la dirección IP. Como dijimos antes, el puerto estándar para Modbus TCP es 502, pero el número de puerto a menudo se puede reasignar si lo deseas.

El campo de suma de comprobación que normalmente se encuentra al final de un paquete RTU se omite del paquete TCP. Ethernet maneja la suma de verificación y el manejo de errores en el caso de Modbus TCP. 

La versión TCP de Modbus sigue el Modelo de Referencia de Red OSI. Modbus TCP define las capas de presentación y la aplicación en el modelo OSI. Este tipo de transmisión hace que la definición de maestro y esclavo sea menos obvia porque Ethernet permite la comunicación entre pares. El significado de cliente y servidor son entidades más conocidas en redes basadas en Ethernet. En este contexto, el esclavo se convierte en servidor y el maestro en cliente. Puede haber más de un cliente obteniendo datos del servidor. En otras palabras, podemos decir que esto significa que puede haber múltiples maestros así como múltiples esclavos. En lugar de definir el maestro y el esclavo dispositivo por dispositivo, el diseñador tendrá que crear asociaciones lógicas entre el maestro y el esclavo para definir los roles.

Software

Modbus TCP Slave with Arduino IDE

El módulo Modbus TCP Slave implementa la funcionalidad Modbus TCP Slave.

#include <ModbusTCPSlave.h>

ModbusTCPSlave slave;


El puerto TCP predeterminado es el  502 , pero puedes cambiarlo con:

// Set the TCP listening port to 510 instead of 502
ModbusTCPSlave slave(510);


Para asignar las bobinas, las entradas discretas, los registros de retención y las direcciones de registros de entrada con los valores de variables deseados, el módulo utiliza cuatro matrices de variables:

bool coils[NUM_COILS];
bool discreteInputs[NUM_DISCRETE_INPUTS];
uint16_t holdingRegistesr[NUM_HOLDING_REGISTERS];
uint16_t inputRegisters[NUM_INPUT_REGISTERS];


Las longitudes de estas matrices dependen de la aplicación y los registros de usos. Obviamente, los nombres de las matrices también dependen de sus preferencias.

Para asociar las matrices de registros con la biblioteca, es posible utilizar sus funciones en setup:

slave.setCoils(coils, NUM_COILS);
slave.setDiscreteInputs(discreteInputs, NUM_DISCRETE_INPUTS);
slave.setHoldingRegisters(holdingRegisters, NUM_HOLDING_REGISTERS);
slave.setInputRegisters(inputRegisters, NUM_INPUT_REGISTERS);


No es necesario tener todo tipo de registros de asignación para trabajar, sólo el utilizado por la aplicación.

Para iniciar el servidor Modbus TCP, llame a la función de  begin después de la asignación de registros. También es posible llamar a la función begin antes de la asignación de registros. Recuerde empezar el Ethernet antes del objeto Modbus TCP Slave en  setup

// Init the Ethernet
Ethernet.begin(mac, ip);

// Init the ModbusTCPSlave object
slave.begin();


En este momento, el servidor Modbus TCP se está ejecutando y lo único importante es actualizar el objeto Modbus TCP Slave a menudo en la función lllll, y tratar los valores de mapeo de los registros para actualizar las variables, entradas y salidas.

// Update discrete inputs and input registers values
discreteInputs[0] = digitalRead(I0_7);
inputRegisters[0] = analogRead(I0_0);
// ...

// Update the ModbusTCPSlave object
slave.update();

// Update coils and holding registers
digitalWrite(Q0_0, coils[0]);
// ...

Consulta otros posts sobre Modbus


Modbus TCP Master con PLC industriales basados en Arduino

Leer la publicación >>>


Biblioteca master Modbus RTU para automatización industrial

Leer la publicación >>>



Cómo conectar un PLC basado en Arduino usando Modbus TCP / IP

Leer la publicación >>>



Comunicación por MODBUS RTU a través de una interfaz serie RS485 (módulo Seneca Z-D-in)

Leer la publicación >>>


Cómo usar la biblioteca Modbus TCP Slave con un controlador PLC Arduino
Bernat Garcia
21 marzo, 2020
Compartir
Archivar

¿Buscas 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.


Comparación PLC industrial>>>

¿Quieres más información?

¡Rellena el formulario!

¡Cuéntame más!