
Modbus es un protocolo de comunicación que fue diseñado en 1979 y desde su invención ha ido ganando popularidad hasta convertirse hoy día en uno de los estándares de comunicación industrial. Las principales virtudes de este protocolo son que permiten tener un gran número de equipos conectados a un único receptor a trabes de una única conexión. Para realizar dicha tarea cada sensor recibe un número identificativo (ID) y lo que hace el receptor es enviar un mensaje por de la red y pedir la información deseada al equipo, usando para ello su ID, así el resto de equipos que están en la red ignoran todos los mensajes que no lleven su ID.
Una vez conocemos (brevemente) en que consiste el protocolo ModBus, veamos como podemos usar la librería de python ‘pymodbus’, para comunicar un sensor y el ordenador de manera muy fácil y sencilla. A Continuación vamos a ver como obtener la lectura de un sensor de humedad y temperatura.
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
cliente = ModbusClient(method="rtu", port="/dev/ttyUSB0", stopbits=1, bytesize=8, parity='N', baudrate=9600, timeout=1)
result = cliente.read_input_registers(1, 2, unit=1)
print(result.registers[0], result.registers[1])
Como es costumbre en python, en la primera linea vamos a importar todas las bibliotecas que vamos a usar en el script. Lo primero que vamos a hacer será configurar muestra conexión con el sensor. A excepción de la variable ‘port’, ‘method’ y ‘timeout’ el resto de variables vienen marcadas por el propio sensor. ‘port’ es el número de puerto en el que está conectado el sensor (en caso de usar Windows es el famoso ‘COMX’). En este caso usamos como método de conexión ‘RTU’ lo que significa que usamos una comunicación serial, en el caso de usar un cable de red Ethernet el método utilizado sería el ‘TCP’. ‘timeout’ es simplemente el número de segundos que mantendremos la conexión a la ‘espera’ de recibir los datos que se han pedido al sensor.
Al tener definida la conexión es momento de pedir al equipo que nos de los valores de temperatura y humedad. Para llevar a cabo dicha acción usamos la función read_input_registers(). En este caso tenemos que indicar el registro inicial al que queremos empezar a leer, ‘1’ (del manual del sensor obtenemos que la temperatura se almacena en el primer registro y la humedad en el segundo). A continuación indicamos la catidad de registros a leer ‘2’, puesto que queremos tanto el valor de temperatura como humedad. Finalmente tenemos que indicar el ID del equipo al que estamos haciendo la petición, ‘unit=1’. Al hacer esto vamos a tener una lista con todos los valores almacenados en la variable result. Para poder tener los valores en las unidades correctas tenemos que dividir cada valor de la lista por 100.
De esta manera tendremos los valores de temperatura y humedad en el formato correcta. En este punto si quisiéramos podríamos utilizar un bucle while para obtener datos periódicamente y representarlos gráficamente de la misma manera que vimos en una entrada posterior.
Como veis con esta biblioteca de python es muy fácil poder utilizar sensores con protocolo ModBus y poder así almacenar los datos o representarlos gráficamente para hacer un seguimiento en tiempo real de los valores. Espero que esta entrada os sea de ayuda y no dudes en dejar vuestros comentarios.
Saludos y hasta la próxima aventura.
Deja un comentario