El protocolo Modbus fue diseñado en 1979 para permitir que los controladores de procesos se comuniquen con computadoras en tiempo real (por ejemplo. MODCOMP FLIC, DEC PDP-11), y sigue siendo uno de los protocolos más populares utilizados en las arquitecturas ICS. Modbus es un estándar abierto, se distribuye libremente y es ampliamente apoyado por los miembros de la Organización Modbus. Es un protocolo de mensajería de capa de aplicación, lo que significa que funciona en la capa 7 del modelo OSI. Permite comunicaciones eficientes entre activos basados en una metodología de “solicitud/respuesta”. Los dispositivos, como sensores o motores, utilizan Modbus para comunicarse con computadores más complejos, que pueden leer mediciones y realizar análisis y control, al ser un protocolo que requiere muy poca sobrecarga es adecuado también para su uso en PLCs y unidades de terminales remotas (RTU) para comunicar los datos de supervisión a un sistema ICS.
Cómo funciona

FIGURA 1 Alineación Modbus con modelo OSI de 7 capas.
Modbus es un protocolo de solicitud/respuesta que utiliza tres unidades de datos de protocolo distintas (PDU): Modbus Request, Modbus Response y Modbus Exception Response, se puede implementar en una capa física RS-232C (punto a punto) o RS-485 (multidrop). Se pueden implementar hasta 32 dispositivos en un único enlace serie RS- 485, Por lo que requiere que cada dispositivo que se comunique a través de Modbus tenga asignada una dirección única. Cuando se ejecuta un comando dirigido a una dirección específica, todos los dispositivos recibirán el mismo mensaje, sin embargo, solo responderá el dispositivo direccionado. La complejidad de RS-485 radica en las muchas opciones en las que se puede ser implementado (dos hilos, cuatro hilos, puesta a tierra, etc.) esto tienia como consecuencia que era muy difícil poner en marcha una topología multidrop cuando se utilizaban dispositivos de muchos proveedores diferentes.

FIGURA 2 Marco general Modbus.
Una “transacción” comienza con la transmisión de un código de función inicial y una solicitud de datos dentro de una PDU de solicitud. El dispositivo receptor tiene dos maneras de responder. Si no hay errores, responderá con un código de función y una respuesta de datos dentro de una PDU de respuesta. Si hay errores, el dispositivo responderá con un código de función de excepción y un código de excepción dentro de una respuesta de excepción Modbus. Los datos se representan en Modbus utilizando cuatro tablas principales.

El método de manejo de cada una de estas tablas es específico del dispositivo, ya que algunas pueden ofrecer una sola tabla de datos para todos los tipos, mientras que otras ofrecen tablas únicas. Siempre en conveniente revisar el manual de usuario (RTFM) para entender como funciona el dispositivo, ya que las definiciones originales de Modbus solo se proporcionan para las direcciones del intervalo 0–9999. Con el tiempo se han agregado especificaciones para permitir hasta 65.536 direcciones en las cuatro tablas de datos. Otra advertencia dentro de la norma es que la definición original preveía el primer dígito del registro para identificar la tabla de datos.

FIGURA 3 Transacción del protocolo Modbus (sin errores).
Los códigos de función utilizados en Modbus se dividen en tres categorías y proporcionan al proveedor de dispositivos cierta flexibilidad en la forma en que implementan el protocolo dentro del dispositivo. Los códigos de función en el rango de 01–64, 73–99 y 111–127 se definen como “Públicos” y son validados por la comunidad Modbus-IDA y se garantizan únicos. Los códigos de función “definidos por el usuario” en el rango 65–72 y 100–110 se proporcionan para permitir que un proveedor en particular implemente la funcionalidad que se adapte a su dispositivo y aplicación en particular. No se garantiza que estos códigos sean únicos y no sean compatibles con el estándar. La categoría final de códigos representa las funciones “reservadas” que son utilizadas por algunas empresas para productos heredados, pero no están disponibles para uso público en general. Estos códigos reservados incluyen 8, 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 y 127.
Los códigos de función y las solicitudes de datos se pueden utilizar para realizar una amplia gama de comandos.
Algunos ejemplos de comandos Modbus incluyen los siguientes:
- Leer el valor de un solo registro
- Escribir un valor en un solo registro
- Leer un bloque de valores de un grupo de registros
- Escribir un bloque de valores en un grupo de registros
- Leer archivos
- Escribir archivos
- Obtener datos de diagnóstico del dispositivo.