Ir al contenido principal

Conectar un Eastron SDM230 a Ubidots por Modbus RTU

Guía para leer voltaje, corriente, potencia y kWh de un Eastron SDM230 por Modbus RTU con Node-RED y enviarlos a Ubidots. Incluye el mapa de registros.

Escrito por Sergio M
Medidor de energía monofásico Eastron SDM230 para riel DIN

El Eastron SDM230 es un medidor de energía monofásico para riel DIN que publica voltaje, corriente, potencia activa, factor de potencia y kWh acumulados por RS-485 mediante Modbus RTU. Esta guía incluye el mapa completo de registros de entrada, la conversión IEEE-754 que requieren los valores del medidor y un flujo de Node-RED que envía las lecturas a Ubidots por HTTP.

Las direcciones de registro que aparecen abajo fueron verificadas contra el documento de protocolo Modbus del SDM230 de Eastron. Eastron ha cambiado los mapas de registros entre revisiones de hardware, así que confirme su variante — SDM230-Modbus, SDM230M, V2 o V3 — contra el documento vigente antes de usar una dirección en producción.

Requisitos

  • Una cuenta activa de Ubidots.

  • Un Eastron SDM230 con la salida RS-485 (Modbus).

  • Un maestro Modbus RTU con Node-RED y los nodos node-red-contrib-modbus instalados, además de una interfaz RS-485 USB o integrada.

1. Conecte el medidor y el bus RS-485

Conecte el SDM230 a su red eléctrica de acuerdo con sus requisitos. A continuación se muestra un esquema de conexión breve; para instrucciones detalladas consulte la hoja de datos.

Diagrama de conexión del Eastron SDM230 con los bornes de línea y neutro

Una vez conectadas las líneas de alimentación, conecte el SDM230 al maestro Modbus por la interfaz RS-485. Termine el bus con 120 Ω únicamente en los dos extremos físicos y lleve el par por un ducto separado de los conductores de potencia. Si el medidor no responde, intercambie A y B: el etiquetado no está estandarizado entre fabricantes.

Bornes A y B de RS-485 del SDM230 usados para el bus Modbus RTU

¿Qué baudios, paridad e ID de esclavo usa el SDM230?

De fábrica el SDM230 se comunica a 9600 baudios, sin paridad, un bit de parada y con ID de esclavo 1. Los cuatro parámetros se pueden cambiar desde el panel frontal del medidor o escribiendo los registros de retención de abajo, y el maestro debe coincidir exactamente en los cuatro. Configúrelos en el escritorio antes de instalar el medidor en el tablero: después, detrás de una tapa, es mucho más difícil.

Parámetro

Valor por defecto

Registro de retención

Baudios

9600

40029 (0x001C)

Paridad

Ninguna

40019 (0x0012)

Bits de parada

1

40019 (0x0012)

ID de esclavo

1

40021 (0x0014)

2. Configure el maestro Modbus en Node-RED

Asegúrese de que su instalación de Node-RED tenga el nodo "Modbus Read". Si no es así, consulte la página de node-red-contrib-modbus para el proceso de instalación.

Navegue a la interfaz de Node-RED en su dispositivo maestro Modbus y busque "Modbus" en la paleta de nodos.

Paleta de nodos de Node-RED filtrada por los nodos Modbus

Agregue un nodo "Modbus Read" a su flujo. Una vez colocado, haga doble clic en él y luego en el botón "Add new modbus-client...". Esto mostrará la configuración serial del maestro Modbus:

Configuración serial del cliente modbus en Node-RED

Configure los parámetros seriales para que coincidan con el medidor. En esta guía se usaron los siguientes ajustes:

  • Baudios: 9600.

  • Unit ID / ID de esclavo del medidor: 1.

  • Paridad: ninguna, 1 bit de parada.

Parámetros seriales con 9600 baudios y ID de esclavo 1

Después de guardar, volverá a la configuración del nodo "Modbus Read". Defina FC en FC 4: Read Input Registers, Address en 0 y Quantity en 2 para leer "Voltios de línea a neutro".

Nodo Modbus Read configurado para el registro de entrada 0 del SDM230, voltios de línea a neutro

Mapa de registros Modbus del SDM230 (registros de entrada)

