Modbus RTU paso a paso: cómo leer un analizador de red Circutor con QModMaster
Introducción: por qué este experimento
Modbus es uno de esos protocolos que llevan décadas funcionando en la industria sin hacer ruido. Si te dedicas a la automatización, la medida o el mantenimiento eléctrico, antes o después te lo vas a encontrar. Y lo bonito que tiene es que es sencillo de verdad: si entiendes una sola trama, las entiendes todas.
En este post vamos a montar un enlace Modbus RTU desde cero, con hardware real, no sobre un simulador. Vamos a leer un analizador de red profesional (un Circutor CVM-E3-MINI) y vamos a ver byte a byte qué viaja por el cable y qué significa cada cosa.
Al final del experimento sabrás:
- Cómo se cablea físicamente un bus RS-485.
- Cómo se configuran los parámetros de comunicación (baudios, paridad, bits de datos y de stop).
- Cómo se construye una trama Modbus de petición.
- Cómo se interpreta una trama de respuesta.
- Qué es el CRC y por qué cambia en cada mensaje.
- Cómo se aplican las escalas y los formatos de datos.
- Y un descubrimiento físico bonito que me llevé como regalo: cómo distinguir una medida real de una medida fantasma.
En los siguientes enlaces se puede descargar el manual en pdf de este analizador, así como un manual completo sobre Modbus RTU también en pdf.
Descargar archivo (Google Drive)
Así que una vez descargado... Vamos al lío!
El material
El equipo a medir: Circutor CVM-E3-MINI
Es un analizador de red trifásico para carril DIN, de tamaño compacto, muy usado en cuadros eléctricos. Mide tensiones, corrientes, potencias activa, reactiva y aparente, energía consumida y generada, armónicos hasta orden alto, factor de potencia... lo que se le pida.
El modelo concreto que utilizo es el CVM-E3-MINI-FLEX-485-IC: trifásico, con entrada para sensores Rogowski (las pinzas flexibles para corriente), comunicación RS-485 con protocolo Modbus o BACnet, y una salida digital programable como alarma. Se alimenta directamente a 100–240 V CA en sus bornes A1/A2, sin necesidad de fuente externa de continua.

El conversor: USB ↔ RS-485 con chip CH340
Para hablarle al CVM desde un PC necesitamos un conversor que adapte el USB del ordenador al RS-485 del bus de campo. He usado un módulo barato con chip CH340 (entre 3 y 8 euros en cualquier tienda online). El modelo concreto es un ICGOICIC, pero hay docenas equivalentes en el mercado.

Dejo el enlace en Aliexpress por si alguien le quiere echar un vistazo: Módulo de comunicación del convertidor de puerto serie USB a RS485 CH340 PLC puerto serie módulo IO conector de RS-485 - AliExpress 502
Tiene cuatro bornes etiquetados:
- A y B: las dos líneas de datos del RS-485.
- G: la masa de comunicación (GND).
- TR: selección de resistencia de terminación de 120 Ω. Si se puentea con B, se activa la terminación.

