Estado del arte (PLC´s, SCADA´s y Concurrencia) 1. Introducción Desde los inicios del tiempo y particularmente enmarcados dentro del contexto de procesos industriales, científicos de todo el mundo han trabajado para lograr que los procesos de manufactura sean cada vez más efectivos y más eficientes. Con esta meta se han desarrollado nuevos instrumentos para lograr alcanzar este mejoramiento continuo. Al referirnos a herramientas estas abarcan dispositivos de todo tipo y por su puesto programas que acompañan manejan y dan valor agregado a los mismos. En este articulo nos centraremos particularmente en un dispositivo que causo gran revolución en los procesos industriales como son los PLC´s y en el software asociado a ellos. Los PLC´s (Programming Logic Controllers) o también conocidos como autómatas industriales nos ofrecen amplias posibilidades para la automatización, debido a que nos permiten controlar automáticamente cualquier proceso o desarrollo industrial[SIE01]. Estos procesos no solo son controlados por dispositivos de hardware sino también por dispositivos de software y es allí donde entran a jugar un papel sumamente importante los SCADA (Supervisionary Control And Data Adquisition ) que como su nombre lo dice, son aplicaciones de software que nos ayudan y facilitan el control y la supervisión de esos mismos procesos[ENE01]. Luego de aprender más en detalle sobre estos dos aspectos mencionados anteriormente consideramos necesario permitir que el lector tenga la oportunidad de aprender un poco más sobre la programación concurrente. Que si bien no necesariamente debe estar asociada al termino SCADA, se convierte entonces en una oportunidad de asociarla y descubrir los beneficios que una programación, que permite modelar el mundo como realmente es, nos brinda[SCH01]. 2. PLC (Programming Logic Controller ) Es un equipo electrónico capaz de ejecutar un programa cíclicamente o un computador industrial en miniatura que contienen hardware y software que es usado para desarrollar funciones de control [MAL99]. Un PLC es puede ser al mismo tiempo un AFD, un agente de estados finitos determinísticos, que como su nombre lo dice es un agente que puede cambiar de estado, y cada estado depende exclusivamente del estado anterior y de la ocurrencia de un evento determinado, por lo tanto su comportamiento es determinístico. Al pensar en PLC´s como unos AFD´s, es necesario que también tengamos claros los pasos que estos siguen dentro de cualquier proceso de automatización industrial para que el sistema funcione[ACT01]. 1. 2. 3. 4. 5. Alimentación principal del sistema Entradas Tratamiento de esos datos Salidas Variación real sobre la instalación o el proceso Al mismo tiempo existe una interacción hombre-máquina que permite modificar el proceso si este así lo requiere. 2.1 Componentes básicos de un PLC Estos dispositivos están conformados principalmente por una CPU y la interface de Entrada/Salida. Esta última está conectada a dispositivos de campo como: sensores, switches etc. Debido a sus componentes opcionales estos se pueden clasificar en dos tipos; los compactos que son conocidos en el mercado como “nanoautómatas”, permiten programar hasta 48 E/S. Son potentes en el marco de programación y comunicaciones con equipos externos. Los modulares son diseñados para aplicaciones pequeñas pero disponen desde cálculos matemáticos básicos y muchas otras funciones, la diferencia con los anteriores es que a estos se les puede agregar módulos para aumentar su capacidad de trabajo [AUT01]. Los PLC´s se componen de un chasis principal, donde están alojados los diferentes módulos que pueden ser entradas y salidas adicionales o dispositivos para comunicación con otros autómatas, los cuales son limitados dependiendo de la capacidad de la CPU, pues estas permiten manejar cierto número de módulos dependiendo del modelo. Un mismo autómata puede tener diferentes tipos de chasis, fuentes, etc. Se debe tener por lo menos una fuente de alimentación una CPU y unos módulos conectados por un bus, que casi siempre es serie para propósitos de comunicación [PLC01]. Como un concepto adicional importante para recordar esta el tiempo de ciclo en un PLC´s, que es el tiempo en que los periféricos del autómata tardan en realizar un ciclo completo, es decir desde que lee las entradas hasta que escribe las salidas y se utiliza para funciones de control sobre el proceso que se esta realizando. 2.2 Programación de PLC´s Para programar un PLC se utiliza software como Grafcet y otros de los cuales hablaremos más adelante que corren en sistemas operativos muy usados hoy en día como Windows y Linux. Sin embargo todavía se utilizan pequeñas consolas llamadas “pockets”, las cuales resultan más económicas que tener un PC dedicado a la programación de estos dispositivos exclusivamente y cuando solo la modificación de datos es necesaria las consolas son de gran utilidad. Sin embargo, estas son muy limitantes debido a que se puede utilizar más que todo para PLC´s pequeños de hasta 48 E/S; para PLC´s más grandes la programación se vuelve mucho mas complicada, ya que normalmente estas consolas permiten visualizar solamente un par de líneas de código al tiempo [UTP01]. Debido a que existen un sinnúmero de PLC´s de diferentes marcas y cada uno se programa de forma específica se han diseñado programas estándar como Texto Estructurado y Lista de Instrucciones que permiten programar de una forma muy amigable diversos tipos de PLC´s especificando luego de programar el tipo de PLC al cual se quiere programar y este software convierte el programa al código correspondiente del PLC [ADV01]. Algunos tipos de software para programación de PLC´s son: Gráfico secuencial de funciones (Grafcet): Este es un lenguaje gráfico que brinda una representación en forma de diagrama de las diferentes secuencias del programa[GRA01]. Lista de instrucciones (IL o AWL): Este lenguaje de bajo nivel, parecido a ensamblador. Con IL solo se permite una operación por línea (ej. Cambiar el valor de un registro). Este lenguaje solo es adecuado como es de suponerse para aplicaciones no muy grandes y para optimizar partes de un programa[AUT01]. Texto estructurado (Structured Text o ST): Es un lenguaje de alto nivel con sintaxis parecida a PASCAL. El ST es empleado para realizar rápidamente sentencias largas que manejen variables de diferentes tipos de datos, que pueden incluir valores analógicos y digitales (horas, fechas, contadores etc.. El lenguaje provee expresiones condicionales y bucles iterativos[MAL99]. Diagrama de contactos (ladder diagram LD): Este lenguaje utiliza un juego estandarizado de símbolos de programación[PLC01]. Diagrama de funciones (function block diagram o FBD): Es un lenguaje gráfico que permite programar elementos que aparecen como estados siendo cableados entre si de forma análoga al esquema de un circuito[RED01]. Bloques de funciones (FB's): Este es un lenguaje de bloques estándar que ejecutan algoritmos como reguladores de procesos[PLC01]. 2.3 Comunicación de PLC´s Los PLC´s se pueden comunicar entren si y con otros dispositivos a través de buses de terreno. Este es un nombre genérico dado a protocolos de comunicación totalmente digitales para mediciones industriales y aplicaciones de control. Estos protocolos son parte fundamental en la automatización de procesos. Algunos Protocolos de buses de terreno son, CAN (Controller area network), WorldFIP (Factory instrumentation protocol), Interbus-S, Profibus-FMS (Filedbus Message specification)/PA (Process Automation), Profibus-DP (Decentralised Peripherie), ARNET (Attached Resource Computer Network), LON (Local Operating Network), Bitbus, SERCOS (Serial Time Communication System), JBUS, Modbus[VAR01] [TUM01][FBO01]. Cada uno de estos posee sus propias características entre ellas se pueden encontrar la detección y corrección de errores, mecanismos de difusión, manejo de prioridades y otras. De igual forma permiten la utilización de diferentes topologías como la de anillo, de bus, de árbol, de estrella o de línea [RES99]. 3. SCADA´s (Supervisory Control And Data Adquisition) Existe también un tipo especial de programas que sirven para efectuar funciones de adquisición de datos control y supervisión sobre los PLC´s y su nombre en el mercado es SCADA, sigla que al traducirse al español significan supervisión control y adquisición de datos[BCO01]. 3.1 Funcionamiento de un SCADA Un sistema SCADA permite al operador supervisar el funcionamiento de una planta de trabajo. Este tipo de software también provee facilidades para el control de la misma[ENE01]. Esto se consigue a través de la interface gráfica que permite mostrar el sitio en pantalla como un grupo de imágenes o ventanas, cada parte de la planta puede ser monitoreada y controlada por medio de su propia ventana. La totalidad de la planta puede ser controlable por medio del uso de un SCADA, permitiendo la interacción manual al mismo tiempo y brindando funciones como la de apagar toda la planta con solo presionar una tecla. Para propósitos de seguridad los SCADA ofrecen una restricción de acceso controlada por contraseñas y restricción en comandos también controladas por contraseñas que permiten manejar diferentes niveles de privilegio de usuarios. Debido a que los SCADA pueden llegar a controlar todos los aspectos de la planta, aquel o aquellos que lo manejen deben ser personal capacitado. La mayoría de los sistemas SCADA proveen sistemas de alarmas que permite controlar cualquier tipo de anomalía que suceda dentro de la planta. También se pueden encontrar funcionalidades como la de poder guardar, ver y analizar datos históricos. En esta área de software de supervisión ya se han hecho importantes avances a escala mundial, de hecho existen hoy por hoy un sin número de compañías que desarrollan este tipo de aplicaciones y proveen al usuario a parte de las funcionalidades mencionadas anteriormente que son comunes en la gran mayoría de SCADA muchas otras como la compatibilidad con diferentes tecnologías, tales como ODBC, OPC, ActiveX, OLE, COM, DCOM, etcétera. Y muchas otras características que le pueden permitir hasta mandar mensajes a través de Internet via SMS cuando una alarma se activa y notificar así al encargado de la planta de tal suceso[ACT01]. 3.2 Compañías productoras de SCADAS: Una de las más importantes es USDATA [USD01], desarrolladora de Factory Link, programa que provee a través de un esquema maestro esclavo una interface con el operador, manejo y monitoreo de alarmas, manejo de datos históricos en bases de datos como Oracle o SQL, generación de reportes, monitoreo de procesos y capacidad de redundancia. Otra compañía también muy importante es Advantech que desarrolla y distribuye Fix Driver. Software que proporciona características similares al anterior[ADV01]. Además de las anteriores compañías existen otras que desarrollan software de características similares y es necesario mencionarlas como Emation [EMA01] que produce Wizfactory e Iconics que desarrolla Genesis[ICO01]. 3.3 Ventajas de un SCADA Permiten monitorear el desempeño de un sistema desde la aplicación a costos muy bajos. Los datos pueden ser recuperados remotamente y un operador puede controlar un equipo mecánico hidráulico o neumático sin tener que visitar el sitio de ubicación del mismo. Además los gerentes pueden supervisar el proceso desde cualquier sitio. Un operador de planta puede controlar el equipo a través de ventanas, en la mayoría de casos tipo Windows que le brindan una interface gráfica y una serie de comandos de control muy fáciles de recordar. Las funciones de alarma pueden comunicar su condición a través de teléfonos, beepers, radios u otros sistemas. Y permiten comunicarse con el software remotamente para solucionar problemas sin tener que ir al sitio de ubicación de la planta. Estos sistemas proveen almacenamiento histórico de datos para comparación con datos actuales y futuros. Se pueden utilizar PC´s estándar para la interface hombre máquina. La comunicación en red permite que esta se realice entre diferentes equipos inclusive de diferentes fabricantes. Brindando flexibilidad en la compra de nuevos equipos o la modificación y actualización de los actuales[GEN01]. 4. Programación Concurrente Es el nombre dado a notaciones de programación y técnicas para expresar paralelismo potencial y resolver los problemas resultantes de sincronización y de comunicación[SC101]. 4.1 Necesidad de una programación concurrente Existen varios aspectos en nuestro mundo inherentemente distribuido que hacen necesaria la programación concurrente. En primera instancia es más fácil modelar de una manera concurrente un sistema del mismo tipo, que hacerlo encajar dentro del paradigma secuencial que de ninguna manera esquematiza el comportamiento de ese sistema. También es necesario considerar que el programar concurrentemente permite que los sistemas sean más fácilmente escalables debido a la modularidad de su desarrollo y que también estos pueden ser mucho más eficientes debido a que permiten la ejecución en paralelo de múltiples instrucciones. La programación concurrente es usada para modelar y simular sistemas físicos, inclusive si esos sistemas no están controlados directamente por un computador. La simulación es una herramienta importante en la optimización de sistemas físicos; la programación concurrente brinda una forma natural de asignar segmentos del programa para representar objetos físicos y por eso ayuda mucho a representar simulaciones. Se piensa que la concurrencia como un tópico avanzado mucho más difícil que la programación serial, por lo que necesita ser estudiado muy detenidamente y muy ampliamente, sin embargo al estudiarla más a fondo podemos darnos cuenta que esto no es verdad y podemos entonces percibir todas las ventajas que esta nos ofrece[SC101]. 4.2 Problemas implícitos en la programación concurrente Al programar concurrentemente y por ello compartir recursos surgen algunos problemas que necesitan ser resueltos para así aprovechar al máximo todas las ventajas que la programación concurrente nos puede brindar. Entre los problemas más importantes podemos mencionar algunos: La ejecución de un de proceso que puedan afectar la información perteneciente a otro proceso que se ejecuta en paralelo a menos que esté autorizado a hacerlo (datos compartidos). El abrazo mortal, que es el estado en el que dos transacciones se queden bloqueadas cada una esperando por recursos que esta utilizando la otra. Inanición: Estado al que llega una transacción cuando es seleccionada repetidamente para abortar y así evitar un abrazo mortal. Livelock: Estado en donde una transacción cambia continuamente de estado en respuesta a cambios en otra transacción mientras la otra hace lo mismo, sin conseguir ningún resultado con ello[SCH89]. 4.3 Mecanismos de solución a problemas de la programación concurrente Existen distintos formas para solucionar estos problemas partiendo de mecanismos de bajo nivel como semáforos que como obliga a los procesos a ponerse en cola y así evitar problemas con memoria compartida. Mecanismos de envío de mensajes para el mismo propósito. Hasta mecanismos de más alto nivel como monitores que proveen ciertas operaciones internas que deben ser llamadas para poder modificar los datos asegurando así el control sobre los mismos. Se pueden nombran hablar también de mecanismos de sincronización como el rendez vouz donde un proceso no escribe hasta que el otro este listo para leer[BAR95]. 4.4 Metodología de diseño de sistemas concurrentes Cuando se piensa en utilizar la programación concurrente como herramienta de desarrollo es preciso hablar primero de la metodología de diseño de sistemas concurrentes y una en particular que es ampliamente usada y define los siguientes pasos[FLE95]: Partición o Descomposición El problema computacional se descompone en pequeñas tareas pequeñas que forman las unidades de concurrencia ya sea relacionando su nivel de interacción o simplemente haciendo uso de alguna heurística conservando siempre en mente la necesidad de eliminar redundancia en procesamiento y almacenamiento. Coordinación Esto paso define la incorporación de mecanismos que permitan la comunicación y sincronización de tareas que se puede realizar usando el paso de mensajes o la memoria compartida. Tratando siempre de garantizar que todas las tareas tengan aproximadamente el mismo número de comunicaciones, que cada tarea se comunica sólo con un pequeño número de vecinos y que estas operaciones de comunicaciones puedan realizarse de forma simultanea Aglomeración o Asignación En este paso, las tareas se agrupan basadas en procesos para optimizar el rendimiento, reducir costes de desarrollo y garantizar la flexibilidad y escalabilidad. Proyección En este último paso los procesos se asignan a los procesadores que haya disponibles de forma que se minimice los costos de comunicación y al mismo tiempo se maximice el uso de esos procesadores, es decir que exista un buen balance. 4.5 Lenguajes de programación concurrente Dentro de los lenguajes para la programación concurrente vale la pena hablar un poco de dos en especial por su gran importancia, estos son: Ada Uno de los pocos lenguajes que provee estructuras embebidas para programación concurrente y provee herramientas para diseño de software de seguridad crítica y proyectos grandes que requieran portabilidad y mantenimiento. Por esta razón la mayoría de software para aviación esta programado en Ada que también fue el primer lenguaje orientado a objetos aceptado mundialmente. El lenguaje lleva este nombre en honor a Ada Byron que fue el primer programador del que se tiene registros, siendo este una mujer e hija del poeta Lord Byron [ARA]. Occam Es un lenguaje de procesamiento paralelo diseñado por un equipo en INMOS en conjunto con el diseño del procesador transputer, y basado en CSP. Este lenguaje incorpora soporte para un grano muy fino, hilos de ejecución fáciles de usar y un amplio soporte de ambientes multiprocesadores. Este puede ser usado con sistemas de memoria compartida o distribuida, y es una buena opción cuando se requiere corrección[WOT01]. 4.6 Herramientas de especificación y verificación de sistemas concurrentes 4.6.1 Redes de Petri Es un modelo gráfico para describir sistemas concurrentes, se puede ver como un grafo dirigido y bipartido donde las dos clases de vértices se denominan lugares y transiciones, se permiten lados paralelos en estas redes. Al modelar una red de Petri, los lugares representan condiciones, las transiciones representan eventos y la presencia de por lo menos una ficha en un lugar indica que la condición se cumple. En una red de Petri (P) es un lugar de entrada para la transición T, si existe un lado dirigido que va desde el lugar P hasta la transmisión T. De igual forma se define un lugar de salida. Si todo lugar de entrada para una transmisión T tiene al menos una ficha, se dirá que T es permitida. Una transición permitida que quita una ficha a cada lugar de entrada y agrega una ficha a cada de salida se llama descarga. Una marca M para una red de Petri esta viva si al empezar en M es posible descargar cualquier transición dada a través de una sucesión adicional de descarga, sin importar que la sucesión de descarga ya haya sucedido. Una marca en una red de Petri es acotada si existe un entero positivo N que tiene la propiedad de que en cualquier sucesión de descarga ningún lugar recibe mas de N fichas. Ahora si una marca M esta acotada y en cualquier sucesión de descarga ningún lugar recibe mas de una ficha, se dice que M es una marca segura[UOK]. 4.6.2 CSP (Communicating Sequential Processes) Es una teoría matemática para especificar y verificar patrones de comportamiento como abrazos mortales o Livelocks que se dan durante al interacción de objetos concurrentes. Su semántica formal y composicional esta completamente ligada con nuestra intuición natural sobre las formas en que las cosas funcionan. Podemos ver el modelo como un grupo de componentes organizados en una capa y comunicándose con otra capa de componentes a través de canales unidireccionales. Este modelo nació debido a la necesidad de encapsular la información de tal manera que esta permanezca correcta, facilitar el diseño y poder detectar fallas antes de que estas ocurran. Entre muchas de las ventajas que este modelo brindan esta su semántica sencilla y por ende su facilidad de aplicar, sus kernel tan liviano mejorando así el rendimiento de las máquinas y el que haya software del tipo de FDR que permita verificar sí el modelo esta correcto o no. El enfoque de sincronización que utiliza CSP es el de rende Vuez, que no permite que un proceso escriba si al mismo tiempo el otro proceso esta haciendo un leer y viceversa, como estas acciones en teoría se deben realizar en paralelo estas deberían ser no bloqueantes[WOT01]. 4.6.2.1 JCSP (Java communicating sequential processes) Java también desarrolla su propia implementación basada en el álgebra de CSP, orientada a la concurrencia de procesos. No se requiere conocimientos avanzados en matemáticas para usar esta herramienta. Al contrario permite una simplificación en el diseño que la concurrencia genera. JCSP brinda la capacidad a través de bibliotecas completas de desarrollar programas de funcionalidad compleja sobre capas de procesos de comunicación. Con esta implementación el modelo CSP aparece soportado por las aplicaciones multihilo de Java. Los Procesos interactuan solamente a través de la primitivas de sincronización de CSP como channels, CALL channels, timers, crews, barriers, buckets o otros modos bien definidos de accesos a objetos pasivos. Dos procesos no invocan procesos de si mismos. Estos procesos pueden corren en forma secuencial o paralela. Existen también en el mercado aplicaciones que nos permiten verificar computacionalmente modelos especificados con CSP y una de las más sobresalientes es FDR [UOK]. 4.6.2.1 FDR (Failures-Divergence Refinement) Permite la verificación de muchas de las propiedades de sistemas de estados finitos y la investigación de sistemas que no pasan ese tipo de verificaciones. Esta basado en la teoría de CSP. Fue desarrollado en la universidad de Oxford. Su método de probar si una propiedad se cumple es el de probar el refinamiento de un sistema de transición que captura la propiedad a través de la máquina candidato. También permite verificar el determinismo de una máquina de estados y esto es usado primordialmente para corroborar propiedades de seguridad [FOS]. 5. Conclusiones Los PLC´s representan un gran avance en al industria de la automatización industrial, pues con ellos se logra controlar procesos antes muy difíciles de manejar. Los SCADA´s brindan una serie de características que los hace necesarios en una planta para supervisión de procesos que de otra manera serian muy difíciles de seguir debido a su tamaño. La programación concurrente facilita la implantación de aplicaciones escalables y flexibles, debido a que permite modelar el mundo como realmente es. Si bien esta trae consigo algunos problemas, existen mecanismos de control para los mismos y al contrario existe hoy en día una gran cantidad de lenguajes y aplicaciones que facilitan la implantación de aplicaciones a usando la programación concurrente y otras que permiten la verificación de la misma. 6. Referencias [AUT01] Página de Autómatas, "www.automatas.org" Septiembre 21 de 2001. [USD01] Página de United States Data Corporation, “www.usdata.com” Septiembre 21 de 2001. [ADV01] Página de Advatech corporation, “www.advatech.com” Septiembre 21 de 2001 [SCH89] Schiper, Andre, Concurrent Programming, London : North Oxford Academic, 1989 [ARA] Página de la asociación de recursos de Ada “www.adaic.com” Noviembre 15 de 2001. [FOS] Página de formal systems “www.formal.demon.co.uk”, Noviembre 23 de 2001. [UOK] Página de la universidad de Kent “www.cs.ukc.ac.uk” Noviembre 25 de 2001. [RES99] Réseaux de terrain, Edition HERMES Paris 1999 [IAI01] Página de Industrial Automation “www.abpubs.demon.co.uk” Septiembre 21 de 2001. INSIDER [MAL99] Controladores lógicos y autómatas programables, segunda edición, Enrique Maldonado, 1999. [BAR95] Concurrent Programming, Alwyn Barry, 1995. [FLE95] ML with concurrency: design analysis implementation, and application, Flemming Nielson, 1995. [GRA01] Página de Grafset “www.lurpa.ens-cachan.fr”, Noviembre 23 de 2001. [EMA01] Página de Emation, “www.emation.com”, Noviembre 23 de 2001. [ICO01] Página de Iconics “www.iconics.com”, Noviembre 23 de 2001. [GEN01] Página de Garver engineers “www.garverinc.com”, Septiembre 12 de 2001. [ENE01] Página de Energenecs “www.energenecs.com”, Septiembre 15 de 2001. [BCO01] Página de Borde communications “www.neal-and-massy.com”, Septiembre 10 de 2001. [VAR01] Página de Varcol, Electrical services limited, “www.varcol.co.uk”, Noviembre 15 de 2001. [SIE01] Página de Siemens “www.ca.landisstaefa.com”, Diciembre 1 de 2001. [ACT01] Página de Actron “www.actron.se”, Diciembre 1 de 2001. [PLC01] Página de PLCS “www.plcs.net”, Diciembre 1 de 2001. [UTP01] Página de la universidad tecnológica de panama “www.fim.utp.ac.pa” Noviembre 20 de 2001. [WOT01] Página de Parallel systems engineering, “wotug.ukc.ac.uk”, Noviembre 20 de 2001 [SC101] On concurrent programming, Schneider Fred, 1997. [TUM01] Página de la Universidad técnica de Munchen, “www.lpr.etechnik.tu-muenchen.de”, Septiembre 28 de 2001. [FBO01] Página de la organización de Filedbus “www.fieldbus.org”, Octubre 25 de 2001. [RED01] Página de Redeya “eya.swin.net” Noviembre 20 de 2001.