Información básica:
Modbus-TCP
Protocolo estándar para técnicas de automatización
Originalmente Modbus fue desarrollado por la empresa Modicon (hoy Schneider Electric) como bus de campo serial para la comunicación entre sus unidades de control.
La clara y sencilla estructura del protocolo Modbus ha llevado a que también otros fabricantes hayan integrado Modbus en sus equipos. De ese modo, Modbus se ha convertido en un estándar establecido hasta hoy.
El principio maestro/esclavo
Modbus trabaja según el principio de maestro/esclavo. Esto significa que hay al menos un maestro y al menos un esclavo.
Los esclavos en Modbus son, por ejemplo, los controles por PLC, Web-IO u otros módulos IO descentralizados para señales digitales y analógicas.
El maestro (o master ) es siempre el interlocutor que toma la iniciativa, es decir que envía a un esclavo una solicitud o la activación de la función deseada. Cada esclavo tiene una dirección unívoca. Normalmente el esclavo es pasivo y solo responde cuando recibe una solicitud en su dirección.
Maestro/esclavo - cliente/servidor
Con la creciente importancia del Ethernet TCP/IP como opción de transmisión se ha adaptado el protocolo Modbus prácticamente 1:1 de la transmisión serial de datos a TCP.
Modbus TCP trabaja según el principio de cliente/servidor, donde el maestro asume la función de cliente y los esclavos la de servidores. Por lo tanto, el maestro de Modbus tiene que establecer una conexión TCP explícita para cada esclavo de Modbus. Esa conexión se mantiene el tiempo que dure la comunicación. No se establece una nueva conexión para cada solicitud.
El puerto servidor de TCP estándar para Modbus TCP es el 502.
Registros y variables
Direcciones de memoria o también registros a través del maestro de Modbus, es decir el cliente.
Uno se lo puede imaginar como si el esclavo de Modbus, es decir el servidor, tuviese un armario con muchos cajones perfectamente numerados. Cada cajón tiene asignada una función.
Si el maestro de Modbus requiere determinada información, indica en su solicitud el número del cajón correspondiente y el esclavo le envía ese contenido.
Cuando el maestro de Modbus desea activar una acción en el esclavo, por ejemplo una salida de conmutación, entonces deposita la información necesaria en el cajón con el número correspondiente.
Como ya se ha indicado al principio, esto se ejecuta en realidad a través de las correspondientes direcciones de memoria (direcciones de registros). Se dispone de un máximo de 65536 direcciones. Las funciones asignadas a las direcciones no están unificadas, no es algo predeterminado.
Por regla general la memoria está ordenada por funciones en secciones.
Nombre | Tipo de datos | Acceso | Descripción |
---|---|---|---|
Discrete | 1 bit | Solo lectura | Entrada digital o estado de conmutación |
Coil | 1 bit | Lectura o escritura | Salida digital o estado de conmutación |
Input Register | 16 bit | Solo lectura | Valor entre 0 y 65535 o valor analógico o valor de contador |
Holding Register | 16 bit | Lectura o escritura | Valor entre 0 y 65535 o valor analógico o valor de contador |
Function Codes
Los Function Codes sirven para determinar el modo de acceso a cada tipo de datos dentro del protocolo Modbus. A continuación les ofrecemos una lista de los Function Codes más habituales.
FC (dec.) | FC (hex.) | Descripción |
---|---|---|
01 | 0x01 |
Read Coils |
02 | 0x02 |
Read Discrete Inputs |
03 | 0x03 |
Read Holding Registers |
04 | 0x04 |
Read Input Registers |
05 | 0x05 |
Write Single Coil |
06 | 0x06 |
Write Single Register |
15 | 0x0F |
Write Multiple Coils |
16 | 0x10 |
Write Multiple Registers |
07 | 0x07 |
Read Exeption Status |
Estructura del protocolo Modbus
El marco del protocolo para Modbus TCP presenta la siguiente estructura:
Transaction ID
El Transaction ID es algo así como un número de solicitud y el maestro lo asigna añadiendo una unidad con cada solicitud. El cliente responde con el mismo Transaction ID.
Protocol ID
En Modbus TCP siempre 0.
Length
Longitud de los datos Modbus en byte más dos.
Unit ID
En el protocolo serial de Modbus era la dirección del esclavo. Este campo se ha mantenido por razones de compatibilidad. Sin embargo, en Modbus TCP el direccionamiento unívoco se efectúa a través de la dirección de IP del esclavo.
Function Code
El protocolo Modbus define a través de los Function Codes numerados la función que debe activar la solicitud enviada por el maestro.
Modbus Data
El contenido de la sección Modbus Data depende del Function Code utilizado y por eso su tamaño puede variar. También la dirección de los datos desempeña un papel en la estructura de la sección Modbus Data.
Cuando los datos se dirigen del maestro al esclavo, los dos primeros bytes contienen siempre la dirección de la memoria a consultar.
El siguiente ejemplo muestra el aspecto de un paquete Modbus TCP para abrir dos registros con Function Code 3 a partir de la dirección de memoria 0x1020.
El paquete de respuesta tiene una estructura distinta. Aquí en los primeros byte del Modbus Data está codificada la cantidad de bytes del registro transmitidos. En los siguientes 4 bytes se encuentran los contenidos de los registros solicitados.
A pesar de la reducida estructura del protocolo, Modbus TCP ofrece una gran flexibilidad para la comunicación industrial.
Consejo: compruebe si el fabricante del equipo ha expresado la descripción de las direcciones de memoria en decimales o hexadecimales.
Fundamentos básicos sobre los protocolos industriales más habituales
-
Web-IO - Automatización con protocolos estándar
Integrar señales IO con Modbus TCP, OPC UA/DA, Rest o MQTT
-
Formatos de datos y protocolos
Del clásico intercambio de datos hasta el IoT
-
REST - REpresentational State Transfer
Comunicación industrial en base a peticiones HTTP estandarizadas
-
MQTT - Message Queue Telemetry Protocol
Intercambio de datos sin conexión directa
-
OPC UA -
OPC Unified ArchitectureOPC Unterstützung out of the box
-
OPC DA -
OPC Data AccessEl intérprete de los datos de procesos