El software: QModMaster
Es una herramienta gratuita y portable para Windows que permite hablar Modbus desde el PC. Tiene un monitor de bus donde puedes ver las tramas en hexadecimal byte a byte, lo cual es perfecto para aprender el protocolo desde dentro. Se descarga de SourceForge y no requiere instalación: descomprimes el ZIP y ejecutas el .exe.
El cableado
Tres hilos entre el conversor y el CVM:
| Conversor | CVM | Función |
|---|---|---|
| A | A | Línea A (datos diferenciales) |
| B | B | Línea B (datos diferenciales) |
| G | S | Masa común de comunicación |
Para una prueba en mesa con cable corto (10–20 cm), vale cualquier hilo a mano. Para instalación definitiva, lo correcto es cable de par trenzado apantallado, con los hilos A y B trenzados entre sí y la malla conectada a GND/S. La razón es que RS-485 es un enlace diferencial: cualquier interferencia que entre en uno de los hilos entra también en el otro de manera idéntica, y el receptor diferencial la cancela. Esa inmunidad al ruido depende físicamente del trenzado de los dos hilos.
El truco que evita una hora de frustración
Si no comunica al primer intento, lo más probable es que A y B estén intercambiados respecto al estándar. Los fabricantes de conversores no se ponen de acuerdo con la nomenclatura, y aunque el estándar oficial es claro, muchos módulos van al revés.
Intercambiar A y B no daña nada y resuelve el problema en aproximadamente la mitad de los casos. Es lo primero que hay que probar si hay timeouts. Pero antes de tocar nada, verifica también que el COM, baudios, paridad y bits coinciden en ambos extremos.
La resistencia de terminación
RS-485 es un bus de transmisión que, en cables largos, requiere una resistencia de terminación de 120 Ω en cada extremo para evitar reflexiones de señal. Sin terminación, la señal "rebota" al final del cable y puede llegar a corromper los datos.
Pero para prueba en mesa con cable corto, no hace falta. Las reflexiones son insignificantes a esas distancias. La activamos solo cuando montemos la instalación definitiva, puenteando TR con B en el conversor.


Configurando el CVM
Esto se hace desde el propio display del CVM, navegando hasta el menú de configuración de comunicaciones RS-485. Hay cinco parámetros que tienen que coincidir exactamente entre el equipo y el PC, o no habrá comunicación:
| Parámetro | Valor |
|---|---|
| Protocolo | Modbus RTU (no BACnet) |
| Velocidad | 9600 baudios |
| Nº de periférico | 1 |
| Paridad | nonE (ninguna) |
| Bits de datos | 8 |
| Bits de stop | 1 |
Esta combinación se llama "8N1" y es la más común en Modbus RTU. La frase memorizable es: 9600 8N1, esclavo 1.
¿Por qué sin paridad?
Porque Modbus ya protege la integridad de cada trama con un CRC-16, mucho más robusto que un bit de paridad. La paridad apenas aporta encima del CRC. Pero si trabajas con algún equipo muy quisquilloso con la norma, puede que necesites configurar 8E1 (paridad par con 1 bit de stop) o 8N2 (sin paridad pero con 2 bits de stop). Son equivalentes en bits totales por carácter (11 bits). En este experimento 8N1 funciona perfectamente.
¿Por qué 8 bits de datos?
Porque Modbus RTU es un protocolo binario que transmite bytes de 0 a 255. Con 7 bits no caben (solo van de 0 a 127). La opción "7" del menú solo serviría para el modo Modbus ASCII, que es una variante antigua poco usada. Para Modbus RTU, siempre 8 bits.
El driver del CH340 y QModMaster
Antes de abrir QModMaster, dos cosas:
1. Instalar el driver del CH340. Se descarga el CH341SER.EXE de la web oficial de WCH (wch-ic.com o wch.cn) y se instala. Después, al conectar el conversor al USB, aparecerá en el Administrador de dispositivos como "USB-SERIAL CH340 (COMx)". (Apuntar ese número de COM), es el que pondremos en QModMaster.
2. Descargar QModMaster. Del proyecto en SourceForge (qmodmaster.sourceforge.io). Es un ZIP portable. Descomprimir en una carpeta y ejecutar el .exe. Si Windows SmartScreen avisa, pulsar "Más información → Ejecutar de todos modos" (es software open-source sin firma comercial).

