Modbus

Modbus.

Modbus es un protocolo de comunicaciones situado en los niveles 1, 2 y 7 del Modelo OSI, basado en la arquitectura maestro/esclavo (RTU) o cliente/servidor (TCP/IP), diseñado en 1979 por Modicon para su gama de controladores lógicos programables (PLCs). Convertido en un protocolo de comunicaciones estándar de facto en la industria, es el que goza de mayor disponibilidad para la conexión de dispositivos electrónicos industriales.

Las principales razones por las cuales el uso de Modbus en el entorno industrial se ha impuesto por encima de otros protocolos de comunicaciones son:

Modbus permite el control de una red de dispositivos, por ejemplo un sistema de medida de temperatura y humedad, y comunicar los resultados a un ordenador. Modbus también se usa para la conexión de un ordenador de supervisión con una unidad remota (RTU) en sistemas de supervisión adquisición de datos (SCADA). Existen versiones del protocolo Modbus para puerto serie y Ethernet (Modbus/TCP).

Cada dispositivo de la red Modbus posee una dirección única. Cualquier dispositivo puede enviar órdenes Modbus, aunque lo habitual es permitirlo sólo a un dispositivo maestro. Cada comando Modbus contiene la dirección del dispositivo destinatario de la orden. Todos los dispositivos reciben la trama pero solo el destinatario la ejecuta (salvo un modo especial denominado "Broadcast"). Cada uno de los mensajes incluye información redundante que asegura su integridad en la recepción. Los comandos básicos Modbus permiten controlar un dispositivo RTU para modificar el valor de alguno de sus registros o bien solicitar el contenido de dichos registros.

Existe gran cantidad de modems que aceptan el protocolo Modbus. Algunos están específicamente diseñados para funcionar con este protocolo. Existen implementaciones para conexión por cable, wireless, SMS o GPRS. La mayoría de problemas presentados hacen referencia a la latencia y a la sincronización.

Versiones del protocolo

Hay muchas variantes de protocolos Modbus, existen versiones del protocolo Modbus para el puerto serie, para Ethernet, y otros protocolos que soportan el conjunto de protocolos TCP/IP de Internet:

El modelo de datos y las llamadas de función son idénticas para las primeras 4 variantes de protocolos; Sólo la encapsulación es diferente. Sin embargo, las variantes no son interoperables, ni sus formatos de trama tampoco.

Modelo de datos Modbus

El modelo de datos en Modbus distingue entre entradas digitales (discrete input), salidas digitales (coils), registros de entrada (input register) y registros de retención (holding registers). Las entradas y salidas digitales ocupan, evidentemente, un bit; mientras que los registros, tanto de entrada como de retención, ocupan dos Bytes

La siguiente es una tabla de tipos de objetos proporcionados por un dispositivo esclavo Modbus a un dispositivo maestro Modbus:

Tipo de objeto Acceso Tamaño
Discrete input Solo leer 1 bit
Coil Leer/escribir 1 bit
Input register Solo leer 16 bits
Holding register Leer/escribir 16 bits

Formato de la trama

Una trama Modbus está compuesta por una Unidad de Datos de Aplicación (ADU), que incluye una Unidad de Datos de Protocolo (PDU):

Todas las variantes de Modbus usan uno de los siguientes formatos de trama.

Formato de trama Modbus RTU (utilizado principalmente en líneas asíncronas de 8 bits como RS-485)
Nombre Longitud (bits) Función
Inicio 28 Al menos 3 1⁄2 Tiempos de silencio
Dirección 8 Station address
Función 8 Indica el código de función; Por ejemplo, leer los registros de bobinas/retención
Datos n × 8 Datos + La longitud se rellenará dependiendo del tipo de mensaje
CRC 16 Verificación de redundancia cíclica (CRC)
Fin 28 Al menos 3 1⁄2 Tiempos de silencio entre tramas

Nota sobre el CRC:

Formato de trama Modbus ASCII (utilizado principalmente en líneas serie asíncronas de 7 u 8 bits)
Nombre Longitud (Bytes) Función
Inicio 1 Comienza con dos puntos : (El valor hex ASCII es 3A)
Dirección 2 Dirección de la estación
Función 2 Indica los códigos de función como leer bobinas / entradas
Datos n × 2 Datos + La longitud se rellenará dependiendo del tipo de mensaje
LRC 2 Verificación de redundancia longitudinal (LCR)
Fin 2 Par retorno de carro/avance de línea (CR/LF) (Valores ASCII de 0D, 0A)

Dirección, función, datos y LRC son todos pares legibles de caracteres hexadecimales que representan valores de 8 bits (0-255). Por ejemplo, 122 (7 x 16 + 10) se representará como 7A.

LRC se calcula como la suma de valores de 8 bits, negados (complemento de dos) y codificado como un valor de 8 bits. Ejemplo: si la dirección, la función y los datos codifican como 247, 3, 19, 137, 0 y 10, su suma es 416. El complemento de dos (-416) recortado a 8 bits es 96 (por ejemplo 256 × 2 - 416) Que se representará como 60 en hexadecimal. Por lo tanto el siguiente trama: :F7031389000A60<CR><LF>.

Formato de trama Modbus TCP (utilizado principalmente en redes Ethernet)
Nombre Longitud (Bytes) Función
Identificador de la transacción 2 Para la sincronización entre mensajes de servidor y cliente
Identificador del protocolo 2 0 para Modbus/TCP
Campo de longitud 2 Número de bytes en esta trama
Identificador de unidad 1 Dirección del esclavo (255 si no se usa)
Código de función 1 Códigos de función como en otras variantes
Bytes de datos n Datos como respuesta o comandos

El identificador de unidad se utiliza con dispositivos Modbus/TCP que son compuestos de varios dispositivos Modbus en las pasarelas Modbus/TCP a Modbus RTU. En tal caso, el identificador de unidad indica la dirección de esclavo del dispositivo detrás de la pasarela. Normalmente, los dispositivos compatibles con Modbus/TCP ignoran el identificador de unidad.

El orden de bytes para valores en tramas de datos Modbus es big-endian (MSB, byte más significativo de un valor recibido primero).

Implementaciones

Todas las implementaciones presentan variaciones respecto al estándar oficial. Algunas de las variaciones más habituales son:

Limitaciones

Enlaces externos

Referencias

  1. 1 2 Drury, Bill (2009). Control Techniques Drives and Controls Handbook (PDF) (2nd edición). Institution of Engineering and Technology. pp. 508-. (requiere suscripción).
  2. ↑ Modbus Messaging on TCP/IP Implementation Guide V1.0b, Modbus Organization, Inc., 24 de octubre de 2006, consultado el 7 de enero de 2017.
  3. ↑ «Java Modbus Library - About». 2010. Consultado el 7 de febrero de 2017.
  4. ↑ «What is the difference between Modbus and Modbus Plus?». Schneider Electric. Consultado el 7 de febrero de 2017.
  5. ↑ «Simply Modbus - About Enron Modbus». Simply Modbus. Consultado el 7 de febrero de 2017.
  6. ↑ «Modbus Messaging On TCP/IP Implementation Guide». Modbus Organization. Modbus-IDA.
  7. ↑ Palmer; Shenoi, Sujeet, eds. (23–25 March 2009). Critical Infrastructure Protection III. Third IFIP WG 11. 10 International Conference. Hanover, New Hampshire: Springer. p. 87. ISBN 3-642-04797-1.