MODBUS

Protocolo Modbus: Fundamentos y aplicaciones

Sobre miEl protocolo Modbus es un protocolo abierto, es una estructura de mensajes desarrollada por Modicon en la decada de los 70, utilizada para comunicaciones entre dispositivos maestro-esclavo/cliente-servidor. Modicon fue posteriormente adquirida por Schneider y los derechos sobre el protocolo fueron liberados por la Organización Modbus. Muchos equipamientos industriales utilizan Modbus como protocolo de comunicación, y gracias a sus características:

  • Protocolo abierto
  • Simplicidad.
  • Facilidad.
  • Es el protocolo más utilizado en la automatización industrial.

Indice de contenido

¿Qué es el protocolo Modbus?

Modbus es un protocolo de comunicación situado en los niveles 1, 2 y 7 del Modelo OSI, basado en la arquitectura maestro/esclavo(o cliente/servidor si hablamos de su versión Ethernet) es uno de los protocolos mas utilizados en automatización industrial, gracias a que es un protocolo abierto, a su simplicidad y facilidad de implementación.

¿Cómo funciona MODBUS?

En la figura de abajo vemos un ejemplo de red con el protocolo Modbus, con una gateway haciendo la conexión entre los dos tipos de Modbus, el serial sobre RS-485 y el TCP/IP en ethernet. En el mercado existe la opción de gateway Modbus Wireless. El maestro de la red, que en este caso es un PLC enviá y recibe datos de los esclavos, que son un inversor de frecuencia, una HMI, un controlador de temperatura y una interfaces de I/O remota Modbus.

Ejemplo de una red Modbus rs485 y tcp

La estación maestro inicia la comunicación solicitando que los esclavos envíen sus datos. Los esclavos, por su parte, reciben el pedido del maestro y devuelven los datos solicitados. Los datos transmitidos pueden ser discretos o números, es decir, es posible enviar un bit para encender o apagar un motor o enviar valores numéricos como temperatura y presión.

Capa física

Es importante no confundir protocolo de comunicación con estándares físicos. Algunos protocolos posen un estándar físico definido como el caso de la red ASI y de la red CAN, siendo que en esos casos el estándar fisico esta definido junto al protocolo y no es posible alterarlo.

MODBUS no especifica cuál es la capa física, pudiendo ser utilizado en diversos estándares de capa física como:

  • RS-232
  • RS-485
  • Ethernet TCP/IP (MODBUS TCP)

La velocidad de comunicación varia en cada uno de estos estándares, así como la longitud máxima de la red y el numero de dispositivos máximos conectados.

RS-232

El estándar RS-232 (Recommendad Standart-232) o EIA-232(Electronic Industries Alliance-232) es utilizado solamente en comunicaciones del tipo punto a punto, es decir, solo admite dos dispositivos en la red, que en el caso del protocolo Modbus representan un maestro y un esclavo. La velocidad máxima de este estándar esta en torno a los 115Kbps, pero en algunos casos pueden ser encontradas tasas un poco mayores, la distancia máxima entre los dispositivos de la red es de unos 30m.

RS-485

El estándar RS-485(Recommendad Standart-485) o EIA-485(Electronic Industries Alliance-485) es muy utilizado en la industria y sin dudas es uno de los estándares mas utilizados por el protocolo Modbus. La gran diferencia con RS-232, es que permite mas de dos dispositivos por lo que se pueden tener varios esclavos en la red. Ademas, este estándar permite trabajar con tasas de comunicación que pueden llegar hasta 12Mbps y en algunos casos hasta 50Mbps, vale la pena recordar que cuando mayor es la longitud de la red menor sera la velocidad de comunicación, la distancia máxima de la red es de 1200m, y el numero máximo de dispositivos en la red es de 32.

Ethernet

El estándar Ethernet en el protocolo Modbus posee algunas variaciones, pudiendo llegar a 100Mbps y hasta 10Gbps. La distancia máxima puede varias de 100m hasta los 200m dependiendo del tipo de cable utilizado y de las condiciones de instalación del mismo. En algunos casos es posible utilizar redes de fibra óptica, lo que permite alcanzar mayores distancias y mejores tasas de comunicación, así como utilizar comunicación wireless.

