Linux para Sistemas Industriales


1. ¿Por qué utilizar Linux?
2. ¿Qué distribución de Linux usar?
3. ¿Cómo hago programas en Linux?
4. ¿Cómo uso una tarjeta de adquisición de datos?
5. ¿Cómo gestiono conexiones serie y TCP/IP fácilmente?
6. ¿Cómo hago fácilmente sistemas de automatización tipo PLC?
7. ¿Cómo hago la interfaz Hombre-máquina (HMI)?
8. ¿Cómo consigo que el sistema sea de tiempo real?
9. ¡COLABORA!

Actualizado el 8/12/2008

1. ¿Por qué utilizar Linux?

Linux es un sistema operativo gratuito, eficiente y robusto que cuenta con innumerables herramientas para hacer prácticamente cualquier cosa que se nos ocurra.

Esto no es gracias a que sea gratuito; la verdadera ventaja es que el código fuente del sistema operativo y de muchísimas aplicaciones es libre y está abierto para que cualquiera pueda usarlo, modificarlo y mejorarlo. El resultado es una amplísima comunidad de usuarios y programadores que resuelven problemas muy distintos y se apoyan mútuamente.

Linux es un término muy popular y se emplea aquí como excusa para vender una filosofía. El título correcto de este apartado sería "¿por qué utilizar código abierto?", pero el término "Linux" vende más.

Hay también desventajas; poner a punto un sistema Linux con una aplicación industrial sobre él suele ser más difícil que tener Windows, coger un programa de un determinado fabricante, instalarlo y usarlo. Eso sí, si el programa no hace exactamente lo que quieres o falla, en Linux podrás pedir ayuda o solucionarlo tu mismo modificando en programa, en cambio con un programa privado y cerrado estarás perdido.

En este documento se pretenden recoger notas sobre cómo acercarse a LInux desde el punto de vista industrial y de control de procesos sin morir en el intento.

Uno va cayendo, poco a poco, en la seducción del código abierto según los fabricantes van poniéndote la zancadilla. Cuando te tienes que buscar la vida en foros para solucionar los problemas de las aplicaciones propietarias que no te soluciona el propio fabricante.

Como estoy hasta las narices de esta situación, he decidido no hacerles la cama a los fabricantes e intentar echar una mano para que esto tire hacia delante.

2. ¿Qué distribución de Linux usar?

Para echar un primer vistazo a Linux sin tener que instalarlo en un computador se sugiere utilizar un LiveCD de Linux.

Actualmente, el live DVD KNOPPIX es una magnífica opción que incluye cientos de aplicaciones funcionando y sin necesidad de instalar nada. Es ideal para llevar encima y arrancar cualquier ordenador con él.

Si decides instalar Linux en tu ordenador, hay un montón de distribuciones comerciales y libres: Mandrake, SuSE, Fedora/RedHat, Debian (la verdaderamente libre), UBUNTU (es una Debian con una filosofía politica muy interesante). Se recomienda instalar Ubuntu, concretamente la versión LTS (actualmente la Ubuntu 8.04 Hardy).

Instalar Linux suele ser mucho más rápido y sencillo que Windows. Además, es muy cuidadoso evitando que pierdas algo ya instala. Por ejemplo, si tienes instalado Windows ocupando todo el disco, la instalación de Ubuntu será capaz de apretar Windows, y meterse él en el hueco.

3. ¿Cómo hago programas en Linux?

Ufff, lenguajes de programación para Linux hay muchísimos.

Lo ideal sería poder hacer programas que sirvan en distintas plataformas con independencia del sistema operativo y el tipo de plataforma hardware. Partiendo de que se quiere programar en C/C++ y se desea una aplicación basada en ventanas, las mejores opciones parecen ser: Qt, GTK y wxWidgets.

Cómo en las asignaturas hemos trabajado usando el lenguaje C y el entorno Borland C++ Builder, se sugiere cómo opción usar KDevelop cómo entorno de desarrollo y hacer programas basados en Qt.

Si pruebas Knoppix, KDevelop y Qt vienen instalados, así que puedes echarles un vistazo. Tampoco va mal echar un vistazo a "The Independent Qt Tutorial".

