Constructor de tramas Modbus
Presets comunes
Trama
Configura los campos anteriores para generar una trama

Acerca de esta herramienta

Construye tramas Modbus RTU, TCP y ASCII válidas para la comunicación con dispositivos embebidos. La herramienta gestiona el cálculo de CRC-16 y LRC, cabeceras MBAP, interpretación de valores de registros, generación de tramas de respuesta y proporciona un desglose visual de cada byte de la trama con segmentos codificados por colores.

Características

  • Tres protocolos — Modbus RTU (CRC-16), Modbus TCP (cabecera MBAP) y Modbus ASCII (LRC)

  • 11 function codes — Read Coils (01), Read Discrete Inputs (02), Read Holding Registers (03), Read Input Registers (04), Write Single Coil (05), Write Single Register (06), Read Exception Status (07), Diagnostics (08), Write Multiple Coils (0F), Write Multiple Registers (10), Read/Write Multiple Registers (17)

  • Decodificador de tramas — pega tramas en hexadecimal para decodificar con autodetección de protocolo RTU/TCP, validación de CRC/LRC y detección de respuestas de excepción

  • Interpretación de datos — decodifica datos de registros como Unsigned Int 16, Signed Int 16, Unsigned Int 32 o Float 32 con selección de orden de bytes (Big-Endian, Little-Endian, Mid Big-Endian, Mid Little-Endian)

  • Constructor de respuestas — genera tramas de respuesta válidas para cualquier function code, incluyendo respuestas de excepción con todos los códigos de excepción estándar

  • Ayuda de formato de datos — introduce valores decimales y conviértelos automáticamente a bytes hexadecimales, soportando uint16, int16, uint32 y float32

  • Cambio de formato de dirección — alterna entre notación base 0, base 1 y notación Modicon (4xxxx, 3xxxx) con conversión automática

  • Presets comunes — 8 ejemplos de tramas de carga rápida para pruebas instantáneas

  • Formatos de copia — copia como hex con espacios, sin espacios, array de C o literal de bytes de Python

  • Bytes codificados por colores — desglose visual con colores distintos para slave/unit, function code, datos, CRC/LRC, protocolo y segmentos de error

  • Enlace compartible — URL compartible que codifica la configuración actual de la trama

Cómo usar

Modo construcción

  1. Selecciona el modo Build Frame (por defecto)

  2. Elige el protocolo (RTU, TCP o ASCII)
  3. Configura la dirección del esclavo, el function code, la dirección de inicio y la cantidad

  4. Para funciones de escritura, introduce los datos en hexadecimal o usa la ayuda de formato de datos para introducir valores decimales/float

  5. La trama se genera automáticamente con CRC-16 (RTU), cabecera MBAP (TCP) o LRC (ASCII)

  6. Copia la trama en tu formato preferido usando los botones de copiar

Modo decodificación

  1. Selecciona el modo Decode Frame

  2. Elige el protocolo o usa Auto-detect

  3. Pega una trama en hexadecimal (p. ej., 01 03 04 00 0A 00 64 B2 62)

  4. Pulsa Decode o presiona Enter

  5. Selecciona el formato de interpretación de datos (uint16, int16, float32, etc.) para ver los valores de los registros

Constructor de respuestas

  1. Selecciona el modo Response Builder

  2. Elige el function code para la respuesta
  3. Introduce los datos de respuesta en bytes hexadecimales, o selecciona Exception Response para construir una trama de error

Visión general del protocolo Modbus

Modbus es un protocolo de comunicación serie desarrollado por Modicon en 1979 para dispositivos industriales (PLCs, sensores, actuadores). Sigue una arquitectura maestro/esclavo donde el maestro inicia las solicitudes y los esclavos responden.

Estructuras de trama

ProtocoloEstructura de tramaVerificación de error
RTU[Slave] [FC] [Data...] [CRC Lo] [CRC Hi]CRC-16
TCP[Transaction ID] [Protocol ID] [Length] [Unit ID] [FC] [Data...]TCP/IP
ASCII: [Slave] [FC] [Data...] [LRC] CR LFLRC

Referencia de function codes

CódigoNombreTipo de datoAcceso
01Read CoilsDiscrete Output (1 bit)Lectura
02Read Discrete InputsDiscrete Input (1 bit)Lectura
03Read Holding RegistersRegistro de 16 bitsLectura
04Read Input RegistersRegistro de 16 bitsLectura
05Write Single CoilDiscrete Output (1 bit)Escritura
06Write Single RegisterRegistro de 16 bitsEscritura
07Read Exception Status8 coils (diagnóstico)Lectura
08DiagnosticsDatos de sub-funciónLectura/Escritura
0FWrite Multiple CoilsDiscrete Output (1 bit)Escritura
10Write Multiple RegistersRegistro de 16 bitsEscritura
17Read/Write Multiple RegistersRegistro de 16 bitsLectura/Escritura

