· Industrial Protocols · 3 min de lectura
Modbus RTU y TCP: La Guía Definitiva del Protocolo Industrial
Endianness, Function Codes, Offsets y la diferencia real entre RTU y TCP. Todo lo que necesitas saber para no sufrir integrando PLCs.

Si trabajas en automatización industrial, Modbus es tu pan de cada día. Es el “Esperanto” de las máquinas: viejo, simple y soportado por absolutamente todos.
Pero esa simplicidad es engañosa. “Es solo Modbus” es la frase famosa antes de perder 3 días peleando con un byte que está al revés. Esta guía cubre lo que los manuales no te dicen.
1. El Modelo de Datos: Las 4 Tablas
Modbus no sabe qué es una “temperatura” o una “velocidad”. Solo ve 4 tablas de datos. Entender esto es el 80% de la batalla.
| Tipo | Acceso | Tamaño | Dirección Típica | Uso |
|---|---|---|---|---|
| Coils (0x) | Lectura/Escritura | 1 bit | 00001 - 09999 | Salidas digitales (Relés, LEDs) |
| Discrete Inputs (1x) | Solo Lectura | 1 bit | 10001 - 19999 | Entradas digitales (Sensores, Botones) |
| Input Registers (3x) | Solo Lectura | 16 bit | 30001 - 39999 | Datos analógicos crudos (ADC, Sensores) |
| Holding Registers (4x) | Lectura/Escritura | 16 bit | 40001 - 49999 | Setpoints, Configuraciones, Valores float |
Trampa #1: Muchos dispositivos modernos mapéan TODO en Holding Registers (40001) para simplificar. Pero si intentas escribir en un registro que el fabricante definió como “Solo Lectura”, recibirás una Excepción 02 (Illegal Data Address).
2. RTU vs TCP: Más que un cable diferente
La diferencia no es solo RS485 vs Ethernet. La estructura de la trama cambia.
Modbus RTU (Serial)
Se basa en tiempos de silencio.
- Slave ID (1 byte): A quién le hablas.
- PDU (Protocol Data Unit): Función + Datos.
- CRC (2 bytes): Checksum cíclico. Critico. Si un bit se corrompe por ruido, el CRC falla y el esclavo ignora el mensaje. No responde “error”, simplemente calla.
Modbus TCP (Ethernet)
Empaqueta el PDU dentro de una trama TCP/IP.
- MBAP Header (7 bytes): Reemplaza al CRC.
- Transaction ID: Para saber a qué pregunta corresponde esta respuesta (asíncrono).
- Unit ID: Usado cuando hablas con un Gateway TCP->RTU. Si hablas directo a un PLC, suele ignorarse (0 o 255), pero si pasas por un gateway, este byte es la dirección del esclavo serial final.
3. El Infierno del Endianness (Byte Swap)
Modbus define que un registro son 16 bits [High Byte, Low Byte]. Simple. ¿Pero qué pasa con un Float de 32 bits (ej: 24.5 °C)? Necesitas 2 registros.
Aquí no hay estándar. Cada fabricante envía los bytes en el orden que quiere:
- Big-Endian (Standard):
AB CD(El más común). - Little-Endian (Byte Swap):
DC BA(Común en PC/x86). - Mid-Big Endian (Word Swap):
CD AB(Común en PLCs viejos). - Mid-Little Endian:
BA DC.
Consejo Profesional: Si lees un valor que debería ser
220.5y ves0.0045o1.5e32, tienes un problema de Endianness. No trates de “escalarlo”. Rota los bytes.
4. Direccionamiento: 0 vs 1
- Documentación de PLC: Dice “Registro 40001”.
- El Cable (Protocolo): Pide dirección
0.
El protocolo es Zero-Based.
- 40001 en manual -> Dirección 0 en el cable.
- 40100 en manual -> Dirección 99 en el cable.
Si tu software SCADA (Ignition, Node-RED) pide “Modbus Address”, a veces esperan el formato 40001 y hacen la resta ellos mismos. Otras librerías (pymodbus) esperan el 0 crudo. Siempre verifica si tu driver usa “1-based” o “0-based” addressing.
Resumen
No subestimes Modbus. Es robusto porque es simple, pero es frágil si no respetas sus reglas:
- Verifica si es Coil, Input o Holding.
- Alinea el Endianness para Floats y Longs.
- Resta 1 a la dirección si usas librerías de bajo nivel.
- En TCP, el Unit ID importa si hay gateways.



