La diferencia entre Modbus RTU y Modbus TCP está en la red que transporta las mismas peticiones Modbus. Modbus RTU es para un bus serie: un maestro sondea por turnos dispositivos con dirección en un par RS-485, y cada trama termina en un CRC de 16 bits. Modbus TCP es para una red IP: un cliente se conecta a la dirección IP del dispositivo en el puerto 502, y una cabecera MBAP de 7 bytes sustituye a la dirección serie y al CRC. En una instalación existente, la elección suele depender de la interfaz que ya tiene el equipo.
Esta guía forma parte de la serie sobre Modbus y RS-485.
Modbus TCP frente a RTU: las diferencias
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Transporte | Línea serie: RS-485 o RS-232 para un solo dispositivo | TCP/IP por Ethernet o Wi-Fi |
| Velocidad | 19.200 baudios por defecto, 9.600 también obligatoria, otras velocidades opcionales | Ethernet de 10 o 100 Mbit/s; el procesamiento del dispositivo suele ser el límite |
| Puerto | Un puerto serie: bornes RS-485 o un puerto COM | Puerto TCP 502, o 802 para Modbus Security |
| Dirección del dispositivo | De 1 a 247 en el bus; 0 para difusión | Dirección IP y un identificador de unidad para dispositivos detrás de una pasarela |
| Trama | Dirección, código de función, datos y CRC de 16 bits | Cabecera MBAP (7 bytes), código de función y datos |
| Detección de errores | CRC en cada trama | Sumas de comprobación TCP; sin CRC Modbus |
| Separación de tramas | Silencio de al menos 3,5 tiempos de carácter | Campo de longitud en la cabecera |
| Peticiones simultáneas | Una cada vez en el bus | Varias conexiones; el identificador de transacción asocia cada respuesta |
| Configuración habitual | Velocidad, paridad, bits de parada y dirección | Dirección IP, puerto 502 e identificador de unidad |
| Cableado | Par trenzado en cadena, terminado en ambos extremos | Red de la instalación |
| Unión de ambos | Una pasarela en el bus atiende a los clientes TCP y reenvía cada petición como trama RTU | El identificador de unidad indica el dispositivo serie detrás de la pasarela |
La guía de RS-485 frente a Modbus explica la capa serie de Modbus RTU y cómo difiere RS-232. Los códigos de función son iguales en ambos: 03 lee registros de retención, 04 lee registros de entrada, y 06 y 16 escriben. También se conservan tipos de datos, orden de palabras y escalas. La guía de mapas de registros los explica.
Cómo funciona el protocolo Modbus TCP
Modbus TCP transporta el protocolo de aplicación Modbus en paquetes TCP/IP. Un cliente, como un sistema SCADA, un BMS o una pasarela, abre una conexión TCP con un servidor, como un contador o un PLC, y envía peticiones por ella. El servidor responde a cada petición y nunca envía datos sin que se los pidan. Los documentos antiguos llaman maestro al cliente y esclavo al servidor.
Un servidor escucha en el puerto TCP 502, que IANA tiene registrado para Modbus. Algunos dispositivos permiten cambiar el puerto, y algunas pasarelas serie utilizan un puerto distinto para cada línea serie. Un cliente puede mantener una conexión abierta para muchas peticiones. Un servidor acepta conexiones de varios clientes, hasta su propio límite.
Tablas de datos y códigos de función
Todo dispositivo Modbus, en TCP o en RTU, presenta sus datos en cuatro tablas:
| Tabla | Tamaño de un elemento | Acceso | Lectura | Escritura |
|---|---|---|---|---|
| Bobinas (coils) | 1 bit | Lectura y escritura | 01 | 05 (una), 15 (varias) |
| Entradas discretas | 1 bit | Solo lectura | 02 | No admite escritura |
| Registros de entrada | 16 bits | Solo lectura | 04 | No admite escritura |
| Registros de retención | 16 bits | Lectura y escritura | 03 | 06 (uno), 16 (varios) |
Los contadores de energía publican sus lecturas en registros de entrada o de retención. Un valor de 32 bits, como una tensión en coma flotante o un contador de energía, ocupa dos registros consecutivos, y el mapa de registros indica el orden de ambos. La trama lleva una dirección con base cero, por lo que el registro de retención que un manual llama 40108 es la dirección 107 (0x006B). El conversor de direcciones Modbus convierte entre ambas notaciones.
Comparación de tramas
Una petición para leer tres registros de retención desde la dirección 0x006B en el dispositivo 17 tiene este aspecto:
| Variante | Bytes (hexadecimales) |
|---|---|
| Modbus RTU | 11 03 00 6B 00 03, seguido del CRC de 2 bytes |
| Modbus TCP | 00 01 00 00 00 06 11 03 00 6B 00 03 |
En la trama TCP, los primeros siete bytes forman la cabecera MBAP: identificador de transacción (0x0001), identificador de protocolo (siempre 0 en Modbus), longitud del resto (6 bytes) e identificador de unidad (0x11). La unidad de datos del protocolo que sigue a la cabecera es idéntica. La calculadora de CRC y LRC Modbus calcula los bytes de comprobación RTU:
La respuesta del servidor repite la cabecera MBAP con su propia longitud, seguida del código de función, un recuento de bytes y los valores de los registros. Si los tres registros contienen 555, 0 y 100, la respuesta Modbus TCP es:
00 01 00 00 00 09 11 03 06 02 2B 00 00 00 64
La longitud pasa a ser de 9 bytes: el identificador de unidad, el código de función, el recuento de bytes y 6 bytes de datos. Cuando un dispositivo no puede ejecutar una petición, devuelve una excepción: el código de función con su bit más alto activado (0x83 para la función 03), seguido de un código de excepción. El código 02, dirección de datos no válida, suele indicar una dirección errónea o una lectura que sobrepasa el final de un bloque:
00 01 00 00 00 03 11 83 02
Los códigos de función y excepción Modbus explican cada código.
Una misma lectura por RTU y por TCP
Eastron vende su contador trifásico SDM630 con RS-485, como SDM630-Modbus, y con Ethernet, como SDM630-TCP. Los dos documentos de protocolo sitúan la tensión de fase 1 a neutro en la referencia de registro de entrada 30001, dirección de protocolo 0, como flotante de 32 bits en dos registros, que se lee con la función 04. La unidad de datos de protocolo es 04 00 00 00 02 en ambos:
| Contador | Petición de la tensión de la fase 1 (hexadecimal) |
|---|---|
| SDM630-Modbus en la dirección de bus 1 | 01 04 00 00 00 02 71 CB |
| SDM630-TCP con identificador de unidad 1 | 00 01 00 00 00 06 01 04 00 00 00 02 |
Una respuesta con los datos 43 66 00 00 equivale a 230,0 V cuando la palabra alta va primero; el decodificador de registros Modbus muestra los demás órdenes de palabras. Eastron publica una tabla de registros distinta para cada modelo, así que compruebe cada punto en la tabla del modelo instalado en lugar de suponer que el mapa serie sirve también.
Tiempos y capacidad
En un bus RTU solo hay una petición activa cada vez. Su duración suma el tiempo en la línea de petición y respuesta, el tiempo de respuesta del dispositivo y el silencio entre tramas. A 9.600 baudios con paridad par, cada carácter ocupa 11 bits: un byte tarda unos 1,15 ms. La guía de línea serie Modbus fija el silencio entre tramas en 1,75 ms por encima de 19.200 baudios. La calculadora de tiempos Modbus RTU suma el ciclo completo de un bus:
La guía de consultas y reintentos muestra el efecto de un dispositivo desconectado en ese ciclo. En Modbus TCP, la red rara vez es el límite. Suelen limitar el tiempo de procesamiento del dispositivo y el número de conexiones simultáneas que admite. Muchos contadores aceptan pocas conexiones TCP; algunos, solo una. Compruebe el límite antes de que varios sistemas consulten el mismo contador.
Probar una conexión Modbus TCP
Compruebe la conexión capa por capa, de modo que cada fallo apunte a una sola causa:
- Lea la dirección IP, la máscara de subred y la puerta de enlace predeterminada del dispositivo en su pantalla o en su herramienta de configuración. Compruebe que el cliente está en la misma subred, o que un router y el cortafuegos permiten el tráfico.
- Desde un ordenador de esa red, compruebe que el puerto TCP 502 acepta una conexión. En macOS o Linux,
nc -vz 192.0.2.10 502indica si el puerto está abierto (use la dirección del propio dispositivo). - Con un cliente Modbus, lea un registro cuyo valor pueda ver en la pantalla del dispositivo, como una tensión de fase. Use el identificador de unidad que indica el manual.
- Compare el valor, su escala y su unidad con la pantalla. Después añada el resto del mapa de registros.
- Si el puerto se abre pero todas las lecturas agotan el tiempo de espera, compruebe el identificador de unidad y si otro cliente ocupa la única conexión que acepta el dispositivo.
De Modbus RTU a TCP: pasarelas e identificadores de unidad
Una pasarela serie a Ethernet permite que clientes Modbus TCP accedan a dispositivos RTU. El cliente envía la petición TCP a la dirección IP de la pasarela y coloca la dirección del dispositivo serie en el identificador de unidad. La pasarela la envía al bus, espera la respuesta y la devuelve por TCP.
Tres aspectos requieren atención:
- Identificador de unidad en dispositivos TCP directos. La guía Modbus TCP indica que no se utiliza si el servidor se identifica por su IP y recomienda 0xFF. Muchos dispositivos lo ignoran; algunos exigen 1 o su dirección serie. Use el valor del manual del equipo.
- Plazos de espera. El plazo TCP del cliente debe superar el plazo serie de la pasarela más el tiempo que su petición espera detrás de otras en el bus. De lo contrario, el cliente abandona mientras la pasarela sigue esperando.
- RTU sobre TCP. Algunos conversores transportan tramas RTU con su CRC y sin cabecera MBAP directamente por una conexión TCP. Eso no es Modbus TCP y el cliente debe configurarse en el modo correspondiente. La guía de pasarelas de protocolos explica la diferencia entre un puente y una pasarela que traduce, y la guía de pasarelas Modbus y BACnet cómo elegir una.
Registre para cada punto dirección IP, puerto, identificador de unidad y dispositivo físico que responde. Tras sustituir una pasarela, compruebe primero ese encaminamiento.
Modbus TCP o RTU: elección para una instalación
Elija el transporte que ya ofrece el equipo:
| Situación | Opción habitual |
|---|---|
| Contadores con bornes RS-485 solamente, en uno o dos cuadros | Modbus RTU en un bus corto o una interfaz local |
| Equipo con puerto Ethernet en una red gestionada | Modbus TCP, con un plan de direcciones acordado con el equipo de TI de la instalación |
| Bus RTU existente consultado por un BMS | Leer desde el BMS o una pasarela; no añadir otro maestro |
| Muchos dispositivos serie que deben leer varios sistemas | Pasarela Modbus TCP delante del bus |
| Contadores serie lejos del Gateway y sin ruta de cable | Interfaz Modbus inalámbrica junto a los contadores |
Para ambas variantes, obtenga el mapa de registros del modelo y firmware exactos antes de elegir el hardware. «Compatible con Modbus» no indica qué valores publica el dispositivo.
Seguridad
Modbus TCP y RTU no tienen autenticación ni cifrado. Cualquier cliente que pueda acceder al puerto 502 puede leer y, si el dispositivo lo permite, escribir. Protéjalos mediante el diseño de red: red o VLAN separada para equipos de control, reglas de cortafuegos limitadas a los sistemas necesarios y ninguna exposición a Internet.
Modbus Organization publica un protocolo Modbus Security aparte, que incorpora TLS con certificados X.509 en el puerto 802. Ambos extremos deben admitirlo. Una pasarela delante de un dispositivo Modbus sin protección no protege al propio dispositivo; solo desplaza el límite de seguridad.
Pruebe las lecturas antes de escribir. Trate las escrituras como un paso independiente y aprobado por el responsable del equipo.
Modbus TCP y RTU con Edge
Edge en el Gateway ZGW-20 es cliente Modbus de ambas variantes. Consulta dispositivos Modbus TCP de la red de la instalación, incluidos conversores RTU sobre TCP, y dispositivos Modbus RTU conectados a un puerto serie: la entrada RS-485 de la placa de E/S en la versión Industrial, o un adaptador serie USB. Cada conexión tiene su propia cola, plazos y ritmo de consultas. Para un contador al que no llega un cable de datos desde el Gateway, una interfaz Modbus ZMB lo lee por RS-485 y envía los registros por la red Zigbee. Edge también incluye un servidor Modbus: un BMS o SCADA puede leer datos de la instalación desde el Gateway como registros Modbus TCP en el puerto 10502. La guía de pasarelas Modbus y BACnet lo compara con un convertidor de protocolos dedicado. Para probar Edge primero con un solo contador, una Raspberry Pi configurada con System Manager lo ejecuta con un dispositivo Modbus de hasta 32 registros licenciado gratis; consulte evaluar Edge en una Raspberry Pi. La guía de puesta en marcha de Modbus RS-485 explica la conexión serie.
Preguntas frecuentes
¿Qué diferencia hay entre Modbus TCP y Modbus RTU?
Modbus RTU funciona en una línea serie como RS-485: tramas binarias, CRC para detectar errores y un maestro que consulta dispositivos por dirección. Modbus TCP funciona en una red IP: las mismas peticiones en una cabecera MBAP de 7 bytes, enviadas por TCP al puerto 502; TCP comprueba los errores. Códigos de función y mapas de registros son iguales.
¿Debo usar Modbus TCP o Modbus RTU?
Utilice la interfaz que ya tiene el equipo. Modbus TCP es adecuado para dispositivos con puerto Ethernet en una red gestionada y permite que varios sistemas lean un mismo dispositivo dentro de su límite de conexiones. Modbus RTU es adecuado para contadores con bornes RS-485 en uno o dos cuadros, en un bus corto con un solo maestro. Si los dispositivos serie deben llegar a una red IP, coloque una pasarela delante del bus.
¿Qué puerto utiliza Modbus TCP?
El puerto TCP 502. El protocolo Modbus Security, que encapsula Modbus en TLS, utiliza el puerto 802.
¿Qué puerto utiliza Modbus RTU?
Ninguno en el sentido de red. Modbus RTU funciona sobre un puerto serie: los bornes RS-485 del dispositivo, o un puerto COM o un adaptador serie USB en un ordenador. El puerto 502 corresponde a Modbus TCP. Una pasarela serie-Ethernet puede asignar un puerto TCP propio a cada una de sus líneas serie.
¿Qué es el ID de unidad en Modbus TCP?
Es un campo de un byte en la cabecera MBAP. Una pasarela lo usa para dirigir la petición a un dispositivo serie situado detrás y lleva la dirección de ese dispositivo. Para un equipo que habla Modbus TCP directamente, la guía recomienda 0xFF; muchos esperan 1 o aceptan cualquier valor.
¿Qué es Modbus RTU sobre TCP?
Una trama RTU, con dirección y CRC, enviada sin cambios por una conexión TCP y sin cabecera MBAP. Algunos conversores serie a Ethernet funcionan así. No es Modbus TCP; el cliente debe configurarse en el modo correcto para cada dispositivo.
¿Es Modbus TCP lo mismo que Modbus TCP/IP?
Sí. Ambos nombres describen peticiones Modbus transportadas en paquetes TCP por una red IP, con la cabecera MBAP de 7 bytes delante de cada petición. Modbus RTU sobre TCP es distinto: envía tramas RTU, con su CRC y sin cabecera MBAP, por una conexión TCP.
¿Cómo pruebo una conexión Modbus TCP?
Compruebe que la dirección IP del dispositivo está en una red a la que llega el cliente y que el puerto TCP 502 acepta una conexión. Después lea un registro cuyo valor pueda ver en la pantalla del dispositivo, con el identificador de unidad del manual, y compare el valor, la escala y la unidad con la pantalla antes de leer el resto del mapa.