Raspberry Pi 2 B

Proyecto UWS (1)

Este año los reyes me llegaron con unos días de retraso, pero han valido la pena. Traían una flamante Raspberry Pi 2 B, con la que me he puesto a trastear un poco. Tenía ganas de programar un mini SCADA, que pudiese correr en un pequeño controlador como éste y que fuese accesible desde un navegador web. Sobra decir que es una primerísima versión todavía en pañales, posiblemente plagada de fallos y con una documentación escasa, por no decir ausente. Por tanto, no aconsejo de momento su uso para aplicaciones sensibles. Poco a poco iré mejorándola en los ratos libres.

Raspberry Pi 2 B
Raspberry Pi 2 B

Me gustaría en primer lugar dar una idea rápida del objetivo, así que voy a arrancar con una exposición en caliente. El único requisito de partida es un controlador con puerto Ethernet que pueda correr Python. He usado la Raspberry pero bien podría servir un PC con Windows, o Linux, o incluso algunas tablets. El SCADA, al que he dado en llamar Universal Web Server, tiene de momento poco de universal, ya que sólo comunica en Modbus TCP. Por tanto, también hará falta un servidor que comunique en este protocolo. Lo hacen muchos autómatas; yo cuento con un simulador. En estas circunstancias, nuestro SCADA consiste en un breve código en Python que da de alta dicho esclavo, inicia las comunicaciones con él y va sirviendo la información vía web. Quedaría como sigue:

Al ejecutar este código se hace todo lo que hemos comentado. He preparado una página donde se pueden ver los primeros valores de las áreas de memoria del PLC (coils, discrete inputs, holdings y register inputs). Como es de esperar, también es posible modificar datos cuando están accesibles para escritura.
Por supuesto, como SCADA es algo esquemático. El motivo es mi pereza, no la funcionalidad de UWS. Por terminar de mostrar el código del ejemplo, que pasaré a comentar en sucesivas entradas, copio a continuación el HTML de la página. Espero que, como creo haber hecho con la parte de Python, la sintaxis sea lo bastante simple como para, incluso sin describir los detalles, el contenido sea intuitivo. Se hace notar que no es necesario ejecutar código adicional, ya que el script en j.js se encarga de localizar todas aquellas etiquetas con atributo data-dir, interpretarlas como elementos dinámicos, y asociarles los eventos necesarios, que varían en función del tipo de etiqueta. Por tanto, podemos incluir tantas páginas como queramos con un desarrollo web al uso. Basta incluir los archivos, como index.html, dentro de la carpeta www, que debe estar situada en la ruta desde la que estamos ejecutando la aplicación.

Por último, hacer notar que las comunicaciones Modbus de este ejemplo hacen uso del paquete pymodbus3. Se puede instalar a través de pip con:

A continuación incluyo el enlace a la aplicación en Python, los módulos de que depende y la página web de este ejemplo. En las siguientes entradas iré documentando la API y espero que ampliando la funcionalidad y protocolos de comunicación. Espero que os sea de utilidad.
Esta entrada continúa en Proyecto UWS (2).
Recursos asociados:
SCADA UWS (versión 1.0) y código de ejemplo.

Facebooktwitterlinkedin