Todas las mediciones del SDM230 están en registros de entrada, que se leen con el código de función 04. Hay tres reglas que importan:

  • La dirección Modbus es el número de registro menos 30001. La energía activa total es el registro 30343, así que la dirección es 342 (0x0156).

  • Cada valor es un flotante IEEE-754 de 32 bits que ocupa dos registros consecutivos, por lo que siempre debe solicitar una cantidad de 2. Una dirección o cantidad impar cae a la mitad de un valor y el medidor devuelve una excepción.

  • El orden de palabras por defecto es el registro más significativo primero. Se puede cambiar con el registro de retención "Register Order" del medidor.

Parámetro

Registro

Dirección (hex)

Dirección (dec)

Unidad

Voltios de línea a neutro

30001

0x0000

0

V

Corriente

30007

0x0006

6

A

Potencia activa

30013

0x000C

12

W

Potencia aparente

30019

0x0012

18

VA

Potencia reactiva

30025

0x0018

24

VAr

Factor de potencia

30031

0x001E

30

Ángulo de fase

30037

0x0024

36

°

Frecuencia

30071

0x0046

70

Hz

Energía activa importada

30073

0x0048

72

kWh

Energía activa exportada

30075

0x004A

74

kWh

Energía reactiva importada

30077

0x004C

76

kVArh

Energía reactiva exportada

30079

0x004E

78

kVArh

Energía activa total

30343

0x0156

342

kWh

Energía reactiva total

30345

0x0158

344

kVArh

¿Por qué hay que convertir la lectura a un flotante?

Porque el medidor devuelve un flotante IEEE-754 de 32 bits repartido en dos registros de 16 bits, y el nodo Modbus Read entrega esos bytes crudos en lugar de un número. Los dos registros deben recombinarse en una palabra de 32 bits y reinterpretarse como flotante para que el valor signifique algo. Eso es lo que hace la función de abajo, con el orden por defecto del medidor (registro más significativo primero).

Arrastre y suelte un nodo "function" por cada lectura y conéctelo a la salida del nodo "Modbus Read" correspondiente:

Tres nodos Modbus Read en el flujo de Node-RED

Nodos Modbus Read conectados a nodos function en Node-RED

Haga doble clic en cualquiera de los nodos "function" y pegue el siguiente código. Solo tiene que reemplazar el nombre de la variable:

// Acceder al msg.payload que contiene el objeto
const bufferArray = msg.payload.buffer;

// Extraer bytes del array de buffer
const highByteFirstRegister = bufferArray[0] & 0xFF;
const lowByteFirstRegister = bufferArray[1] & 0xFF;
const highByteSecondRegister = bufferArray[2] & 0xFF;
const lowByteSecondRegister = bufferArray[3] & 0xFF;

// Combinar bytes en un entero de 32 bits (big-endian)
const combinedValue = (highByteFirstRegister << 24) |
(lowByteFirstRegister << 16) |
(highByteSecondRegister << 8) |
lowByteSecondRegister;

// Convertir a número de punto flotante usando el formato IEEE 754
const float32Buffer = new ArrayBuffer(4);
const float32View = new DataView(float32Buffer);
float32View.setUint32(0, combinedValue, false); // false para big-endian

// Reemplace el nombre de la variable aquí en lugar de "voltage"
const voltage = float32View.getFloat32(0, false); // false para big-endian

// Reemplace el nombre de la variable aquí en lugar de "voltage" (la clave)
return { payload: { voltage: voltage } };

Haga lo mismo con los demás nodos function, cambiando los nombres de las variables según los registros que esté leyendo. Luego agregue otro nodo "function" y conecte la salida de los nodos anteriores a su entrada:

Nodos function unidos al nodo que define el encabezado de autenticación de Ubidots

Haga doble clic en ese nodo y agregue lo siguiente, reemplazando UBIDOTS-TOKEN por su token de Ubidots:

msg.headers = {
'Content-Type' : 'application/json',
'X-Auth-Token' : 'UBIDOTS-TOKEN'
}
return msg;

Nota: Las versiones más recientes de Node-RED implementan la configuración de encabezados de forma nativa, por lo que este paso puede no ser necesario.


3. Envíe los datos a Ubidots

Arrastre y suelte un nodo "http request" y un nodo "debug" y conéctelos a los nodos anteriores como se muestra a continuación:

Flujo completo de Node-RED con los nodos http request y debug

