Conector Modbus
Descripción General
Sección titulada «Descripción General»El conector Modbus permite la comunicación con PLCs y dispositivos industriales usando el protocolo Modbus, admitiendo conexiones tanto seriales (RTU) como TCP/IP.
Tipos de Conector:
ModbusReader- Leer datos de dispositivos ModbusModbusWriter- Escribir datos en dispositivos Modbus
Características
Sección titulada «Características»- ✅ Múltiples protocolos de transporte (TCP, RTU, UDP, TLS)
- ✅ Todos los tipos de registros (Holding, Input, Coil, Discrete Input)
- ✅ Múltiples tipos de datos (Int16/32/64, UInt16/32/64, Float32/64, ASCII)
- ✅ Orden de bytes y palabras configurable
- ✅ Soporte de ID de unidad para redes multi-dispositivo
Protocolos de Transporte
Sección titulada «Protocolos de Transporte»Meddle admite los siguientes transportes Modbus:
TCP- Modbus TCP sobre EthernetTCPWithTLS- Modbus TCP con cifrado TLSUDP- Modbus sobre UDPRTU- Modbus RTU sobre serialRTUOverTCP- Modbus RTU encapsulado en TCPRTUOverUDP- Modbus RTU encapsulado en UDP
Configuración Básica
Sección titulada «Configuración Básica»Lector Modbus TCP
Sección titulada «Lector Modbus TCP»{ "type": "ModbusReader", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "pollingRate": 1000, "defaultUnitId": 1, "defaultBitOrder": "BigEndian", "defaultWordOrder": "HighFirst" }, "variables": [ { "key": "temperature", "address": 0, "registerType": "HoldingRegister", "dataType": "Float64" }, { "key": "pressure", "address": 4, "registerType": "HoldingRegister", "dataType": "Int32" } ]}Lector Modbus RTU
Sección titulada «Lector Modbus RTU»{ "type": "ModbusReader", "config": { "endpoint": "/dev/ttyUSB0", "transport": "RTU", "pollingRate": 1000, "defaultUnitId": 1, "baudRate": 9600, "dataBits": 8, "parity": "None", "stopBits": 1 }, "variables": [ { "key": "sensor_value", "address": 0, "registerType": "InputRegister", "dataType": "UInt16" } ]}Escritor Modbus
Sección titulada «Escritor Modbus»{ "type": "ModbusWriter", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "defaultUnitId": 1 }, "variables": [ { "key": "setpoint", "address": 100, "registerType": "HoldingRegister", "dataType": "Float32" }, { "key": "enable", "address": 0, "registerType": "Coil" } ]}Tipos de Registros
Sección titulada «Tipos de Registros»Holding Registers (Lectura/Escritura)
Sección titulada «Holding Registers (Lectura/Escritura)»Registros de propósito general que pueden ser leídos y escritos.
{ "key": "temperature", "address": 0, "registerType": "HoldingRegister", "dataType": "Float64"}Códigos de Función: Lectura (03), Escritura Simple (06), Escritura Múltiple (16)
Input Registers (Solo Lectura)
Sección titulada «Input Registers (Solo Lectura)»Registros de solo lectura típicamente usados para datos de sensores.
{ "key": "sensor_reading", "address": 0, "registerType": "InputRegister", "dataType": "Int16"}Código de Función: Lectura (04)
Coils (Lectura/Escritura Booleano)
Sección titulada «Coils (Lectura/Escritura Booleano)»Registros de un solo bit para salidas digitales.
{ "key": "motor_enable", "address": 0, "registerType": "Coil"}Códigos de Función: Lectura (01), Escritura Simple (05), Escritura Múltiple (15)
Discrete Inputs (Solo Lectura Booleano)
Sección titulada «Discrete Inputs (Solo Lectura Booleano)»Registros de un solo bit de solo lectura para entradas digitales.
{ "key": "limit_switch", "address": 0, "registerType": "DiscreteInput"}Código de Función: Lectura (02)
Tipos de Datos
Sección titulada «Tipos de Datos»Tipos Enteros
Sección titulada «Tipos Enteros»// Entero con signo de 16 bits (-32768 a 32767){"dataType": "Int16"} // 1 registro
// Entero sin signo de 16 bits (0 a 65535){"dataType": "UInt16"} // 1 registro// Entero con signo de 32 bits{"dataType": "Int32"} // 2 registros
// Entero sin signo de 32 bits{"dataType": "UInt32"} // 2 registros// Entero con signo de 64 bits{"dataType": "Int64"} // 4 registros
// Entero sin signo de 64 bits{"dataType": "UInt64"} // 4 registrosTipos de Punto Flotante
Sección titulada «Tipos de Punto Flotante»// Float de 32 bits (4 bytes){"dataType": "Float32"} // 2 registros
// Float de 64 bits (8 bytes){"dataType": "Float64"} // 4 registrosTipos de Cadena
Sección titulada «Tipos de Cadena»// Carácter ASCII (1 byte por registro){"dataType": "AsciiChar"} // 1 registroOrden de Bytes y Palabras
Sección titulada «Orden de Bytes y Palabras»Los dispositivos Modbus pueden usar diferentes ordenamientos de bytes y palabras. Configúralos para que coincidan con tu dispositivo:
Orden de Bits (Orden de Bytes)
Sección titulada «Orden de Bits (Orden de Bytes)»{ "defaultBitOrder": "BigEndian" // o "LittleEndian"}- BigEndian: Byte más significativo primero (por defecto, más común)
- LittleEndian: Byte menos significativo primero
Orden de Palabras
Sección titulada «Orden de Palabras»Para valores multi-registro (32-bit, 64-bit):
{ "defaultWordOrder": "HighFirst" // o "LowFirst"}- HighFirst: Palabra alta primero (por defecto)
- LowFirst: Palabra baja primero
Anulación por Variable
Sección titulada «Anulación por Variable»{ "key": "special_value", "address": 10, "registerType": "HoldingRegister", "dataType": "Float32", "bitOrder": "LittleEndian", "wordOrder": "LowFirst"}Configuración Serial RTU
Sección titulada «Configuración Serial RTU»Para conexiones Modbus RTU sobre serial:
{ "endpoint": "/dev/ttyUSB0", "transport": "RTU", "baudRate": 9600, "dataBits": 8, "parity": "None", "stopBits": 1, "timeout": 1000}Parámetros:
baudRate: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200dataBits: 7 u 8parity: None, Even, OddstopBits: 1 o 2timeout: Timeout de lectura en milisegundos
ID de Unidad (Dirección de Esclavo)
Sección titulada «ID de Unidad (Dirección de Esclavo)»Modbus admite múltiples dispositivos en la misma red usando IDs de Unidad:
{ "defaultUnitId": 1 // Por defecto para todas las variables}Anulación por variable:
{ "key": "device2_temp", "address": 0, "registerType": "HoldingRegister", "dataType": "Float32", "unitId": 2 // Anular para esta variable}Casos de Uso Comunes
Sección titulada «Casos de Uso Comunes»1. Lectura de Medidor de Energía
Sección titulada «1. Lectura de Medidor de Energía»{ "type": "ModbusReader", "config": { "endpoint": "192.168.1.50:502", "transport": "TCP", "pollingRate": 5000, "defaultUnitId": 1 }, "variables": [ { "key": "voltage", "address": 0, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "current", "address": 2, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "power", "address": 4, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "energy", "address": 6, "registerType": "InputRegister", "dataType": "Float64" } ]}2. Control de PLC
Sección titulada «2. Control de PLC»{ "type": "ModbusWriter", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "defaultUnitId": 1 }, "variables": [ { "key": "motor_speed", "address": 100, "registerType": "HoldingRegister", "dataType": "UInt16" }, { "key": "motor_start", "address": 0, "registerType": "Coil" }, { "key": "motor_stop", "address": 1, "registerType": "Coil" } ]}Solución de Problemas
Sección titulada «Solución de Problemas»Timeout de Conexión
Sección titulada «Timeout de Conexión»Soluciones:
- Verifica la dirección del endpoint y el puerto
- Verifica la conectividad de red
- Aumenta el valor de timeout
- Verifica que el dispositivo esté encendido y responda
Datos Inválidos
Sección titulada «Datos Inválidos»Soluciones:
- Verifica el orden de bytes (
BigEndianvsLittleEndian) - Verifica el orden de palabras (
HighFirstvsLowFirst) - Confirma que el tipo de datos coincida con la especificación del dispositivo
- Verifica que la dirección del registro sea correcta
Errores de Comunicación RTU
Sección titulada «Errores de Comunicación RTU»Soluciones:
- Verifica las conexiones del cable serial
- Verifica que la velocidad en baudios coincida con el dispositivo
- Confirma la configuración de paridad y bits de parada
- Verifica las resistencias de terminación adecuadas
- Reduce la tasa de sondeo para evitar colisiones en el bus
Mejores Prácticas
Sección titulada «Mejores Prácticas»- Comienza con Solo Lectura: Prueba con Input Registers antes de escribir
- Usa Sondeo Apropiado: No sondees más rápido de lo que el dispositivo puede responder
- Agrupa Registros Consecutivos: Más eficiente que lecturas dispersas
- Documenta el Orden de Bytes: Mantén notas sobre configuraciones específicas del dispositivo
- Prueba IDs de Unidad: Verifica que cada dispositivo responda a su ID de Unidad
Conectores Relacionados
Sección titulada «Conectores Relacionados»- OPC UA - Protocolo industrial alternativo
- Siemens S7 - Comunicación directa con PLC Siemens
- Filter - Filtrar datos Modbus
- SQL Writer - Almacenar datos Modbus en bases de datos