Modbus es un protocolo de capa de aplicación utilizado por numerosos equipos industriales. Un cliente envía una petición y un servidor responde según el código de función. El protocolo define mensajes y zonas de datos, pero cada fabricante determina dónde se encuentra una medición. Para un dispositivo real necesita consultar su mapa de registros.Los códigos de función y los bytes de las tramas se indican en hexadecimal: 0F equivale a 15 y 10 a 16 en decimal.
1. Las cuatro zonas de datos
- Coils: bits de lectura y escritura; códigos habituales 01, 05 y 0F.
- Discrete Inputs: bits de solo lectura; código 02.
- Input Registers: palabras de 16 bits de solo lectura; código 04.
- Holding Registers: palabras de 16 bits que el modelo permite leer y escribir; lectura 03, escritura simple 06 y múltiple 10. Un equipo puede restringir la escritura de registros concretos.
03 y 04 leen palabras de 16 bits, pero de zonas diferentes. Revise en el manual el código de función, número de registro, tipo, escala y permisos.
2. Modbus RTU frente a Modbus TCP
RTU suele funcionar por un enlace serie como RS-485. La trama incluye dirección de estación, código y datos, y CRC16. Cada equipo del mismo bus necesita una dirección distinta; velocidad, bits de datos, paridad y bits de parada deben coincidir. El byte menos significativo del CRC se transmite primero.
Modbus TCP utiliza TCP/IP, normalmente el puerto 502. La cabecera MBAP de siete bytes contiene identificador de transacción, identificador de protocolo, longitud e identificador de unidad. En TCP no se añade el CRC final de RTU. Si hay una pasarela TCP/serie, el identificador de unidad suele seleccionar el dispositivo situado detrás.
3. Por qué 40001 puede equivaler a dirección cero
La etiqueta 40001 suele representar el primer Holding Register. El 4 inicial indica la zona; la petición transmite un desplazamiento que empieza en cero. Con esta convención, 40001 corresponde a función 03 y dirección inicial 0000; 40002 a 0001. Manuales y programas pueden mostrar números desde uno o desplazamientos desde cero. Aclare el formato antes de escribir.
Cada registro contiene 16 bits. Un entero o flotante de 32 bits suele ocupar dos registros, pero el orden de esas palabras depende del equipo. Una escala como dividir la temperatura entre diez también la define el fabricante, no el protocolo.
4. Ejemplo de lectura de dos Holding Registers
Supongamos que temperatura y humedad están en 40001 y 40002, con valores brutos 250 y 400 y un factor documentado de 0,1. La función 03 lee dos registros desde el desplazamiento cero. Los valores y unidades son solo ilustrativos.
PDU request: 03 00 00 00 02
PDU response: 03 04 00 FA 01 90
TCP request: 00 01 00 00 00 06 01 03 00 00 00 02
TCP response: 00 01 00 00 00 07 01 03 04 00 FA 01 90
En la petición PDU, 03 es el código, 00 00 el desplazamiento inicial y 00 02 la cantidad. En la respuesta, 04 indica cuatro bytes de datos; 00 FA representa 250 y 01 90 representa 400. Con la escala supuesta obtenemos 25,0 °C y 40,0 %. El ejemplo TCP usa identificador de transacción 0001, protocolo 0000 y unidad 01; las longitudes MBAP son 0006 y 0007. En RTU se añade al mismo PDU una dirección de estación y un CRC16 calculado correctamente.
5. Primera conexión paso a paso
- Empiece con un valor documentado que permita lectura y evite escribir. Compruebe interfaz, dirección de estación o IP, puerto y ajustes serie.
- Seleccione zona y función. Determine si su herramienta espera « 40001 » o « desplazamiento 0 ».
- Lea pocos registros, verifique función y número de bytes, e interprete el valor bruto según el manual.
- Ante una espera agotada, revise cableado, red y dirección. 83 02 significa que la función 03 devolvió la excepción 02 (dirección de datos no válida); revise el desplazamiento inicial y la cantidad. No es una medición.
Seguridad y fuentes
Leer y especialmente escribir puede afectar equipos reales. Limite el acceso a la red de producción y no exponga Modbus TCP tradicional directamente a Internet. Evalúe Modbus Security o la separación de redes cuando corresponda.