miércoles, octubre 05, 2016

Python en automatización industrial, un caso concreto

Una de las cosas que hago para ganarme la vida es servir de consultor en automatización industrial. Justo estaba en esos menesteres hace poco cuando me topé con un problema de esos a que nos tiene acostumbrados la crisis económica de nuestros golpeados clientes. Nuestro cliente en cuestión sufrió una falla irrecuperable de un pequeño sistema scada que tenían conectado a una red de controladores PLC en su planta de energía. Sin el scada funcionando, sin recursos como para poner en funcionamiento el ahora muy costoso sistema de adquisición de datos se vieron en la necesidad de empezar a buscar alternativas que al menos pudieran devolverles algo de la funcionalidad perdida. Y aquí es donde la imaginación y tecnologías libres como la de python vienen a jugar un papel importante.

El problema se centraba en leer datos a través de una interfaz serial RS-232 usando el protocolo Modbus RTU, luego guardar esos datos, o más bien guardarlos solamente si alguno de esos datos cambiaba de estado, y finalmente tener alguna herramienta que pudiera analizar los datos guardados para graficar algunas cosas y hacer algunos cálculos de índices de mantenimiento que tenían que ver con las máquinas que controlaban los PLC.

Debido a que no eran muchos los datos a leer y a que era solamente una tabla de un solo PLC decidimos desarrollar unos scripts en python para rapidamente tener un prototipo funcional para mostrarlo al cliente.

Un rato en google y desarrollamos un ambiente de desarrollo en una laptop en windows de esta manera:
  1. instalamos python 3.4 (esta versión es la que mejor funciona con todo lo que uso en este proyecto)
  2. con pip le agregamos virtualenv para crear un ambiente virtual limpio, en mi caso tengo varias versiones de python instaladas y lo más sano es usar virtualenv.
  3. ya con virtualenv creamos el directorio de trabajo y activamos.
  4. instalamos pymodbus3 usando pip.
  5. instalamos también pymongo para la base de datos usando pip
  6. finalmente instalamos PyGObject for Windows que por cierto a la fecha solamente funciona con python 3.4, por eso es que uso esta versión y no la última.
La arquitectura de mi pequeño sistema es muy sencilla. No es más que un script que interroga al PLC usando pymodbus3 y que escribe a MongoDB si detecta algún cambio. En MongoDB lo que se guardarán son eventos, es decir documentos con la información del estado de la variable y la fecha y hora del evento. Siendo MongoDB una base de datos NoSQL facilita la interacción rápida con los eventos sin mucho esfuerzo.

La otra parte de la ecuación es una pequeña aplicación que me permita leer los eventos almacenados en MongoDB y que le permita a los operadores interactuar con los datos. Hay dos caminos para hacer dicha aplicación. Pudiera ser una aplicación con una interfaz web, lo cual requiere alguito más de esfuerzo en el desarrollo gráfico y todo eso, o pudiéramos usar una clásica aplicación de ventanas lo cual es más rápido. Nos decidimos por lo segundo por aquello de la rapidez.

De todos los entornos gráficos de ventanas para python que hay por ahí el que nos parece más sólido es el que usa Glade para desarrollar las ventanas y Gtk+ para cargarlas al script python. Hay en la red muchos tutoriales, aunque creo que el mejor es el Python Gtk+3 Tutorial. El tutorial es bastante claro sobre como usar Gtk+ primero y por último como usar Glade. Lo bueno es que podemos tener Glade abierto y hacer cambios en la ventana y correr el script y de inmediato ver que pasó. Glade solamente crea un archivo xml que lo lee el script para crear los objetos que le pasará a Gtk+ para que los dibuje en pantalla y maneje los eventos.

En resumen, Python ofrece un sistema rápido de desarrollo para problemas como el descrito. Las librerías de funciones son extensas y el soporte en la red por parte de los desarrolladores es bastante bueno. Los scripts desarrollados en este proyecto en particular son bastante sólidos, manejan todo tipo de excepciones que sabemos que pueden presentarse (como fallas de comunicación porque se rompió el cable que va al PLC) y pueden modificarse en la misma planta ya que el código es abierto y un buen programador debiera poder entenderlo sin mucho problema por su gran legibilidad.

Hasta aquí por hoy. Si tienen dudas pónganlas en los comentarios.

4 comentarios:

patricia contreras dijo...

Felicitaciones Rómulo!

Matute dijo...

Practicidad, imaginación y buenos conocimientos de tecnología, es lo que valora el cliente en aprietos.

Mis felicitaciones estimado Rómulo.

Matías Bertoni

Matute dijo...

Practicidad, imaginación y buenos conocimientos de tecnología, es lo que valora el cliente en aprietos.

Mis felicitaciones estimado Rómulo.

Matías Bertoni

Sala de Autopsia dijo...

Eres un crack
Un ejemplo a seguir
Besos...