Asesoría Agenda una llamada de descubrimiento técnico hoy mismo »

· 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.

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.

TipoAccesoTamañoDirección TípicaUso
Coils (0x)Lectura/Escritura1 bit00001 - 09999Salidas digitales (Relés, LEDs)
Discrete Inputs (1x)Solo Lectura1 bit10001 - 19999Entradas digitales (Sensores, Botones)
Input Registers (3x)Solo Lectura16 bit30001 - 39999Datos analógicos crudos (ADC, Sensores)
Holding Registers (4x)Lectura/Escritura16 bit40001 - 49999Setpoints, 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:

  1. Big-Endian (Standard): AB CD (El más común).
  2. Little-Endian (Byte Swap): DC BA (Común en PC/x86).
  3. Mid-Big Endian (Word Swap): CD AB (Común en PLCs viejos).
  4. Mid-Little Endian: BA DC.

Consejo Profesional: Si lees un valor que debería ser 220.5 y ves 0.0045 o 1.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:

  1. Verifica si es Coil, Input o Holding.
  2. Alinea el Endianness para Floats y Longs.
  3. Resta 1 a la dirección si usas librerías de bajo nivel.
  4. En TCP, el Unit ID importa si hay gateways.
Volver al blog

Related Posts

View All Posts »