Modbus network linking a controller with distributed field devices

Modbus: el protocolo de bus de campo industrial original

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, ti...

Un bus de campo es un protocolo de comunicación utilizado en redes industriales para conectar dispositivos de campo con controladores industriales. Un bus de campo reduce la cantidad de cableado necesaria entre controladores y dispositivos, ya que varios dispositivos pueden conectarse al mismo par de cables.

Existen numerosas tecnologías de bus de campo populares, como Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet y muchas otras.

En 1979, Modicon introdujo un nuevo protocolo que aprovechaba la capa de aplicación del modelo OSI, específicamente para su uso con sus PLC. Este protocolo se denominó Modbus y se convirtió en el primer bus de campo ampliamente utilizado en la historia de la automatización.

 

PLC conectado a dispositivos de campo mediante bus de campo

Figura 1. Un PLC conectado a dispositivos de campo 

 

Introducción a Modbus

Modbus se diseñó para conectar dispositivos de campo con controladores industriales. En el momento de su invención, la mayoría de los dispositivos utilizaban representaciones de tensión o corriente como medio para comunicar el estado del dispositivo. Modbus puede gestionar eficazmente bits discretos que reflejan estados alto/bajo de sensores y actuadores, así como registros que contienen valores enteros equivalentes a valores analógicos del proceso.

La lenta transición hacia las tecnologías de bus de campo hizo que Modbus se convirtiera en uno de los protocolos más sencillos, y con los años se han añadido nuevas versiones.

Originalmente, Modbus se implementó sobre un enlace de comunicación serie, es decir, RS-232/RS-485. Estas variantes todavía se utilizan habitualmente con los nombres Modbus RTU y ASCII. Con el tiempo, el protocolo se adaptó para su uso sobre TCP/IP y Ethernet. Esto se conoce comúnmente como Modbus TCP y es la implementación de Modbus más utilizada en las instalaciones modernas.

 

Modelo de comunicación

Modbus utiliza un modelo maestro/esclavo para la comunicación (cliente/servidor en Modbus TCP). Un maestro Modbus envía una solicitud a un esclavo Modbus, que ejecuta acciones y responde al maestro. En este escenario, un maestro suele ser un PLC, mientras que los dispositivos de campo actúan como esclavos. 

Una trama de mensajes en Modbus está compuesta por una unidad de datos de aplicación (ADU) y una unidad de datos de protocolo (PDU). La ADU varía según el tipo de Modbus utilizado, mientras que la PDU es independiente del método de comunicación.

Una PDU normalmente está compuesta por un código de función y algunos datos. Esto se encapsula en la ADU mediante una dirección y un código de comprobación de errores. Modbus TCP utiliza un encabezado MBAP (Modbus Application Protocol) en la ADU.

 

Figura 2. ADU y PDU de Modbus ASCII/RTU (arriba) y Modbus TCP (abajo). Imagen adaptada de Modbus.org

 

Para que la PDU siga siendo independiente de la capa de comunicación subyacente, debe cumplir con las limitaciones de tamaño de la especificación serie original. Este tamaño era de 256 bytes para la ADU sobre RS-485. Por lo tanto, debemos tener en cuenta la ADU —1 byte de dirección y 2 bytes de comprobación de errores—, lo que significa que la PDU está limitada a un total de 253 bytes. Ten en cuenta que la dirección de la ADU es en realidad el ID del dispositivo esclavo de la red Modbus.

La parte de datos de la PDU contendrá campos específicos del código de función junto con los datos que se están transmitiendo. Estos campos se analizarán en detalle más adelante en el artículo.

 

Representación de datos

El Modbus clásico tiene dos modos de transmisión: ASCII y RTU.

En el modo ASCII, los datos se envían como los caracteres ASCII 0-9 y A-F, mientras que en el modo RTU se representan en binario de 8 bits. Los datos y las direcciones se codifican en orden big-endian, por lo que primero se transmite el byte más significativo.

Los datos de Modbus se presentan en cuatro tipos principales:

  • Entradas discretas
  • Bobinas (salidas)
  • Registros de entrada
  • Registros de retención

Las entradas discretas representan un solo bit de datos y son de solo lectura. Las bobinas también representan un solo bit, pero se pueden leer y escribir. Los registros de entrada representan datos de solo lectura de 16 bits, mientras que los registros de retención son datos de lectura y escritura de 16 bits.

 

Figura 3. Tomada de la Especificación del protocolo Modbus

 