Al utilizar el medio físico Ethernet el protocolo MODBUS opera con el mecanismo de control de acceso CSMA-CD, que es propio de la red Ethernet, con mensajes en el modelo cliente-servidor.

Direccionamiento

El protocolo Modbus tiene 256 direcciones donde:

  • 0(cero) es la dirección de Broadcast, cuando el maestro enviá un mensaje a la dirección 0, todos los esclavos reciben el mensaje.
  • 1 a 247 son direcciones de dispositivos para los esclavos.
  • 248 hasta 255 son direcciones reservadas.

El maestro no posee dirección, solamente los esclavos deben poseer una dirección definida.

Modelo de datos

En el modelo de datos Modbus se distinguen 4 tipos de objetos diferentes los cuales tienen un tamaño diferente. En la siguiente table se observan cuáles son estos tipos de objetos y sus tamaños respectivos.

Tipo de objeto Acceso Tamaño Direcciones

Coil

Leer/Escribir

1 bit(Bool)

00001 – 09999

Discrete input

Solo leer

1 bit(Bool)

10001 – 19999

Input register

Solo leer

16 bits(Int)

40001 – 49999

Holding register

Leer/escribir

16 bits(Int)

40001 – 49999

No hay definido tipos de objetos para datos flotantes o dobles enteros, debido a la época en la que fue desarrollado el protocolo los PLC no contaban con estos tipos de datos. Pero podemos usar el ingenio para lograrlo, por ejemplo usando dos registros, ya que para un flotante o doble entero necesitamos 32 bits. De la tabla podes ver que tenemos disponibles hasta 9999 variables por tipo de dato.

Código de las funciones

El código de la función es con lo que el maestro especifica el tipo de servicio o función solicitada al esclavo(lectura, escritura, etc). En el protocolo Modbus, cada función es utilizada para acceder a un tipo especifico de dato.

Código de función Descripción

1

Lectura en bloque de bits del tipo bobina(salida discreta)

2

Lectura de bloque de bits del tipo entradas discretas

3

Lectura de bloque de registros del tipo holding

4

Lectura de bloque del tipo input

5

Escritura de un único bit del tipo bobina

6

Escritura en un único registro del tipo holding

7

Leer el contenido de 8 estados de excepción

8

Proveer una serie de test para verificación de la comunicación y errores internos

11

Obtener el contador de eventos

12

Obtener un informe de eventos

15

Escritura en bloque de bits del tipo bobina

16

Escritura en bloque de registros del tipo holding

17

Leer algunas informaciones del dispositivo

20

Leer informaciones de un archivo

21

Escribir información en un archivo

22

Modificar el contenido de registros de espera a través de operaciones lógicas

23

Combina leer y escribir en registros en una única transacción

24

Leer el contenido de la fila FIFO de registros.

43

Identificación del modelo de dispositivo

Modos de transmisión

En las especificaciones del protocolo están definidos dos modos de transmisión:

  • ASCII
  • RTU

Sin embargo existen numerosas variantes del protocolo MODBUS, qué vamos a nombrar las más utilizadas:

  • MODBUS ASCII
  • MOBBUS RTU
  • MODBUS TCP/IP

Los modos definen la forma en como son transmitidos los bytes del mensaje, y como la información del mensaje sera empaquetada en el mensaje y desempaquetada. No es posible utilizar los dos modos de transmisión en la misma red. El modo de transmisión puede ser seleccionado junto con otros parámetros del puerto de comunicación serial, aunque existen equipamientos que no permiten esa selección, pues poseen modo de transmisión fijo, como por ejemplo algunos PLC e inversores de frecuencia que utilizan el modo RTU por defecto.

MODBUS ASCII

Cuando los equipos son configurados para que se comuniquen en una red Modbus usando ASCII, cada byte en un mensaje es enviado como dos caracteres ASCII. A pesar generar mensajes legibles por la tabla ASCII este modo consume mas recursos de la red. La principal ventaja de esta modalidad es que permite intervalos de tiempo cercanos a un segundo entre dos caracteres sin causar error.

