[Post] Cómo monitorizar un sensor con Ivy IoT Gateway en 4 pasos

[Post] Cómo monitorizar un sensor con Ivy IoT Gateway en 4 pasos

| By:

En este artículo se explica como monitorizar un transductor digital multiparamétrico que mide intensidad, voltaje, potencia y frecuencia de un circuito DC

Ivy IoT Gateway es una pasarela de datos de fácil uso que permite interactuar de forma remota con dispositivos mediante el protocolo industrial Modbus.

En este ejemplo vamos a usar Ivy IoT Gateway para monitorizar un transductor digital multiparamétrico que mide intensidad, voltaje, potencia y frecuencia de un circuito DC.

Antes de empezar debemos conocer la información básica del dispositivo con el que queremos interactuar.

En este caso:

Sensor: Digital transducer

Modelo: CE-AD11B-32ES5

Descripción: Transductor digital multiparamétrico que mide intensidad, voltaje, potencia y frecuencia de un circuito DC.

Documentación: https://www.ce-transducer.com/product/details/185/103/details

Además es necesaria la información para trabajar con Modbus:

  • ID de esclavo: Cada sensor es identificado por un número. Si tenemos varios sensores conectados será la forma de identificar a cada uno.
  • Dirección de los datos: Cómo en la mayoría de los dispositivos que soportan Modbus, el sensor dispone de varias direcciones de memoria donde almacenan el valor de cada registro. Los registros que vamos a leer, así cómo su dirección, son los siguientes:
Address of register (Hex) Contents of register
0x0010 Voltage of phase A
0x0011 Current of phase A
0x0012 Voltage of phase B
0x0013 Current of phase B
0x0014 Voltage of phase C
0x0015 Current of phase C
0x0016 P: active power
0x0017 Q: reactive power
0x0018 Cos: power factor
0x0019 F: frequency

Trama para leer registros:

  • 1 Byte: Addres of slave equipment
  • 1 Byte: Function code
  • 2 Byte: Address of the first register
  • 2 Byte: Quanty of registers
  • 2 Byte: CRC

Trama devuelta al leer registros:

  • 1 Byte: Addres of slave equipment
  • 1 Byte: Function code
  • 1 Byte: Byte count
  • 2*N Byte: Data section (contents of registers)
  • 2 Byte: CRC

Con la información anterior, nos disponemos a usar la librería que incorpora Ivy IoT Gateway para facilitar todas las comunicaciones con el protocolo Modbus.

Paso 1: Conectar Ivy IoT Gateway al sensor

Conectaremos Ivy IoT Gateway al sensor usando el adaptador RJ11-RS485. Encuentre en la wiki cómo realizar esta conexión físicamente.

Paso 2: Conectar nuestro PC a Ivy IoT Gateway

Situados ambos en la misma red, nos conectaremos a Ivy IoT Gateway mediante ssh para crear nuestro programa y, posteriormente, ejecutarlo. Puedes ver como se hace aquí.

Paso 3: Creación del programa

Puede crear el programa directamente en Ivy IoT Gateway, mediante el editor vi, o crearlo en su PC y transferirlo posteriormente a Ivy IoT Gateway mediante sftp.

Para poder usar el módulo de Modbus debemos de importarlo y crear una instancia del mismo, para ello:

from ivy_gw.modules.modbus import modbus
modbus = modbus.Modbus()

Nuestro programa se va a dividir en tres secciones para que sea más entendible.

Creación de la trama (tx)

La trama es el conjunto de bytes que va a recibir nuestro sensor. En ella se define a quien va dirigida, así cómo la acción y valores necesarios para que el sensor la interprete.

En este ejemplo vamos a leer la corriente de la fase A (0x0011), por lo que la trama enviada corresponde a:

slave = '\x01'
code_read = '\x03'
start_address = '\x00\x11'
num_of_registers = '\x00\x01'

tx = slave + code_read + start_address + num_of_registers
tx += modbus.get_crc(tx)

El valor de tx es, para este caso:

tx = '\x01\x03\x00\x11\x00\x01\xD4\x0F'

Envío de la trama

El módulo de Modbus que incorpora Ivy IoT Gateway contiene un método para enviar la trama anteriormente creada. Para ello:

rx = modbus.raw(tx)

Este método nos devuelve otra trama con la respuesta (rx).

Entendiendo la respuesta (rx)

Si el sensor nos ha respondido correctamente, en rx tendremos una trama con la respuesta del sensor. Un ejemplo de respuesta, podría ser la siguiente:

rx = '\x01\x03\x02\x80\x00\xD9\x84'

Dónde:

  • \x01 Es la dirección del esclavo
  • \x03 Es la función de leer registros
  • \x02 Es el número de bytes de los datos recibidos
  • \x80\x00 Es el valor del registro solicitado
  • \xD9\x84 Es el CRC

En este caso el valor del dato solicitado es 0x8000 => 128

Puede ver el código completo de este programa aquí

Paso 4: Ejecute su programa

Una vez realizado el programa anterior, simplemente ejecute:

python your_program.py

Realizado todo lo anterior, ya tiene su primer programa de monitorización con Ivy IoT Gateway.