MODBUS
Protocolo Modbus: Fundamentos y aplicaciones
El 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.
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).
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.
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 |
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:
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.