Para cada tipo, se puede ubicar un máximo de 2^16 (65536) elementos de datos en la memoria de un dispositivo. Existen códigos de función específicos para acceder a cada uno de los distintos tipos de datos, y cada tipo suele tener su propio bloque de memoria dedicado.

Para direccionar un elemento de datos, un maestro simplemente utiliza el rango de 0 a 65535. El elemento de datos 1 se ubicaría en la dirección 0x0000. El elemento de datos 2 estaría en la dirección 0x0001. El elemento de datos 65536 se encontraría en 0xFFFF. Ten en cuenta que no es obligatorio que los dispositivos tengan los 65536 elementos de datos; de hecho, la mayoría de los terminales de E/S remotas que utilizan Modbus estarán muy por debajo de este límite máximo.

 

Transacciones de Modbus

Una vez comprendida la forma en que se representan los datos en Modbus, podemos examinar las transacciones en detalle. Esto se hará desde la perspectiva de la PDU, ya que la PDU es independiente de la capa de comunicación.

Las transacciones de Modbus utilizan instrucciones con caracteres hexadecimales, donde un solo byte de 8 bits tiene el formato 0x00, con un rango de 0 a F para cada carácter. Por lo tanto, un registro de 16 bits equivale a dos bytes, representados en el formato 0x0000. 

La especificación de Modbus define tres tipos de PDU:

  • Solicitud de Modbus
  • Respuesta de Modbus
  • Respuesta de excepción de Modbus

El maestro inicia una solicitud mediante el código de función, mientras que el esclavo envía una respuesta en reacción a dicha solicitud. Una respuesta correcta repite el código de función que el maestro le envió. Una respuesta de excepción responde con el mismo código de función, pero con el MSB (bit más significativo) establecido en alto para indicar que algo salió mal. 

La especificación de Modbus define varios códigos de función. El código de función 0x01 corresponde a la función de lectura de bobinas.

La figura 4 muestra un ejemplo de cómo podría ser una solicitud y respuesta de lectura de bobinas. El maestro Modbus envía una solicitud con el código de función 0x01 (lectura de bobinas), comenzando en el primer elemento de datos (dirección 0x0000) y leyendo una sola bobina. La función de lectura de bobinas puede utilizarse para leer hasta 2000 (0x7D0) bobinas a la vez. 

 

Figura 4. Transacción de lectura de bobinas

 

Si la operación tiene éxito, el esclavo responde con el mismo código de función y un recuento del número de bobinas con las que está respondiendo. El estado de las bobinas tendrá una longitud de n bytes, y cada bit representará si la bobina correspondiente está ACTIVADA (1) o DESACTIVADA (0).

En este caso, la bobina de la dirección 0x0000 está ACTIVADA. Si la solicitud no hubiera tenido éxito, la respuesta de excepción contendría el código de función con el MSB establecido en alto (0x81), junto con un código de excepción que explicaría qué salió mal. El código de excepción 0x02 significa que se utilizó una dirección de datos no válida; es decir, no hay ninguna bobina en 0x0000 en la memoria de este esclavo. 

El siguiente ejemplo ilustra una transacción de escritura de un solo registro (código de función 0x06). Aquí, el maestro solicita escribir los datos 0xA0A0 en la dirección 0x00FF. La respuesta del esclavo es simplemente un eco de la solicitud.

El ejemplo de respuesta de excepción aquí mostrado incluye el código de función con el MSB establecido en alto, junto con un código de excepción de 0x04. Este código significa que se ha producido un error irrecuperable mientras el esclavo intentaba realizar la solicitud. 

 

Figura 5. Transacción de escritura de un solo registro 

 

Todos los códigos de función de Modbus siguen un patrón similar al de los dos ejemplos mostrados anteriormente.

La figura 6 muestra una lista de los códigos de función comunes junto con los códigos de excepción para las respuestas de excepción. Para obtener más información, consulte la especificación de Modbus. 

 

Figura 6. Códigos de función y códigos de excepción

 

Conclusión

Modbus permite que los PLC se comuniquen con todo tipo de unidades remotas, incluidos bancos de E/S, unidades terminales y otros controladores, mediante un método estándar para leer y escribir información discreta y de tipo entero, cubriendo prácticamente todos los escenarios que implican la transferencia de datos digitales.

Modbus es actualmente un estándar de la industria y representa el protocolo industrial libre de regalías más extendido hasta la fecha, a pesar de que es anterior a la mayoría de los sistemas de control modernos. Se encuentra en plantas y fábricas de todo el mundo y, pese a su longevidad, seguirá siendo sin duda un protocolo industrial relevante durante muchos años.

 

Artículo original publicado en 2019