Configurando QModMaster
Una vez abierto QModMaster, hay que ir al menú Options → Modbus RTU y poner exactamente lo mismo que en el CVM:
| Campo | Valor |
|---|---|
| Serial Port | COMx (el del CH340) |
| Baud | 9600 |
| Data Bits | 8 |
| Stop Bits | 1 |
| Parity | None |
| Timeout | 1000 ms (o ≥ 200) |
Y dos ajustes globales muy importantes para evitar dolores de cabeza:
Base Address = 0
Por defecto QModMaster usa "Base Addr = 1", que es la nomenclatura clásica de PLC (los famosos registros 4xxxx). Pero el manual de Circutor da las direcciones empezando por 0x00. Si pones Base Addr a 0 (en Options), la dirección que escribes en pantalla coincide exactamente con la del manual. Mucho menos confuso.
Endian = Big
Cuando un valor de 32 bits ocupa 2 registros consecutivos de 16 bits, hay que decidir cuál es la mitad alta y cuál la baja:
- Big-endian: el primer registro es la mitad alta, el segundo la mitad baja.
- Little-endian: al revés.
Circutor usa Big-endian, que es lo más común. Si dejas QModMaster en Little, los valores grandes te saldrán al revés (números enormes y absurdos cuando deberías ver decenas o cientos).
Direcciones en Hex
En la ventana principal, junto al campo "Start Address" hay un desplegable Dec/Hex. Cámbialo a Hex. Así introduces las direcciones tal cual las da el manual, sin tener que convertir mentalmente a decimal cada vez.

La primera lectura: tensión de fase L1
Vamos a leer la tensión entre L1 y neutro de la red eléctrica. El manual de Circutor dice que V1 está en la dirección 0x00, ocupa 2 registros de 16 bits (32 bits totales) y viene con escala V × 10.
Configuración en QModMaster:
| Campo | Valor |
|---|---|
| Slave Addr | 1 |
| Function Code | Read Input Registers (0x04) |
| Start Address | 0 (en Hex) |
| Number of Registers | 2 |
| Data Format | Dec |
Pulsamos Connect (icono del enchufe) y luego Read (icono de leer). Si todo va bien, aparecen dos números en la rejilla:
- Registro 0:
0 - Registro 1:
2304
Y en el Bus Monitor (que se abre desde View → Bus Monitor), vemos la trama Modbus real:

La anatomía de una trama Modbus
Ahora viene la parte bonita. Vamos a destripar la trama byte a byte.
La petición (Tx)
01 04 00 00 00 02 71 CB
| Byte | Valor | Significado |
|---|---|---|
| 1 | 01 | Dirección del esclavo (nuestro CVM nº 1) |
| 2 | 04 | Código de función (Read Input Registers) |
| 3–4 | 00 00 | Dirección inicial del primer registro (0x0000) |
| 5–6 | 00 02 | Número de registros a leer (2) |
| 7–8 | 71 CB | CRC-16 (calculado por QModMaster) |
Solo 8 bytes para decir "esclavo 1, dame los 2 registros que empiezan en 0x0000". Esa es la elegancia del protocolo: cada byte tiene un papel claro y no sobra nada.
La respuesta (Rx)
01 04 04 00 00 09 00 FD D4
| Byte | Valor | Significado |
|---|---|---|
| 1 | 01 | Quién responde (el esclavo 1) |
| 2 | 04 | Eco del código de función |
| 3 | 04 | Cuántos bytes de datos vienen a continuación (4) |
| 4–5 | 00 00 | Registro 0 (mitad alta del valor de 32 bits) |
| 6–7 | 09 00 | Registro 1 (mitad baja del valor de 32 bits) |
| 8–9 | FD D4 | CRC-16 del propio mensaje |
La decodificación a tensión
Los 4 bytes de datos son: 00 00 09 00. Combinados como un entero de 32 bits big-endian= 2304 en decimal.
Aplicando la escala del manual (V × 10):
2304 / 10 = 230,4 V
Y ese es el valor real de la red eléctrica en mi enchufe, en este preciso instante. Acabamos de leer la tensión de red por Modbus.
El CRC: la huella digital del mensaje
El CRC (Cyclic Redundancy Check) es uno de los conceptos peor entendidos de Modbus. Aquí está la idea clave:
El CRC no es algo que se intercambie entre maestro y esclavo. Es una "huella digital" que cada mensaje calcula sobre sus propios bytes, de forma totalmente independiente.
Así, si lanzamos dos peticiones idénticas seguidas:
Tx > 01 04 00 00 00 02 71 CB ← petición 1
Rx > 01 04 04 00 00 08 C0 FC 14 ← respuesta 1 (V1 = 224,0 V)
Tx > 01 04 00 00 00 02 71 CB ← petición 2 (igual a la primera)
Rx > 01 04 04 00 00 08 C7 BD D6 ← respuesta 2 (V1 = 224,7 V)
Fíjate en algo curioso: el CRC de la petición es siempre 71 CB porque los bytes de la petición son idénticos. Pero el CRC de la respuesta cambia (FC 14 la primera vez, BD D6 la segunda) porque el dato (08 C0 vs 08 C7) ha cambiado entre lecturas.
Ese es el comportamiento natural de un checksum: mismos bytes de entrada, mismo CRC. Cualquier cambio en los datos, CRC distinto.
Cómo se usa para detectar errores
Cuando una trama llega al receptor, este:
- Toma todos los bytes que recibió, excepto los dos últimos (que son el CRC del mensaje).
- Calcula su propio CRC sobre esos bytes.
- Lo compara con los dos bytes finales del mensaje.
- Si coinciden → mensaje íntegro, lo procesa. Si no → mensaje corrupto, lo descarta.
Imagina que el ruido eléctrico corrompiera el byte C7 y se convirtiera en C8 durante la transmisión. El esclavo enviaría su CRC calculado sobre C7, pero al llegar al PC, QModMaster recalcularía sobre C8 y obtendría un CRC distinto. Detectaría el error y descartaría la trama en lugar de mostrarte una tensión falsa.
El CRC-16 detecta esencialmente cualquier corrupción posible en una trama corta como las de Modbus. Por eso en Modbus no hace falta usar paridad: el CRC ya hace su trabajo, y mucho mejor.
Leyendo la frecuencia
Para consolidar el método, leamos otra variable: la frecuencia de red, que está en la dirección 0x28 con escala Hz × 10.
Cambiamos solo el Start Address (Hex) a 28, dejando los demás parámetros iguales. Resultado:
Tx > 01 04 00 28 00 02 F1 C3
Rx > 01 04 04 00 00 01 F3 BA 51
Datos: 00 00 01 F3 = 0x01F3 = 499.
Aplicando la escala: 499 / 10 = 49,9 Hz.
Esa es la frecuencia real de la red ibérica en este instante. Red Eléctrica de España la mantiene clavada en 50,00 Hz ± 0,05 Hz casi siempre, así que ver valores entre 499 y 501 es lo esperable y demuestra que la lectura es correcta.
Lectura en bloque: 32 registros de una sola petición
La verdadera potencia de Modbus está aquí: una sola petición puede leer un bloque grande de registros consecutivos. En vez de hacer 16 peticiones para obtener 16 variables, se hace una sola petición que las trae todas juntas.
Configuramos Start Address = 0 (Hex) y Number of Registers = 32. El manual del CVM permite hasta 60 registros (30 variables) por trama, así que 32 está dentro del límite.
Esta es la tabla de qué hay en cada par de celdas:
| Celdas | Dir hex | Magnitud | Símbolo | Escala |
|---|---|---|---|---|
| 0–1 | 00–01 | Tensión L1 | V1 | V × 10 |
| 2–3 | 02–03 | Corriente L1 | A1 | mA |
| 4–5 | 04–05 | Potencia activa L1 | kW1 | W |
| 6–7 | 06–07 | Potencia reactiva L1 | kvar1 | var |
| 8–9 | 08–09 | Factor de potencia L1 | PF1 | × 100 |
| 10–11 | 0A–0B | Tensión L2 | V2 | V × 10 |
| 12–13 | 0C–0D | Corriente L2 | A2 | mA |
| 14–15 | 0E–0F | Potencia activa L2 | kW2 | W |
| 16–17 | 10–11 | Potencia reactiva L2 | kvar2 | var |
| 18–19 | 12–13 | Factor de potencia L2 | PF2 | × 100 |
| 20–21 | 14–15 | Tensión L3 | V3 | V × 10 |
| 22–23 | 16–17 | Corriente L3 | A3 | mA |
| 24–25 | 18–19 | Potencia activa L3 | kW3 | W |
| 26–27 | 1A–1B | Potencia reactiva L3 | kvar3 | var |
| 28–29 | 1C–1D | Factor de potencia L3 | PF3 | × 100 |
| 30–31 | 1E–1F | Potencia activa trifásica | kW III | W |
Una observación importante para no liarse: el mapa está organizado por fase, no por magnitud. Es decir, primero van todas las medidas de L1 (V, I, kW, kvar, PF), luego todas las de L2, y luego las de L3. No es "primero todas las tensiones, luego todas las corrientes". Es importante tenerlo claro para interpretar bien la rejilla.
El descubrimiento: las medidas fantasma
Aquí viene la mejor parte del experimento. La que merece ser contada en un blog y que enseña metrología real.
Mi montaje físico en este experimento era el siguiente:
- Alimentación auxiliar del CVM: 230 V CA conectados en A1/A2. ✅
- Una sola fase de medida de tensión: L1 conectado a la red. ✅
- Sondas de corriente Rogowski: NINGUNA conectada (el pedido no había llegado todavía). ❌
Sin embargo, en la lectura aparecen valores como estos:
| Magnitud | Valor leído |
|---|---|
| V1 | 229,4 V |
| I1 | 17,85 A |
| kW1 | 4079 W |
| kvar1 | 369 var |
| PF1 | 0,99 |
| V2 | 1146 V |
| V3 | 1198 V |
| kW III | 4079 W |
¡4 kW de potencia activa sin ninguna sonda de corriente conectada! ¿Qué demonios está pasando?
Esta observación es metrología pura, y entenderla cambia para siempre cómo miras los datos de cualquier instrumento.
Los voltajes fantasma de L2 y L3 (1146 V y 1198 V)
Las entradas de tensión del CVM son diferenciales y de alta impedancia (400 kΩ). Cuando se dejan al aire (sin conectar nada), esos pines flotan eléctricamente. Y al estar físicamente a centímetros de la entrada V1 (que sí está energizada con 230 V) dentro de la propia carcasa del CVM, recogen acoplamiento capacitivo parásito: la tensión de L1 se "induce" en ellas a través del aire.
El CVM, fielmente, mide lo que llega a sus pines. Y le llega una tensión fantasma del orden de 1100–1200 V, que en realidad no existe en ningún sitio físicamente. No es un fallo del aparato: es física básica de entradas de alta impedancia al aire.
La corriente fantasma de L1 (17,85 A)
Aquí pasa lo mismo, pero mucho más sutil. La sensibilidad esperada en la entrada Rogowski del CVM es de 100 µV/A. Es decir, el CVM espera medir microvoltios en esa entrada por cada amperio de corriente. ¡Microvoltios!
Cuando dejamos esa entrada al aire, basta con 1,785 mV de pickup parásito para que el CVM calcule "17,85 A". Y obtener 1,785 mV de acoplamiento capacitivo entre pistas adyacentes con 230 V al lado en la PCB del propio CVM es absolutamente trivial.
Las potencias fantasma (kW1, kvar1, PF1)
Y aquí la coherencia matemática del CVM engaña. Como las fórmulas internas se aplican sobre las entradas tal cual son recibidas, los valores cuadran al milímetro entre sí:
S aparente = V × I = 229,4 × 17,85 = 4095 VA
S calculada = √(P² + Q²) = √(4079² + 369²) = 4096 VA ✓
PF = P / S = 4079 / 4096 = 0,9959 → 0,99 ✓
El triángulo de potencias activa-reactiva-aparente encaja perfectamente. El factor de potencia coincide. Todo parece físicamente correcto.
Pero no es real. El CVM hace su trabajo perfectamente: aplica las fórmulas correctas a las entradas que recibe. No sabe que esas entradas son ruido. No sabe que no hay sondas conectadas. El triángulo cuadra porque está calculado, no porque corresponda a una situación física real.
Esto, en metrología, se llama garbage in, garbage out: la salida de un instrumento solo es tan buena como sus entradas.
La pista que delata el fantasma
Hay un detalle físicamente revelador: solo L1 tiene fantasmas completos. Las medidas I2, I3, kW2, kW3, kvar2 y kvar3 valen todas cero. ¿Por qué?
Porque dentro del CVM, las entradas V e I de cada fase están físicamente adyacentes en la PCB. Solo L1 tiene tensión real aplicada, así que solo la entrada Rogowski de L1 tiene una fuente vecina con la que acoplarse capacitivamente. Las entradas Rogowski de L2 y L3 están aisladas de cualquier fuente activa y permanecen limpias.
Es decir, el acoplamiento capacitivo nos permite deducir cómo está construido internamente el CVM: los canales están agrupados por fase (cada V con su I correspondiente), no por tipo de magnitud. Un hallazgo bonito que solo es visible si haces este experimento con las entradas al aire.
Lecciones aprendidas
Después de este experimento puedes afirmar varias cosas que no son obvias para alguien que solo ha leído sobre Modbus:
1. Modbus RTU es un protocolo elegantemente simple. Una petición de 8 bytes y una respuesta de longitud variable, con un CRC al final para detectar errores. Eso es todo. Si entiendes una trama, las entiendes todas.
2. Las direcciones de protocolo empiezan en 0, pero algunos programas usan numeración 1-based. Este desfase es la primera fuente de errores. Lo más limpio es configurar todo en 0-based (Base Addr = 0 en QModMaster) y trabajar siempre en hexadecimal para coincidir con el manual del fabricante.
3. La endianness de palabra hay que verificarla por cada fabricante. Cuando un valor de 32 bits ocupa 2 registros de 16 bits, hay que saber en qué orden van. Circutor usa Big-endian. Otros usan Little. Si los números salen absurdos, sospecha de la endianness.
4. Las escalas son cruciales. Olvidar dividir V1 entre 10 te lleva a una "tensión" de 2294 V que es absurda. El manual del fabricante es la única fuente fiable para las escalas. Apunta cada escala junto a cada dirección y no te fíes de la memoria.
5. El CRC-16 es tan robusto que la paridad sobra. En Modbus RTU, configura "sin paridad" sin remordimientos. El CRC ya protege la integridad mucho mejor que cualquier bit de paridad.
6. Un instrumento de medida es solo tan bueno como sus entradas. Si dejas inputs al aire, el instrumento te devolverá lecturas que parecen reales, internamente consistentes, pero que no se corresponden con nada físico. Aprender a distinguir medida real de medida fantasma es metrología pura, y se aplica a cualquier sensor, no solo a Modbus.
7. La física se cuela siempre en los datos. El acoplamiento capacitivo entre entradas adyacentes en una PCB es un fenómeno real y predecible, y entender qué tipo de fantasma produce te permite diagnosticar problemas reales en instalaciones. Una "tensión fantasma" en L2 te dice que esa fase no está bien conectada, por ejemplo.
Próximos pasos
Con esto sabemos hablar Modbus RTU con el CVM-E3-MINI. Los siguientes pasos serán:
- Automatizar las lecturas con Node-RED corriendo en una Raspberry Pi, en vez de leer manualmente con QModMaster.
- Pasar de Modbus RTU sobre RS-485 a Modbus TCP sobre Ethernet mediante un conversor RS485/TCP, para integrarlo con redes industriales modernas.
- Almacenar las medidas en una base de datos de series temporales (InfluxDB o similar) para análisis histórico.
- Visualizar los datos en Grafana con paneles configurables.
- Notificar alarmas por Telegram cuando se superan umbrales de consumo o picos de potencia.
- Generar un dashboard SVG que sirva de SCADA simplificado.
Pero esos serán los siguientes posts. Por ahora, levanta la copa: acabas de comunicar con un equipo industrial profesional desde cero, byte a byte, y entiendes cada uno de esos bytes.
Si te ha resultado útil este post o tienes dudas sobre Modbus, escríbeme a info@plc32control.com.
Primera consulta sin compromiso.
Cuéntame qué equipo tienes y qué quieres controlar o medir.