Notación de direcciones Modicon

La documentación tradicional de Modbus usa rangos de direcciones Modicon para identificar los tipos de datos:

RangoTipo de datoFunction codesDirección de protocolo
00001–09999Coils (salida discreta)01, 05, 0F0–9998 (0x0000–0x270E)
10001–19999Discrete Inputs020–9998 (0x0000–0x270E)
30001–39999Input Registers040–9998 (0x0000–0x270E)
40001–49999Holding Registers03, 06, 100–9998 (0x0000–0x270E)

Códigos de excepción

Cuando un esclavo no puede procesar una solicitud, devuelve una respuesta de excepción con el function code en OR con 0x80 y un código de excepción:

CódigoNombreDescripción
01Illegal FunctionFunction code no soportado por el esclavo
02Illegal Data AddressDirección no disponible en el dispositivo esclavo
03Illegal Data ValueValor fuera de rango para el esclavo
04Slave Device FailureError irrecuperable en el esclavo
05AcknowledgeSolicitud aceptada pero el procesamiento requiere tiempo
06Slave Device BusyEl esclavo está ocupado procesando otra solicitud
08Memory Parity ErrorFalló la verificación de paridad del área de archivo extendida
0AGateway Path UnavailableGateway mal configurado o no disponible
0BGateway Target No ResponseEl dispositivo de destino no respondió al gateway

Orden de bytes (endianness)

Los registros Modbus son de 16 bits, pero muchos dispositivos almacenan valores de 32 bits (enteros, floats) en dos registros. El orden de bytes varía según el fabricante:

NombreOrdenEjemplo (Float 123.456)
Big-Endian (AB CD)El más común, estándar Modbus42 F6 E9 79
Little-Endian (CD AB)Palabras intercambiadasE9 79 42 F6
Mid Big-Endian (BA DC)Bytes intercambiadosF6 42 79 E9
Mid Little-Endian (DC BA)Completamente invertido79 E9 F6 42

Privacidad

Toda la construcción de tramas, decodificación, cálculo de CRC/LRC e interpretación de datos se realiza íntegramente en tu navegador. Ningún dato Modbus se transmite a ningún servidor. El enlace compartible solo codifica los parámetros de la trama en los parámetros de la URL.

Referencia de comandos Linux

Herramientas comunes para probar la comunicación Modbus desde la línea de comandos:

Leer Holding Registers con mbpoll

mbpoll -a 1 -r 0 -c 10 -t 4 /dev/ttyUSB0
mbpoll 1.5 - FieldTalk(tm) Modbus(R) Master SimulatorProtocol configuration: Modbus RTUSlave configuration: address = [1]-- Polling slave 1...[0]: 100[1]: 200[2]: 0[3]: 1500[4]: 0

Leer registros vía TCP con modbus-cli

modbus read 192.168.1.100 %MW0 10
%MW0 = 100%MW1 = 200%MW2 = 0%MW3 = 1500

Leer registros con pymodbus

python3 -c 'from pymodbus.client import ModbusTcpClient as C; c=C("192.168.1.100"); c.connect(); print(c.read_holding_registers(0,10,slave=1).registers)'
[100, 200, 0, 1500, 0, 0, 0, 0, 0, 0]

Escribir un registro con mbpoll

mbpoll -a 1 -r 0 -t 4 /dev/ttyUSB0 — 100
mbpoll 1.5 - FieldTalk(tm) Modbus(R) Master SimulatorWritten 1 reference(s).

Escanear dispositivos Modbus

for id in $(seq 1 247); do mbpoll -a $id -r 0 -c 1 -t 4 -1 /dev/ttyUSB0 2>/dev/null && echo "Device at $id"; done
Device at 1Device at 5

Cálculo de CRC-16

Modbus RTU usa CRC-16 con el polinomio 0xA001 (forma reflejada de 0x8005). El CRC se calcula sobre todos los bytes de la trama excepto el propio CRC, y se añade en orden little-endian (byte bajo primero, byte alto segundo).

Cálculo de LRC

Modbus ASCII usa un Longitudinal Redundancy Check. El LRC es el complemento a dos de la suma de 8 bits de todos los bytes del mensaje (desde la dirección del esclavo hasta el último byte de datos). Se transmite como dos caracteres ASCII hexadecimales antes del CR LF final.