Modbus: el protocolo de bus de campo industrial original

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, timing, diagnostics, and the design limits...

Un bus de campo es un protocolo de comunicación utilizado en redes industriales para conectar dispositivos de campo con controladores industriales. Un bus de campo reduce la cantidad de cableado necesaria entre controladores y dispositivos, ya que varios dispositivos pueden conectarse al mismo par de cables.

Existen numerosas tecnologías de bus de campo populares, como Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet y muchas otras.

En 1979, Modicon introdujo un nuevo protocolo que aprovechaba la capa de aplicación del modelo OSI, específicamente para su uso con sus PLC. Este protocolo se denominó Modbus y se convirtió en el primer bus de campo ampliamente utilizado en la historia de la automatización.

 

PLC conectado a dispositivos de campo mediante bus de campo

Figura 1. Un PLC conectado a dispositivos de campo 

 

Introducción a Modbus

Modbus se diseñó para conectar dispositivos de campo con controladores industriales. En el momento de su invención, la mayoría de los dispositivos utilizaban representaciones de tensión o corriente como medio para comunicar el estado del dispositivo. Modbus puede gestionar eficazmente bits discretos que reflejan estados alto/bajo de sensores y actuadores, así como registros que contienen valores enteros equivalentes a valores analógicos del proceso.

La lenta transición hacia las tecnologías de bus de campo hizo que Modbus se convirtiera en uno de los protocolos más sencillos, y con los años se han añadido nuevas versiones.

Originalmente, Modbus se implementó sobre un enlace de comunicación serie, es decir, RS-232/RS-485. Estas variantes todavía se utilizan habitualmente con los nombres Modbus RTU y ASCII. Con el tiempo, el protocolo se adaptó para su uso sobre TCP/IP y Ethernet. Esto se conoce comúnmente como Modbus TCP y es la implementación de Modbus más utilizada en las instalaciones modernas.

 

Modelo de comunicación

Modbus utiliza un modelo maestro/esclavo para la comunicación (cliente/servidor en Modbus TCP). Un maestro Modbus envía una solicitud a un esclavo Modbus, que ejecuta acciones y responde al maestro. En este escenario, un maestro suele ser un PLC, mientras que los dispositivos de campo actúan como esclavos. 

Una trama de mensajes en Modbus está compuesta por una unidad de datos de aplicación (ADU) y una unidad de datos de protocolo (PDU). La ADU varía según el tipo de Modbus utilizado, mientras que la PDU es independiente del método de comunicación.

Una PDU normalmente está compuesta por un código de función y algunos datos. Esto se encapsula en la ADU mediante una dirección y un código de comprobación de errores. Modbus TCP utiliza un encabezado MBAP (Modbus Application Protocol) en la ADU.

 

Figura 2. ADU y PDU de Modbus ASCII/RTU (arriba) y Modbus TCP (abajo). Imagen adaptada de Modbus.org

 

Para que la PDU siga siendo independiente de la capa de comunicación subyacente, debe cumplir con las limitaciones de tamaño de la especificación serie original. Este tamaño era de 256 bytes para la ADU sobre RS-485. Por lo tanto, debemos tener en cuenta la ADU —1 byte de dirección y 2 bytes de comprobación de errores—, lo que significa que la PDU está limitada a un total de 253 bytes. Ten en cuenta que la dirección de la ADU es en realidad el ID del dispositivo esclavo de la red Modbus.

La parte de datos de la PDU contendrá campos específicos del código de función junto con los datos que se están transmitiendo. Estos campos se analizarán en detalle más adelante en el artículo.

 

Representación de datos

El Modbus clásico tiene dos modos de transmisión: ASCII y RTU.

En el modo ASCII, los datos se envían como los caracteres ASCII 0-9 y A-F, mientras que en el modo RTU se representan en binario de 8 bits. Los datos y las direcciones se codifican en orden big-endian, por lo que primero se transmite el byte más significativo.

Los datos de Modbus se presentan en cuatro tipos principales:

  • Entradas discretas
  • Bobinas (salidas)
  • Registros de entrada
  • Registros de retención

Las entradas discretas representan un solo bit de datos y son de solo lectura. Las bobinas también representan un solo bit, pero se pueden leer y escribir. Los registros de entrada representan datos de solo lectura de 16 bits, mientras que los registros de retención son datos de lectura y escritura de 16 bits.

 

Figura 3. Tomada de la Especificación del protocolo Modbus

 

Para cada tipo, se puede ubicar un máximo de 2^16 (65536) elementos de datos en la memoria de un dispositivo. Existen códigos de función específicos para acceder a cada uno de los distintos tipos de datos, y cada tipo suele tener su propio bloque de memoria dedicado.