Haga doble clic en el nodo "http request" y complete los campos así:

  • Método: se requiere POST para enviar datos.

  • URL: https://industrial.api.ubidots.com/api/v1.6/devices/<your-device-label> — reemplace el marcador por la etiqueta de su dispositivo.

Nodo http request de Node-RED enviando datos a la API de Ubidots

Haga clic en "Done" para guardar y luego en "Deploy". Verá un nuevo dispositivo en Ubidots con las variables mencionadas:

Dispositivo en Ubidots mostrando las variables del SDM230 recibidas por Modbus

Si además lee la potencia activa (registro 30013) y la potencia reactiva (30025) y las etiqueta como active-power y reactive-power, el widget Power Diagram dibujará el diagrama de cuatro cuadrantes de este medidor, que es también la forma más rápida de comprobar que la instalación quedó bien conectada.

Solución de problemas

¿Por qué el medidor no devuelve nada, o devuelve valores evidentemente incorrectos?

Casi todos los problemas de Modbus con el SDM230 se deben a una de seis causas. Revíselas en orden:

  • Está leyendo registros de retención en lugar de registros de entrada. Las mediciones son registros de entrada: código de función 04, no 03.

  • Dirección o cantidad impar. Los flotantes ocupan dos registros; tanto la dirección inicial como la cantidad deben ser pares.

  • Dirección desplazada por el offset del registro. La dirección es el número de registro menos 30001, no el número de registro.

  • Ajustes seriales que no coinciden. Baudios, paridad, bits de parada e ID de esclavo deben coincidir exactamente con el medidor.

  • A y B intercambiados. No están estandarizados entre fabricantes; intercambiarlos no representa riesgo.

  • Orden de palabras incorrecto. Si los valores llegan como NaN, infinito o un número absurdamente pequeño, los dos registros se están combinando en el orden equivocado.

Preguntas frecuentes

¿Qué registro Modbus contiene la energía total del SDM230?

La energía activa total es el registro 30343, dirección Modbus 0x0156 (342 en decimal), en kWh. Como todos los demás valores, es un flotante de 32 bits que ocupa dos registros, así que lea una cantidad de 2 a partir de la dirección 342.

¿El SDM230 usa registros de entrada o registros de retención?

Ambos, para cosas distintas. Todas las mediciones son registros de entrada (3xxxx), que se leen con el código de función 04. Los registros de retención (4xxxx) contienen solo configuración — baudios, paridad, dirección de nodo y orden de registros — y se leen con el código 03 y se escriben con el código 16.

Mis valores llegan como NaN o como un número muy pequeño. ¿Qué está pasando?

Esa es la firma de un desajuste en el orden de bytes o de palabras, no de una falla de cableado. El SDM230 envía primero el registro más significativo. Si su maestro asume lo contrario, intercambie las dos palabras de 16 bits antes de reinterpretar el resultado como flotante, o cambie el registro de retención "Register Order" del medidor para que coincida con su maestro.

¿Puedo poner varios medidores SDM230 en un mismo bus RS-485?

Sí. Modbus admite direcciones de nodo del 1 al 247, y el límite práctico de un segmento del SDM230 es de 32 nodos sobre hasta 1200 m. Asigne a cada medidor un ID de esclavo único, mantenga la misma velocidad en baudios en todo el bus y termine con 120 Ω solo en los dos extremos físicos.

¿Es obligatorio usar Node-RED para llegar a Ubidots?

No. Aquí se usa Node-RED porque es gratuito y corre en casi cualquier equipo, pero sirve cualquier maestro Modbus capaz de hacer una petición HTTP o MQTT. Si prefiere un gateway de hardware en lugar de uno de software, vea el gateway Teltonika TRB140 o, para un enlace RS-485 celular, el SenseCAP Sensor Hub 4G.

¿El SDM230 es solo monofásico?

Sí. El SDM230 es un medidor monofásico que mide un circuito de línea a neutro. Para instalaciones trifásicas, el SDM630 de Eastron expone registros de entrada IEEE-754 del mismo estilo con valores por fase, y la función de conversión de Node-RED de esta página aplica sin cambios.


Las direcciones de registro y los valores de comunicación por defecto de esta página se verificaron por última vez contra el documento de protocolo Modbus del SDM230 de Eastron en agosto de 2026.

¿Ha quedado contestada tu pregunta?