Los dispositivos monitorean constantemente la rede para determinar el inicio de un mensaje. El inicio de un mensaje es reconocido por el carácter ‘:’(dos puntos), mientras que los del final de la trama son el “retorno de carro”(CR) y el “salto de línea” (LF).

Tabla que representa la trama MODBUS ASCII

 

 

El formato de la trama es el siguiente:

Nombre Longitud (Bytes) Función

Inicio

1

Comienza con el carácter ‘:’

Dirección

2

Dirección del esclavo

Función

2

indica el código de la función

Datos

n x 2

Datos + La longitud se rellena dependiendo del tipo de mensaje

LRC

2

Verificación de redundancia longitudinal (LCR)

Fin

2

Retorno de Carro + Avance de linea(CR y LF)

Intervalos de hasta un segundo son permitidos entre caracteres de un mensaje, se ocurre un intervalo mayor, el dispositivo receptor asume que ocurrió un error.

MODBUS RTU

En el modo RTU(Remote Terminal Unit), cada mensaje de 8 bits contiene dos caracteres hexadecimales de 4 bits. La principal ventaja de este modo es que su mayor densidad de caracteres permite un mejor procesamiento de datos que el modo ASCII para un mismo baudrate, ya que usa menos bits por cada dato a enviar. Cada mensaje debe ser transmitido en un flujo continuo de caracteres.

En el modo RTU no existe un carácter especifico que indique el inicio o fin de la trama. La indicación de cuando un nuevo mensaje comienza o cuando termina es por la ausencia de transmisión de datos en la red, por un tiempo mínimo de 3,5 veces el tiempo de transmisión de un byte de datos. Siendo asi, si un telegrama se inició después de que se produjo ese tiempo mínimo, los elementos de la red asumen que el primer caracter recibido representa el inicio de un nuevo telegrama. Y de la misma forma, los elementos de la red asumen que finalizado la entrega del telegrama, cuando este tiempo se cumple.

Si durante la transmisión de un mensaje el tiempo entre los bytes es mayor que este tiempo mínimo, el mensaje se considerará inválido, el controlador descartará los bytes recibidos y montará un nuevo mensaje con los bytes que se están transmitiendo.

Tabla que representa la trama MODBUS RTU

 

 

La trama tiene el siguiente formato:

Nombre Longitud (bytes) Función

Dirección

2

Dirección del esclavo

Función

2

indica el código de la función

Datos

n

Datos dependiendo del tipo de mensaje

CRC

2

Verificación de redundancia cíclica (CRC)

MODBUS TCP/IP con MBAP

MDBUS TCP es una implementación del protocolo Modbus basado en TCP/IP, Utiliza la pila TCP/IP para la comunicación y adiciona un encabezado especifico llamado MBAP(MODBUS Application Protocol). El modelo de mensaje de MODBUS TCP/IP tiene la siguiente forma:

Tabla que representa la trama MODBUS TCP/IP con MBAP

El encabezado MBAP tiene un tamaño de 7 bytes, y esta compuesto por los siguientes campos

Nombre Longitud (bytes) Función

Transaction identifier

2

Sincronización de mensajes entre cliente y servidor

Protocol

2

El valor 0(cero) indica Modbus/TCP

Lenght

2

Cantidad de bytes en la trama

Unit Identifier

1

Utilizado para identificar al esclavo remoto en una red Modbus RTU

 

Para completar la trama:

Nombre Longitud (bytes) Función

Función

2

indica el código de la función

Datos

n

Datos dependiendo del tipo de mensaje

 

Notar que la trama completa es similar a la del MODBUS RTU, pero se reemplaza Dirección y CRC por el MBAP. La gestión de errores recae sobre el protocolo Ethernet.

El identificador de unidad(Unit Identifier) se utiliza con dispositivos que están detrás de una pasarela Modbus/TCP a Modbus RTU.

Al principio cuando a uno le hablan de Modbus, y piensa en industrias, PLC, automatismo, piensa en que puede ser algo complejo y difícil de implementar. Pero es como pudimos ver es un protocolo sencillo, liviano y simple. Con la particularidad y gran ventaja de que es abierto. Es por todo esto que también existen librerías para poder implementar Modbus en Arduino y en casi cualquier placa electrónica actual.