Para direccionar un elemento de datos, un maestro simplemente utiliza el rango de 0 a 65535. El elemento de datos 1 se ubicaría en la dirección 0x0000. El elemento de datos 2 estaría en la dirección 0x0001. El elemento de datos 65536 se encontraría en 0xFFFF. Ten en cuenta que no es obligatorio que los dispositivos tengan los 65536 elementos de datos; de hecho, la mayoría de los terminales de E/S remotas que utilizan Modbus estarán muy por debajo de este límite máximo.

 

Transacciones de Modbus

Una vez comprendida la forma en que se representan los datos en Modbus, podemos examinar las transacciones en detalle. Esto se hará desde la perspectiva de la PDU, ya que la PDU es independiente de la capa de comunicación.

Las transacciones de Modbus utilizan instrucciones con caracteres hexadecimales, donde un solo byte de 8 bits tiene el formato 0x00, con un rango de 0 a F para cada carácter. Por lo tanto, un registro de 16 bits equivale a dos bytes, representados en el formato 0x0000. 

La especificación de Modbus define tres tipos de PDU:

  • Solicitud de Modbus
  • Respuesta de Modbus
  • Respuesta de excepción de Modbus

El maestro inicia una solicitud mediante el código de función, mientras que el esclavo envía una respuesta en reacción a dicha solicitud. Una respuesta correcta repite el código de función que el maestro le envió. Una respuesta de excepción responde con el mismo código de función, pero con el MSB (bit más significativo) establecido en alto para indicar que algo salió mal. 

La especificación de Modbus define varios códigos de función. El código de función 0x01 corresponde a la función de lectura de bobinas.

La figura 4 muestra un ejemplo de cómo podría ser una solicitud y respuesta de lectura de bobinas. El maestro Modbus envía una solicitud con el código de función 0x01 (lectura de bobinas), comenzando en el primer elemento de datos (dirección 0x0000) y leyendo una sola bobina. La función de lectura de bobinas puede utilizarse para leer hasta 2000 (0x7D0) bobinas a la vez. 

 

Figura 4. Transacción de lectura de bobinas

 

Si la operación tiene éxito, el esclavo responde con el mismo código de función y un recuento del número de bobinas con las que está respondiendo. El estado de las bobinas tendrá una longitud de n bytes, y cada bit representará si la bobina correspondiente está ACTIVADA (1) o DESACTIVADA (0).

En este caso, la bobina de la dirección 0x0000 está ACTIVADA. Si la solicitud no hubiera tenido éxito, la respuesta de excepción contendría el código de función con el MSB establecido en alto (0x81), junto con un código de excepción que explicaría qué salió mal. El código de excepción 0x02 significa que se utilizó una dirección de datos no válida; es decir, no hay ninguna bobina en 0x0000 en la memoria de este esclavo. 

El siguiente ejemplo ilustra una transacción de escritura de un solo registro (código de función 0x06). Aquí, el maestro solicita escribir los datos 0xA0A0 en la dirección 0x00FF. La respuesta del esclavo es simplemente un eco de la solicitud.

El ejemplo de respuesta de excepción aquí mostrado incluye el código de función con el MSB establecido en alto, junto con un código de excepción de 0x04. Este código significa que se ha producido un error irrecuperable mientras el esclavo intentaba realizar la solicitud. 

 

Figura 5. Transacción de escritura de un solo registro 

 

Todos los códigos de función de Modbus siguen un patrón similar al de los dos ejemplos mostrados anteriormente.

La figura 6 muestra una lista de los códigos de función comunes junto con los códigos de excepción para las respuestas de excepción. Para obtener más información, consulte la especificación de Modbus. 

 

Figura 6. Códigos de función y códigos de excepción

 

Conclusión

Modbus permite que los PLC se comuniquen con todo tipo de unidades remotas, incluidos bancos de E/S, unidades terminales y otros controladores, mediante un método estándar para leer y escribir información discreta y de tipo entero, cubriendo prácticamente todos los escenarios que implican la transferencia de datos digitales.

Modbus es actualmente un estándar de la industria y representa el protocolo industrial libre de regalías más extendido hasta la fecha, a pesar de que es anterior a la mayoría de los sistemas de control modernos. Se encuentra en plantas y fábricas de todo el mundo y, pese a su longevidad, seguirá siendo sin duda un protocolo industrial relevante durante muchos años.

 

Artículo original publicado en 2019

Deja un comentario

Tenga en cuenta que los comentarios deben ser aprobados antes de ser publicados.