Por las pruebas y experiencia que está cogiendo Pablo Alaman, desarrollar la interfaz gráfica con GTK está siendo también relativamente sencillo. El tutorial que hay en la página oficial e instalarse el paquete "gtk2.0-examples" es un buen punto de partida (una vez instalado, ejecutar gtk-demo para ver las posibilidades y el código fuente asociado).

Hay un entorno de programación multilenguaje que se llama Eclipse que se puede emplear para distintos lenguajes de programación y plataformas. Parece bastante universal y se puede emplear para desarrollar aplicaciones para Qt, GTK, Java, Java para móviles, microsontroladores, etc. Miguel MAteo tiene experiencia con él. Ya nos explicará...

Otra opción es utilizar el lenguaje Java, que se parece bastante a C/C++. Es una buena opción si se quieren hacer cosas para móviles.

4. ¿Cómo uso una tarjeta de adquisición de datos?

Hay muchos fabricantes que proporcionan librerías Linux para sus tarjetas de adquisición de datos. La pega es que cada tarjeta emplea una interfaz (librerías de funciones) distinta, con lo que toca adaptarse a ella.

La opción más acertada en Linux parece ser utilizar comedi, que pretende ofrecer una interfaz común a todas las tarjetas de adquisición de datos, facilitando la migración y evitando tener que aprender a usar nuevas funciones cada vez que se cambia de tarjeta. Si deseas usar una tarjeta en linux, te recomiendo que la busques soportada por comedi. Ya me gustaría esto para Windows.

El siguiente artículo sobre comedi en linuxjournal puede ser interesante para empezar. También vale la pena mirar este artículo sobre lo bueno y lo malo de comedi.

Hector Ureña ha probado comedi y puedes descargarte ejemplos y videos para usar comedi con el puerto paralelo del PC.

Si usas las estupendas tarjetas de National Instruments, otra buena opción debería ser emplear las librerías NiDAQmx y NiDAQmx-base, una aproximación comercial de National Instruments tipo comedi para sus tarjetas. La idea es la misma, ofrecer interfaz común para todas ellas. De momento, las pruebas que ha hecho PAblo Alamán y lo que se lee en los foros es bastante frustrante, sobre todo si se usa una distribución tipo Debian. Nos olvidamos de ellas por el momento.

Por cierto LabView también funciona en Linux usando comedi.

5. ¿Cómo gestiono conexiones serie y TCP/IP fácilmente?

Conexus parece una buena opción, habrá que probarlo.

6. ¿Cómo hago fácilmente sistemas de automatización tipo PLC?

Puedes usar MatPLC, un PLC software basado en módulos (PID, I/O, nemotécnicos, etc.).

Otra propuesta interesante es Classic Ladder, propuesta tipo PLC que incluye también Grafcet. Licencia LGPL.

7. ¿Cómo hago la interfaz Hombre-máquina (HMI)?

A pelo cómo en 2º curso o utilizando la filosofía de componentes de tercer curso. Ahí van algunos componentes en esa línea:

Para Qt:

Qt Widgets for Technical Applications es una colección de widgets Qt. Incluye gráficos, botones, medidores, etc. Tiene buena pinta.

Qt4Lab son widgets para Qt4.

Para GTK:

GTK INSTRUMENTATION WIDGETS para instrumentacion (medidores, tanques, termómetros, ...). Probados y funcionan.

Para nose que:

ProcessViewBrowser es una sistema tipo cliente-servidor para acceder al estado de un proceso y visualizarlo.

8. ¿Cómo consigo que el sistema sea de tiempo real?

Si queremos que el sistema diseñado cumpla restricciones temporales, la opción es usar características de tipo real. Aggunas opciones son:

RtLinux es el más reconocido.

RTAI dicen qué es el que más opciones ofrece.

Xenomai es otra opción que da la sensación de estar popularizándose.

También está Open Components for Embedded Real-time Applications (OCERA). Entorno sobre RT-Linux basado en componentes con carcterísticas de tiempo real.

¿Cuál es la adecuada? Ni idea.

9. ¡COLABORA!

Si tienes alguna sugerencia para mejorar y ampliar esta información, por favor, hazmela llegar al correo electrónico.