UNIVERSIDAD NACIONAL DEL CENTRO DE LA PROVINCIA DE BUENOS AIRES FACULTAD DE CIENCIAS EXACTAS TESIS DE GRADO DE INGENIERIA DE SISTEMAS Herramienta para el diseño, simulación y generación de código de sistemas de automatización industrial basados en PLCs. Autor Leiva Javier 1 Director Dr. Luis Sebastián Berdun 2 1 jmaleiva@hotmail.com 2 lberdun@exa.unicen.edu.ar Tandil, Junio de 2016 Dedicatoria A mis padres. A mi esposa Claudia. A mis hijos Martina y Agustín. Agradecimientos A mis padres, por ser el pilar fundamental en todo lo que soy, en toda mi educación, tanto académica como de la vida, por el sacrificio e incondicional apoyo aún en los momentos más difíciles. A mi esposa e hijos, por aguantar mis “ausencias”, el cansancio y todos los momentos para compartir en familia que no pudieron ser… A Luis, por su entera predisposición desde el principio, por su paciencia, por haberme ayudado y guiado para que esto pueda concretarse. A todos aquellos que me acompañaron durante todos estos años, por su generosa ayuda y palabras de aliento en los momentos complicados. A todos aquellos que contribuyeron en mi crecimiento. A mis compañeros y amigos, por los momentos compartidos. Índice General Capítulo 1 - Introducción .............................................................................................. 12 1.1 Definición de Automatismo ............................................................................................ 12 1.2 Clasificación Tecnológica ................................................................................................ 13 1.3 Motivación ..................................................................................................................... 15 1.4 - Trabajo realizado .......................................................................................................... 18 1.5 - Organización del trabajo .............................................................................................. 21 Capítulo 2 - Marco Teórico ........................................................................................... 22 2.1 El Autómata Programable Industrial .............................................................................. 22 2.1.1 Definición ................................................................................................................. 22 2.1.2 Arquitectura del API ................................................................................................. 22 2.1.3 Constitución Física ................................................................................................... 24 2.1.4 Descripción Funcional .............................................................................................. 27 2.1.5 Unidades De Programación .................................................................................... 29 2.1.6 Programación de los Autómatas Programables Industriales.................................. 30 2.1.7 Estándar de programación IEC 61131-3 .................................................................. 30 2.1.7.1 Introducción ...................................................................................................... 30 2.1.7.2 Elementos comunes .......................................................................................... 31 2.1.7.3 Lenguajes de programación .............................................................................. 35 2.1.7.4 Top-down vs. Bottom-Up- ................................................................................. 42 2.1.7.5 Implementaciones ............................................................................................. 42 2.1.7.6 Conclusiones...................................................................................................... 43 2.2 Grafcet ............................................................................................................................ 44 2.2.1 Metodología Grafcet: Conceptos Básicos ............................................................... 45 2.2.2 Etapas ...................................................................................................................... 45 2.2.3 Transición ................................................................................................................ 47 2.2.4 Uniones Orientadas................................................................................................. 48 2.2.5 Reglas de Evolución ................................................................................................. 49 2.2.5.1 Situación Inicial ................................................................................................. 49 2.2.5.2 Franqueo de una Transición ............................................................................. 49 2.2.5.3 Evolución de las Etapas activas ........................................................................ 49 2.2.5.4 Reglas de estructuras de uso frecuente ........................................................... 50 2.2.5.5 Evoluciones Simultáneas .................................................................................. 51 2.2.5.6 Activación y Desactivación Simultánea ............................................................ 51 2.2.6 Estructuras Principales ............................................................................................. 51 2.2.6.1 Secuencia Única ................................................................................................ 52 2.2.6.2 Secuencias Simultáneas: paralelismo estructural ............................................ 52 2.2.6.3 Selección de Secuencia ..................................................................................... 53 2.2.7 Implementación del Grafcet ................................................................................... 54 2.3 Programación Orientada a Objetos ............................................................................... 57 2.4. Trabajos relacionados ................................................................................................... 60 2.4.1 Ámbito de aplicación de S7-GRAPH ......................................................................... 61 2.4.2 Características generales de S7-GRAPH................................................................... 61 2.4.3 Análisis de la Herramienta S7-GRAPH ..................................................................... 63 Capítulo 3 - Solución Propuesta .................................................................................. 65 3.1 Descripción de la Solución Propuesta ............................................................................ 65 3.2 Objetivos de la Solución Propuesta ................................................................................ 66 3.3 Representación General de la solución Propuesta ........................................................ 67 3.4 Diseño del Diagrama Grafcet .......................................................................................... 68 3.5 Programación del Proceso .............................................................................................. 70 3.5.1 Condiciones .............................................................................................................. 71 3.5.2 Lenguaje del Editor .................................................................................................. 74 3.5.3 Direcciones de memoria .......................................................................................... 74 3.5.4 Constantes ............................................................................................................... 75 3.5.5 Juego de instrucciones ............................................................................................. 75 3.6 Simulación del Proceso ................................................................................................... 78 3.7 Generación Automática de Código PLC .......................................................................... 79 Capítulo 4 - Diseño e Implementación ...................................................................... 80 4.1 Arquitectura general....................................................................................................... 80 4.1.1 Modelo ..................................................................................................................... 81 4.1.2 Controlador .............................................................................................................. 82 4.1.3 Vista.......................................................................................................................... 83 4.2 Condiciones .................................................................................................................... 85 4.2.1 Operaciones Lógicas ................................................................................................ 85 4.2.2 Diseño para la representación de condiciones ........................................................ 87 4.2.3 Implementación ....................................................................................................... 89 4.3 Simulación....................................................................................................................... 95 4.3.1 Diseño ...................................................................................................................... 95 4.3.2 Implementación ..................................................................................................... 101 Capítulo 5 - Casos de Estudio ..................................................................................... 104 5.1 Caso de Estudio N° 1 ..................................................................................................... 105 5.1.1 Descripción............................................................................................................. 105 5.1.2 Ciclo de funcionamiento ........................................................................................ 105 5.1.3 Nivel tecnológico ................................................................................................... 106 5.1.4 Implementación con la Herramienta .................................................................... 107 5.2 Caso de Estudio N° 2 ..................................................................................................... 120 5.2.1 Descripción............................................................................................................. 124 5.2.2 Ciclo de funcionamiento ........................................................................................ 126 5.2.3 Implementación con la Herramienta .................................................................... 129 Capítulo 6 - Conclusiones ............................................................................................ 148 6.1 Ventajas ........................................................................................................................ 149 6.2 Limitaciones .................................................................................................................. 150 6.3 Trabajos futuros............................................................................................................ 151 Capítulo 7 - Bibliografía .............................................................................................. 153 Apéndice A ......................................................................................................................... 155 Índice de Figuras Figura 1.1: Estructura típica de un sistema automatizado ................................................................... 13 Figura 1.2: Función lógica y = a . b + c. .................................................................................................. 16 Figura 1.3: Representación en diagrama de contactos de y = a . b + c. ................................................ 17 Figura 1.4: Representación mediante puertas lógicas y = a . b + c. ...................................................... 17 Figura 1.5: Diagrama de Flujo de un arrancador estrella/triángulo ..................................................... 17 Figura 1.6: Diagrama Grafcet del arrancador estrella/triángulo .......................................................... 18 Figura 1.7: Diagrama general del trabajo realizado ............................................................................. 20 Figura 2.1: Arquitectura de un Autómata Programable Industrial ....................................................... 23 Figura 2.2: Autómata modular CS1 de Omron Electronics (Omron Industrial Automation)................. 24 Figura 2.3: Autómata modular M340 de Schneider Electric (Schneider Electric) ................................ 25 Figura 2.4: Autómata modular S7-300 de Siemens (Siemens, 2001) .................................................... 25 Figura 2.5: Elementos constitutivos de un autómata modular ............................................................. 25 Figura 2.6: Autómata compacto SP1E de Omron Electronics (Omron Industrial Automation) ............ 26 Figura 2.7: Autómata programable compacto M238 de Schneider (Schneider Electric)...................... 26 Figura 2.8: Autómata programable compacto S7-200 de Siemens (Siemens.com) .............................. 26 Figura 2.9: Ciclo de trabajo de un API ................................................................................................... 27 Figura 2.10: Terminal táctil programable KTP 1000 Basic de Siemens ................................................. 30 Figura 2.11: Partes de IEC 61131-3 ....................................................................................................... 31 Figura 2.12: Modelo de Software .......................................................................................................... 32 Figura 2.13: Ejemplo de SFC .................................................................................................................. 34 Figura 2.14: Ejemplo de programa en diagrama de contactos (ladder diagram) ................................. 37 Figura 2.15: Uso de funciones complejas en diagramas de contactos .................................................. 38 Figura 2.16: Representación de instrucciones en Diagrama de contactos (Ladder) ............................. 40 Figura 2.17: Representación en lenguaje de lista de instrucciones ....................................................... 40 Figura 2.18: Representación de instrucciones en listas de instrucciones y lógica de relés ................... 40 Figura 2.19: Representación en lista de instrucciones .......................................................................... 41 Figura 2.20: Representación en diagrama de bloques de funciones ..................................................... 41 Figura 2.21: Desarrollo de aplicaciones IEC 61131-3 ............................................................................ 42 Figura 2.22: Ejemplos de herramienta de desarrollo IEC 61131.3 ........................................................ 43 Figura 2.23: Componentes de un GRAFCET ........................................................................................... 45 Figura 2.24: Componentes de una Etapa .............................................................................................. 45 Figura 2.25: Bifurcación de transiciones ............................................................................................... 46 Figura 2.26: Acción asociada a la etapa 1 (nivel 1): Avance del carro 1 ............................................... 46 Figura 2.27: Acción asociada a la etapa 1 (nivel 2): AC1....................................................................... 46 Figura 2.28: Transición que une la etapa 1 con la etapa 2 ................................................................... 47 Figura 2.29: Representación literal de la receptividad .......................................................................... 48 Figura 2.30: Representación simbólica de la receptividad .................................................................... 48 Figura 2.31: Estados posibles de la Etapa Ei y sus transiciones ............................................................ 50 Figura 2.32: Divergencia en O ............................................................................................................... 50 Figura 2.33: Convergencia en O ............................................................................................................ 50 Figura 2.34: Divergencia en Y ................................................................................................................ 51 Figura 2.35: Convergencia en Y ............................................................................................................. 51 Figura 2.36: Representación de secuencia única................................................................................... 52 Figura 2.37: Representación de secuencia simultánea ......................................................................... 52 Figura 2.38: Representación de secuencia exclusiva ............................................................................. 53 Figura 2.39: Representación de salto de secuencia............................................................................... 53 Figura 2.40: Representación de paralelismo interpretado .................................................................... 54 Figura 2.41: Normalización de Etapas................................................................................................... 55 Figura 2.42: Proceso de normalización mediante la técnica "asociación etapa-biestable".................. 55 Figura 2.43: Condiciones de activación en lenguaje S7-200 con técnica relé de memoria ................... 56 Figura 2.44: Condiciones de activación en lenguaje S7-200 con técnica biestable ............................... 57 Figura 2.45: Bloques de Control Secuencial........................................................................................... 62 Figura 2.46: Ejemplo de una cadena secuencial en S7-GRAPH ............................................................. 63 Figura 3.1: Representación General de la Solución Propuesta .............................................................. 67 Figura 3.2: Edición del diagrama Grafcet .............................................................................................. 68 Figura 3.3: Programación del proceso automático secuencial ............................................................. 70 Figura 3.4: Estructura de Programa con lista de instrucciones ............................................................. 72 Figura 3.5: Representación gráfica de la estructura de programa ....................................................... 73 Figura 3.6: Representación gráfica en Nivel Grafcet ............................................................................. 73 Figura 3.7: Simulación del proceso automático secuencial ................................................................... 78 Figura 3.8: Generación automática de código de bajo nivel ................................................................. 79 Figura 4.1: Arquitectura basado en Modelo Vista Controlador (MVC) ................................................. 80 Figura 4.2: Diagrama de clases del componente Modelo ..................................................................... 81 Figura 4.3: Captura de pantalla de la vista de Grafcet ......................................................................... 85 Figura 4.4: Ejemplo de código representando una condición simple .................................................... 86 Figura 4.5: Representación gráfica una condición simple ..................................................................... 87 Figura 4.6: Diseño para representar las condiciones usando el patrón Composite .............................. 89 Figura 4.7: Diseño de operadores que pueden graficarse a sí mismos ................................................. 90 Figura 4.8: Diseño de operadores usando el patrón Template para graficar ....................................... 91 Figura 4.9: Diseño de operadores reutilizando la funcionalidad para graficar una etapa ................... 92 Figura 4.10: Implementación del método getCondicion() para el operador compuesto ...................... 93 Figura 4.11: Ejemplo de la definición de una condición usando Grafcet .............................................. 94 Figura 4.12: Ejemplo de transición de etapas en una simulación ......................................................... 96 Figura 4.13: Ejemplo de transición de etapas con una bifurcación ....................................................... 97 Figura 4.14: Ejemplo de transición de etapas con una unión................................................................ 98 Figura 4.15: Diseño para la simulación utilizando el patrón Composite ............................................... 99 Figura 4.16: Diagrama de Clases que representan las condiciones para la simulación ...................... 100 Figura 4.17: Código de la clase Etapa para implementar la simulación ............................................. 101 Figura 4.18: Código de la clase Linea para implementar la simulación .............................................. 102 Figura 4.19: Código de la clase Variable para implementar la interpretación de condiciones ........... 102 Figura 4.20: Código de la clase And para implementar la interpretación de condiciones .................. 103 Figura 5.1: Vista simbólica de la taladradora ..................................................................................... 105 Figura 5.2: Grafcet funcional de la taladradora .................................................................................. 106 Figura 5.3: Vista de pantalla de la tabla de símbolos de la Taladradora ............................................ 107 Figura 5.4: Vista de pantalla del diagrama de etapas de la Taladradora .......................................... 108 Figura 5.5: Vista de pantalla de conexiones de etapas del diagrama de la Taladradora ................... 109 Figura 5.6: Vista de pantalla del menú de edición de etapas.............................................................. 110 Figura 5.7: Vista de pantalla del menú de edición de etiquetas ......................................................... 110 Figura 5.8: Vista de pantalla del diagrama con edición de etiquetas ................................................. 111 Figura 5.9: Vista de pantalla del menú acciones de la Taladradora ................................................... 112 Figura 5.10: Vista de pantalla del menú de condiciones de la Taladradora ....................................... 112 Figura 5.11: Vista de pantalla de edición gráfica de una transición de la Taladradora...................... 113 Figura 5.12: Vista de pantalla de condición de transición 0-1 en modo sentencias........................... 113 Figura 5.13: Vista de pantalla de condición de transición 0-1 en modo gráfico ................................ 114 Figura 5.14: Vista de pantalla transcripción de condiciones ............................................................... 114 Figura 5.15: Vista de Pantalla del diagrama Grafcet completo de la Taladradora ............................ 115 Figura 5.16: Vista de pantalla del estado inicial de Simulación .......................................................... 116 Figura 5.17: Vista de pantalla del proceso de simulación de la Taladradora en estado de reposo .... 116 Figura 5.18: Vista de pantalla visualización de condiciones en simulación de la Taladradora ......... 117 Figura 5.19: Vista de pantalla franqueo de la transición 0-1 de la Taladradora ................................ 117 Figura 5.20: Vista de pantalla del proceso con estado inalterable de salto de etapas ....................... 118 Figura 5.21: Vista de pantalla con el código de programa generado automáticamente ................... 119 Figura 5.22: Vista del Procedimiento aplicado anterior al Proyecto de Automatización .................... 121 Figura 5.23: Vista del Procedimiento posterior al Proyecto de Automatización finalizado ................ 121 Figura 5.24: Vista General de la Instalación ........................................................................................ 122 Figura 5.25: Vista del Tablero de Comando General del Automatismo .............................................. 123 Figura 5.26: Vista de un Autoelevador para Transporte de Pallets .................................................... 123 Figura 5.27 Diagrama general de la instalación ................................................................................. 124 Figura 5.28: Componentes del Automatismo del Proceso................................................................... 124 Figura 5.29: Descripción de los componentes para la automatización de la pinza de acopio ............ 125 Figura 5.30: Ejemplo del diseño del automatismo de la pinza ............................................................ 127 Figura 5.31: Fragmento de código de programa en lenguaje de PLC ................................................. 128 Figura 5.32: Vista de pantalla de la tabla de símbolos de la pinza de acopio..................................... 129 Figura 5.33: Diagrama Funcional de Ejecución del ciclo ..................................................................... 130 Figura 5.34: Vista de pantalla con etapas y conexiones del Grafcet de la Pinza de Acopio ................ 131 Figura 5.35: Vista de pantalla con etiquetas en etapas del Grafcet de la Pinza de Acopio ................ 132 Figura 5.36: Vista de pantalla edición gráfica de condición 0-1 del Grafcet de la Pinza de Acopio . 133 Figura 5.37: Vista de pantalla condiciones etapa 0-1 Grafcet de la Pinza de Acopio ........................ 133 Figura 5.38: Vista de pantalla con etiquetas en transiciones Grafcet de la Pinza de Acopio.............. 134 Figura 5.39: Vista de pantalla de edición de acciones Etapa 1 del Grafcet de la Pinza de Acopio ..... 135 Figura 5.40: Vista de pantalla simulación estado de reposo del Grafcet de la Pinza de Acopio ...... 136 Figura 5.41: Vista real de la Pinza de Acopio en estado inicial del ciclo ............................................. 137 Figura 5.42: Vista de pantalla consulta de condición Grafcet de la Pinza de Acopio .......................... 137 Figura 5.43: Vista de pantalla franqueo de transición 0-1 Grafcet de la Pinza de Acopio .................. 138 Figura 5.44: Enhebrado de Uñas de la pinza para carga de pallets .................................................... 138 Figura 5.45: Vista real de la Pinza en Estado de Carga de Pallet ........................................................ 139 Figura 5.46: Vista real de la pinza con el Estado del Sistema en Etapa 2 .......................................... 140 Figura 5.47: Vista real de la pinza con el Estado del Sistema en Etapa 3 ........................................... 140 Figura 5.48: Vista real de la pinza con el Estado del Sistema en Etapa 3 ........................................... 141 Figura 5.49: Vista real de la pinza con el Estado del Sistema en Etapa 6 ........................................... 141 Figura 5.50: Vista real de la pinza con el Estado del Sistema en Etapa 7 ........................................... 142 Figura 5.51: Vista de pantalla Condiciones de Transición 1-2 con Operador OR ................................ 143 Figura 5.52: Vista de la situación con tarimas defectuosas ................................................................ 143 Figura 5.53: Ilustración Incidente provocado por tarimas defectuosas ............................................. 144 Figura 5.54: Vista de pantalla Condiciones de Transición 1-2 con Operador AND ............................. 144 Figura 5.55: Vista de pantalla de la condición de transición 2-3 Grafcet de la Pinza de Acopio ........ 145 Figura 5.56: Ilustración Incidente provocado por sobre- acopio de Pallets........................................ 145 Figura 5.57: Vista de pantalla de la condición de transición 2-3 modificada ..................................... 146 Figura 5.58: Vista de pantalla código de programa generado de la Pinza de Acopio ........................ 147 Figura 6.1: Dinamización del Sistema en Etapa 2: Ascenso veloz en Mesa......................................... 152 Figura 6.2: Dinamización del Sistema en Etapa 3: Traslación Veloz a Boxes ...................................... 152 Figura A- 1: Vista de la Interfaz de edición de Grafcet ........................................................................ 157 Figura A- 2: Vista de pantalla de generación de código ...................................................................... 160 Figura A- 3: Vista de pantalla de asignación de bits ........................................................................... 161 Figura A- 4: Vista de pantalla de tabla de símbolos ............................................................................ 161 Figura A- 5: Vista de pantalla de edición de condiciones .................................................................... 162 Figura A- 6: Vista de pantalla de edición de acciones ......................................................................... 165 Índice de Tablas Tabla 3.1: Sintaxis de operaciones lógicas con bits ............................................................................... 71 Tabla 3.2: Tipos de área de memoria .................................................................................................... 75 Tabla 3.3: Modificadores de memoria .................................................................................................. 75 Tabla 3.4: Juego de instrucciones básicas de un API Siemens ............................................................... 76 Tabla 3.5: Juego de instrucciones acotadas del proyecto ..................................................................... 77 Introducción Capítulo 1 - Introducción En las últimas décadas se ha seguido la tendencia de automatizar de manera progresiva procesos productivos de todo tipo. Esta tendencia ha sido y sigue siendo posible gracias al desarrollo y abaratamiento de la tecnología necesaria. La automatización de los procesos de producción persigue los objetivos de: Mejorar la calidad y mantener un nivel de calidad uniforme. Producir las cantidades necesarias en el momento preciso. Mejorar la productividad y reducir costes. Hacer más flexible el sistema productivo (facilitar los cambios en la producción). Estos objetivos se han convertido de hecho en requisitos indispensables para mantener la competitividad, por lo que el aumento del nivel de automatización de los procesos es simplemente una necesidad para sobrevivir en el mercado actual. Se pueden distinguir varios niveles en la automatización de un proceso productivo: 1. Nivel de máquina. En este nivel se considera la automatización de una máquina que realiza una tarea productiva simple determinada. 2. Nivel de célula (de grupo). En este nivel se considera el control automatizado de un conjunto de máquinas que trabajan conjunta y coordinadamente para realizar un proceso de producción más complejo. 3. Nivel de planta. En este nivel se considera el control automatizado de toda la planta de producción que trabaja de forma coordinada para cumplir unos objetivos de producción global de la fábrica. 4. Nivel de empresa. En este nivel se considera el conjunto de la empresa (gestión, ventas, producción). Los niveles 3 y 4 requieren de una red informática que permita el flujo de todos los datos de la empresa relacionados con la producción y la gestión. En esencia estos niveles se implementan mediante ordenadores conectados entre sí y con las células de producción del nivel 2. En el nivel 2 puede haber una red local de comunicación entre los distintos elementos de una célula (si las máquinas están muy separadas). La implementación de los niveles 1 y 2 se realiza mediante sensores, actuadores y equipos de control. Un automatismo es en esencia una máquina o un proceso automatizado. Los automatismos definen, por tanto, los niveles 1 y 2. 1.1 Definición de Automatismo Se define un sistema (máquina o proceso) automatizado como aquel capaz de reaccionar de forma automática (sin la intervención del operario) ante los cambios que se producen en el mismo, realizando las acciones adecuadas para cumplir la función para la que ha sido diseñado (Bolton, 1996). 12 Introducción Figura 1.1: Estructura típica de un sistema automatizado La Figura 1.1 muestra la estructura típica de un sistema automatizado (Peñin, Carrera, & Barrientos, 1999). Como se puede observar, se trata de un sistema en bucle cerrado, donde la información sobre los cambios del proceso captada por los sensores es procesada dando lugar a las acciones necesarias, que se implementan físicamente sobre el proceso por medio de los actuadores. Este sistema de control se comunica eventualmente con el operador, recibiendo de éste consignas de funcionamiento, tales como marcha, paro, cambio de características de producción, etc. y comunicándole información sobre el estado del proceso (para la supervisión del correcto funcionamiento). Se denomina automatismo al sistema completo, aunque con este término suele hacerse referencia fundamentalmente al sistema de control, ya que es éste el que produce de forma automática las acciones sobre el proceso a partir de la información captada por los sensores. Las señales de entrada y de salida pueden ser de cualquier tipo, sin embargo el concepto tradicional de automatismo se utiliza para sistemas de eventos discretos (también llamados sistemas secuenciales) en los que esas señales son binarias, es decir, solo pueden tomar 2 valores, activa o inactiva (estos valores suelen representarse como un 1 ó un 0). En ese caso el sistema de control implementa el algoritmo de lógica binaria que relaciona los valores que van tomando en cada instante las entradas (1 ó 0) con los valores que deben ir tomando en cada instante las salidas (también 1 ó 0) para que el sistema funcione adecuadamente. 1.2 Clasificación Tecnológica En función de la tecnología empleada para la implementación del sistema de control, se puede distinguir entre automatismos cableados y automatismos programados (Sánchez Llopis, Romero Pérez, & Ariño Latorre, 2010). Automatismos cableados. Se implementan por medio de uniones físicas entre los elementos que forman el sistema de control (por ejemplo, contactores y relés unidos entre sí por cables eléctricos). La estructura de conexionado entre los distintos elementos da lugar a la función lógica que determina las señales de salida en función de las señales de entrada. Se pueden distinguir tres tecnologías diferentes: 13 Introducción Fluidica (neumática o hidráulica). Eléctrica (relés o contactores). Electrónica estática (puertas lógicas y biestables). Los inconvenientes fundamentales de los automatismos cableados son: Ocupan mucho espacio. Son muy poco flexibles. La modificación o ampliación es difícil. Solo permiten funciones lógicas simples. No sirven para implementar funciones de control o de comunicación complejas. Las ventajas de los automatismos cableados son: Pueden ser muy robustos. Bajo coste para sistemas muy sencillos. Es una tecnología muy fácil de entender por cualquier operario. En general se puede afirmar que los automatismos cableados solo tienen utilidad para resolver problemas muy sencillos (por ejemplo un arranque estrella-triángulo de un motor de inducción). Automatismos programados. Se implementan por medio de un programa que se ejecuta en un microprocesador. Las instrucciones de este programa determinan la función lógica que relaciona las entradas y las salidas. Se pueden distinguir 3 formas de implementación Autómata programable industrial. Hoy por hoy es el que más se utiliza en la industria. Es un equipo electrónico programable en un lenguaje especifico, diseñado para controlar en tiempo real y en ambiente de tipo industrial procesos secuenciales. Se utilizan para el control de máquinas y procesos (Peñin, Carrera, & Barrientos, 1999). En el Capítulo 2.1 se abordará en profundidad sobre el mismo ya que representa uno de los dos ejes principales, junto a los diagramas GRAFCET, del Proceso de automatización y en particular del presente proyecto. Ordenador (PC industrial). Cada vez se utilizan más. Son ordenadores compatibles con los PC de sobremesa en cuanto a software, pero cuyo hardware está especialmente diseñado para ser robusto en entornos industriales. Microcontrolador. Son circuitos integrados (“chips”) programables, que incluyen en su interior un microprocesador y la memoria y los periféricos necesarios. Para utilizarlos, normalmente se diseña una tarjeta electrónica específica para la aplicación, que incluye el propio microcontrolador y los circuitos electrónicos de interfaz necesarios para poder conectarse a los sensores y actuadores. Se utilizan sobre todo para sistemas de control de máquinas de las que se van a fabricar muchas unidades, de forma que la 14 Introducción reducción de coste por el número de unidades fabricadas justifica la mayor dificultad (y mayor coste) del diseño. Las ventajas más importantes de los automatismos programados son: Permiten una gran flexibilidad para realizar modificaciones o ampliaciones. Permiten implementar funciones de control y de comunicación complejas. Ocupan poco espacio. Los inconvenientes respecto de los sistemas cableados son fundamentalmente el mayor coste (solo si el sistema es muy sencillo), la menor robustez y la mayor complejidad de la tecnología. Sin embargo estos inconvenientes cada vez lo son menos, pues el coste se reduce continuamente, cada vez se diseñan equipos más robustos, y los sistemas de programación son cada vez más sencillos. En resumen, se puede afirmar que la tecnología programada (y en especial los autómatas programables) es superior a la tecnología cableada, salvo en automatismos que sean extremadamente simples. La naturaleza física de las señales de entrada y salida depende de la tecnología del automatismo. Por ejemplo, un automatismo puramente neumático tiene como entradas señales de presión de aire, y dan como salida señales depresión de aire. Lo más habitual en la industria son los automatismos de naturaleza eléctrica (cableados o programados). En este caso las señales de entrada de salida son señales eléctricas. Los sensores se encargaran de convertir las magnitudes físicas en señales eléctricas, mientras los actuadores transforman las señales eléctricas en acciones físicas sobre el proceso. 1.3 Motivación La automatización de los procesos productivos se establece como una herramienta fundamental que permite a las empresas un desarrollo propio, dinámico y competitivo, facilitando la relación entre las diferentes áreas de la organización o empresa. Por lo que es muy importante encontrar una buena metodología o procedimiento adecuado y eficaz, que permita a la industria regional, automatizar bienes de producción particularmente con el uso de PLC´s. El diseño, la programación y la operación de los sistemas requieren en la mayoría de los casos de especialistas. Sin embargo, cuando nos hallamos ante la tarea de automatizar un proceso, nos encontramos con que la naturaleza de este proceso es, en la mayoría práctica de las situaciones, secuencial. Una serie de actividades y operaciones a realizar conforme a una determinada secuencia, que determinan el proceso productivo en sí. A pesar de la elevada diversidad de tecnologías y dispositivos que puedan estar implicados en la realización de estas operaciones, desde el punto de vista de automatizar su operación, es esta ordenación secuencial lo que es importante. De esta forma, se tratará de tener claro, en cada caso, que es lo que determina que haya terminado una operación (en el fondo, una condición lógica), así como la actividad a realizar durante esta operación. De hecho, nos estamos refiriendo a un sistema secuencial, y la automatización de un sistema de este tipo la llevaremos a cabo 15 Introducción mediante un automatismo que será una combinación de sistema secuencial y combinacional –secuencia de acciones/operaciones de control reguladas por expresiones lógicas. Representación de los Automatismos La función lógica implementada por un automatismo se puede representar de diversas formas. Las 2 formas tradicionales son la lógica de contactos y las puertas lógicas, que permiten representar funciones lógicas sencillas. Hay otras formas de representación del automatismo que están a un nivel superior. Sirven para definir funcionalmente un automatismo secuencial completo. Entre ellas se pueden destacar los diagramas de flujo y el GRAFCET (García Higuera, 2005). Lógica de contactos (de relés) Las variables binarias se representan mediante contactos que están cerrados o abiertos según esté activa (1) o inactiva (0) la variable en cuestión. La combinación (conexión) de contactos en serie y paralelo permite representar una función lógica. Por ejemplo, la Figura 1.2 representa la función lógica y = a·b+c. (Garzón Vásquez, 2013) Figura 1.2: Función lógica y = a . b + c. La línea vertical izquierda representa tensión (por ejemplo 24 V) mientras la línea vertical derecha representa la masa (0 V). Si a y b están activas los contactos están cerrados, y la salida (bobina) y queda sometida a 24 V, con lo que se activa. Lo mismo sucede si c está activa. El origen de esta representación está en la implementación física mediante contactores, que fue la primera forma que se utilizó para implementar los automatismos. De hecho la representación del diagrama de contactos es directamente el cableado de los contactores. Hoy en día la mayoría de automatismos son programados, sin embargo ésta sigue siendo la forma más habitual de representar las ecuaciones lógicas de los automatismos. La representación de contactos suele utilizar los símbolos de la Figura 1.3, en lugar de los interruptores. 16 Introducción Figura 1.3: Representación en diagrama de contactos de y = a . b + c. Puertas lógicas La función lógica se representa mediante compuertas lógicas (puertas AND,NAND, OR y NOR). Por ejemplo, la Figura 1.4 representa la función lógica y = a · b + c. Es la representación utilizada cuando el automatismo se implementa con circuitos electrónicos digitales (Hill & Peterson, 1979). Figura 1.4: Representación mediante puertas lógicas y = a . b + c. Diagrama de flujo Es una forma de representación de más alto nivel que las dos anteriores. Consiste en un diagrama con dos tipos de elementos, los nodos de decisión y los nodos de actuación o tratamiento. Por ejemplo, el diagrama de flujo de un arrancador estrella-triángulo se puede representar mediante diagrama de flujo tal y como muestra la Figura 1.5. Figura 1.5: Diagrama de Flujo de un arrancador estrella/triángulo 17 Introducción Esta forma de representación de alto nivel explica el funcionamiento del automatismo. Sin embargo, para la implementación final en el equipo de control(autómata programable por ejemplo) es necesario traducir el diagrama de flujo a una representación de bajo nivel (como el diagrama de contactos, por ejemplo) Grafcet También se trata de una representación de alto nivel de los automatismos (Boix Aragonés, Sudía Andreu, & Bergas Jané, 1997). Se llama también diagrama de etapatransición. En esta representación se tienen cuadrados que representan las etapas del automatismo, y transiciones entre ellas. El ejemplo del arrancador anterior se puede representar como se muestra en la Figura 1.6: Figura 1.6: Diagrama Grafcet del arrancador estrella/triángulo Estas formas de representación del automatismo de alto nivel son muy útiles para explicar el funcionamiento del proceso y facilitar el diseño. La implementación final, sin embargo, se hace generalmente con la representación de contactos, por lo que es necesario traducir estos diagramas a esa forma de representación de bajo nivel. Algunos autómatas programables industriales permiten ser programados utilizando diagramas GRAFCET de alto nivel, realizándose de forma automática la traducción al lenguaje de bajo nivel de forma transparente para el usuario. En el Capítulo 2.2 Grafcet se abordará esta metodología con nivel de detalle exhaustivo ya que representa la herramienta más apropiada que nos permita vincular en un grado de alto nivel el sistema a automatizar con el lenguaje de bajo nivel interpretado por el Controlador Lógico Programable (PLC). 1.4 - Trabajo realizado Dada la complejidad que conlleva el diseño de sistemas de Automatización Industrial, se llevó a cabo una solución que ayude a usuarios inexpertos en el desarrollo de proyectos que involucren procesos secuenciales, tomando como referencia la representación Grafcet antes mencionada y aportando herramientas de alto nivel que permitan abstraerse de los lenguajes propios, de bajo Nivel, de los Autómatas Programables. 18 Introducción Como resultado del trabajo se generó una herramienta que se integra a un entorno de desarrollo, la cual permite brindar asistencia para la correcta implementación de los conceptos analizados. La aplicación desarrollada permite definir como entrada una lista de elementos intervinientes en el proceso automático, las variables de proceso, incluyendo una descripción simbólica de dichos elementos. Una vez definida la lista anteriormente mencionada, el usuario cuenta con una interfaz flexible e intuitiva que le permite trasladar el esquema del ciclo del proceso, a una representación estándar compatible con el funcionamiento del autómata Programable, basándose en la metodología Grafcet. La herramienta brinda al usuario ciertas particularidades adicionales en cuanto al concepto de diagramar las condiciones lógicas de cada punto del ciclo, lo que serían las transiciones entre dos etapas consecutivas del diagrama Grafcet. Al finalizar el diseño del proceso mediante la representación Grafcet, el usuario cuenta con la posibilidad de efectuar la simulación del comportamiento del sistema, a través de la interacción de forzado de valores de variables, lo que brinda la ventaja de permitir efectuar todos los cambios necesarios en el desarrollo, antes de implementarse el automatismo en el propio Autómata programable, evitando así potenciales riesgos de incidentes que presentaría la prueba real y física. Una vez efectuadas todas las pruebas de simulación y correcciones/ajustes del sistema, la herramienta provee la posibilidad de traducir el diseño del diagrama Grafcet al lenguaje propio del Autómata Programable. En el presente proyecto se ha tomado como base de lenguaje de programación un idioma específico, correspondiente a un fabricante particular de Autómatas Programables tal es el caso de Siemens, pero quedará planteado como posible trabajo futuro, ampliar el espectro a un mayor número de lenguajes específicos de acuerdo a los distintos fabricantes aprovechando la flexibilidad del diseño e implementación de la herramienta. En la Figura 1.7 se observa la representación de la herramienta, compuesta de tres módulos bien definidos, y cómo los usuarios acceden a la misma a través de una interfaz intuitiva que permitirá desarrollar un sistema de automatización Industrial sin requerir conocimientos expertos de la lógica de bajo nivel utilizada por un Autómata Programable. 19 Introducción Figura 1.7: Diagrama general del trabajo realizado 20 Introducción 1.5 - Organización del trabajo A continuación se detalla la estructura general del presente trabajo dando una breve descripción de los temas que se abordarán en cada capítulo. En el capítulo 2 se van a describir varios conceptos importantes, tales como la descripción de los sistemas de dispositivos intervinientes para llevar a cabo las tareas de automatización de procesos industriales, tal el caso de Autómatas Programables (PLCs) con algún ejemplo concreto de equipos de existencia en el mercado actual. También se describirá la herramienta de representación de Automatismos (GRAFCET) con las ventajas pertinentes que ofrece en el modelado de un sistema de proceso secuencial. Estos apartados serán necesarios para poder comprender el alcance de la aplicación y los beneficios que brinda para atacar los problemas de diseño en el desarrollo de un sistema de aplicación de automatismos industriales. También se mostrarán algunos sistemas comerciales relacionados al área con sus respectivas ventajas y limitaciones. Luego, en el Capítulo 3 se explicará cuál es la solución propuesta, describiendo el diseño arquitectónico de la herramienta desarrollada, el entorno sobre el cual se ejecuta y las principales características de la misma. También, en dicho capítulo, se presentará la estructura del sistema, incluyendo su funcionamiento general. A lo largo del Capítulo 4 se va a detallar el diseño de la aplicación desarrollada, para ello se mostrará el esquema general de la misma y luego se explicarán en detalle cada uno de sus módulos. En el Capítulo 5 se exhibirá el aspecto práctico del asistente a través de casos de estudio realizados, los cuales permitirán demostrar el funcionamiento del mismo. Se presentarán dos casos de estudio, donde se mostrará la ejecución de la aplicación en ambientes simulados. En uno de ellos se describirá un caso concreto y real, realizado en una Planta Industrial, y el cual se encuentra operativo Finalmente en el Capítulo 6 se realizará un resumen de la elaboración del trabajo, a partir de la misma se presentará una conclusión, exponiendo las principales ventajas y marcando las limitaciones, de las cuales derivan posibles trabajos futuros. 21 Marco Teórico Capítulo 2 - Marco Teórico Este capítulo tiene por objetivo posicionar el trabajo en el contexto de los conceptos y Nociones del área de Automatismos Industriales. Con este fin se presenta en primer lugar una explicación acerca de los dispositivos Autómatas Programables Industriales en general. Luego, se realiza una descripción de una de las herramientas de representación de Automatismos, tal es el caso de Grafcet como representación de alto nivel de los mismos. 2.1 El Autómata Programable Industrial A continuación nos enfocaremos en el análisis detallado de lo que es un Autómata Programable Industrial (API), desde su arquitectura física hasta los lenguajes soportados para la programación de los Automatismos. 2.1.1 Definición Un autómata programable industrial (API) es un equipo electrónico, programable en lenguaje no informático, diseñado para controlar en tiempo reala en ambiente de tipo industrial procesos secuenciales (Clements-Jewery & Jeffcoat, 1996); (Karl-Heinz & Tiegelkamp, 2001). El autómata programable también se conoce como PLC, que es la sigla de Programmable Logic Controller. Tal y como se resume en la definición, se trata de un computador especial, tanto en el software como en el hardware. En el software, porque se programa en un lenguaje especial diseñado específicamente para generar de forma sencilla el programa que implementa el algoritmo de control de procesos secuenciales (de sistemas de eventos discretos), y porque el algoritmo de control programado es ejecutado de forma periódica en un ciclo temporal que es lo bastante breve como para poder controlar los procesos entiempo real. En el hardware, porque utiliza componentes robustos que soportan condiciones de trabajo adversas, como las que se dan en ambientes industriales (polvo, temperatura, vibraciones, etc.), y porque su constitución física incluye los circuitos de interfaz necesarios para conectarlo de forma directa a los sensores y actuadores del proceso. 2.1.2 Arquitectura del API La Figura 2.1 muestra de forma esquemática la arquitectura interna de un autómata programable industrial típico. Como computador que es, tiene un procesador que es el que ejecuta el programa almacenado en la memoria de programa. La memoria de programa y la de datos están físicamente separadas, constituyendo una arquitectura tipo Harvard. Además, la memoria de datos está separada en dos tipos, que en la figura se denominan memoria de datos y memoria interna. Esta última se utiliza para almacenar los valores de las señales de entrada y salida, por lo que están conectadas con los módulos de entradas y salidas, que son los elementos de interfaz donde se conectan los sensores y actuadores del proceso. También dispone de periféricos para comunicar con otros dispositivos, como pantallas táctiles, ordenadores u otros autómatas. 22 Marco Teórico Figura 2.1: Arquitectura de un Autómata Programable Industrial Tipos de memoria. Clasificación física Antes de describir cómo es cada uno de los bloques de memoria que se pueden encontrar en un autómata programable, presentamos un pequeño resúmen de los tipos de memoria existentes desde el punto de vista de su constitución física: Memoria RAM (Random Acces Memory ). Es una memoria volátil, es decir, que se borra si se quita la alimentación. Se puede distinguir entre RAM estática (que permanece mientras no se quite la alimentación) y RAM dinámica, que se va borrando aunque se mantenga la alimentación, por lo que requiere de un sistema que refresque (vuelva a grabar) los valores que almacena cada cierto tiempo. La memoria RAM de los PC es de este tipo. La memoria RAM utilizada en los autómatas programables suele ser estática. Memoria RAM con batería. La batería mantiene los datos aunque se apague la alimentación. Es bastante usual en los autómatas programables para mantener el programa y algunos datos críticos aunque se quite la alimentación. El inconveniente que tienen es que la batería se tiene que cambiar cada cierto tiempo (varios años). Memoria ROM (Read Only Memory ). Grabable sólo una vez en fábrica(cuando se fabrica el chip). No se puede borrar. Memoria PROM (Programmable Read Only Memory ). Grabable sólo una vez, pero se graba después de fabricar el chip (la puede grabar el propio usuario). Se llama también OTP (One Time Programmable) PROM. Una vez programada no se puede borrar. Memoria EPROM (Electrically Programmable Read Only Memory ). Es una memoria no volátil (no se borra aunque se quite la alimentación),pero que, además, se puede borrar con luz ultravioleta y volver a grabar eléctricamente. 23 Marco Teórico Memoria EEPROM (Electrically Erasable and Programmable Read Only Memory ). Es una memoria no volátil, es decir, que no se borra si sequita la alimentación, pero que es grabable y borrable eléctricamente. La memoria FLASH EEPROM es una memoria de este tipo. Cada vez se utiliza más, sustituyendo a la RAM con batería, ya que no necesita batería para mantener el programa, y éste se puede modificar. Bloques de memoria en un API. Clasificación funcional A continuación se describen los bloques de memoria que suelen tener los autómatas programables industriales, incluyendo el tipo de memoria física y su función: Memoria de programa. Contiene el programa (instrucciones) que se ejecutan en el procesador. Se puede dividir en dos partes: Una parte ROM que contiene el programa monitor (para comunicar el autómata con los módulos de programación). Este programa monitor es fijo. Una parte RAM con batería (puede ser también FLASH EEPROM)en la que se almacena el programa del usuario, que implementa el algoritmo de control del proceso. Evidentemente, este programa se mantiene aunque se desconecte el autómata. Memoria interna. Almacena los valores de entradas y salidas, además de otras variables internas del autómata. En ella se almacenan variables de 1 solo bit, es decir, variables que, aunque estén organizadas en bytes(grupos de 8 bits), se puede acceder a cada uno de los bits de forma independiente para leer o escribir. En esta zona de memoria se leen los valores de las entradas (donde están conectados los sensores), y se escriben los valores de las salidas (donde están conectados los actuadores). Memoria de datos. Contiene datos de configuración o parámetros de funcionamiento del autómata y del proceso, o datos de propósito general. En ella se almacenan variables tipo byte (8 bits) o word (16 bits). Tanto la memoria interna como la de datos suelen tener una parte de RAM normal (volátil) y una parte de RAM con batería o EEPROM para almacenar datos que no se deben perder cuando se desconecta el autómata. 2.1.3 Constitución Física La mayoría de autómatas programables del mercado son modulares, es decir, están formados por módulos que pueden conectarse entre sí, permitiendo una gran flexibilidad en la configuración. Las Figura 2.2, Figura 2.3 y Figura 2.4 muestran algunos de los autómatas modulares comerciales. Figura 2.2: Autómata modular CS1 de Omron Electronics (Omron Industrial Automation) 24 Marco Teórico Figura 2.3: Autómata modular M340 de Schneider Electric (Schneider Electric) Figura 2.4: Autómata modular S7-300 de Siemens (Siemens, 2001) El módulo principal es el de CPU, que contiene el procesador, la memoriay algunos controladoresde periféricos (puerto serie, por ejemplo). En algunosmodelos, el módulo de CPU contiene además algunas entradas y/o salidasdigitales. El módulo de fuente de alimentación da la tensión (normalmente 24 V) para alimentar a todos los módulos del equipo. Junto con el módulo de CPU forman la estructura mínima necesaria. A veces hay módulos que requieren una fuente de alimentación especial, además de la general del equipo. En la Figura 2.5 se aprecian todos los elementos que constituyen un autómata modular. Figura 2.5: Elementos constitutivos de un autómata modular Los módulos adicionales se conectan al módulo de CPU por medio del bus. Respecto de los módulos entre los que se puede elegir para definir la configuración necesaria para controlar un proceso, se pueden distinguir: Módulos de entradas digitales. Módulos de salidas digitales. Módulos de entradas analógicas. Módulos de salidas analógicas. Módulos de comunicación (RS232, RS485, Devicenet, Profibus, Ethernet,etc.). 25 Marco Teórico Módulos de control PID. Módulos de control de posición de ejes. También hay autómatas que se denominan compactos, que incluyen en un único elemento, la fuente de alimentación, la CPU y algunas entradas y salidas digitales y/o analógicas, además de algún puerto de comunicación. Estos no son tan flexibles, aunque en algunos casos también admiten la ampliación de entradas o salidas digitales, pero en cambio son más baratos y pueden ser la mejor solución para aplicaciones sencillas. Las Figura 2.6, Figura 2.7 y Figura 2.8 muestran algunos autómatas compactos comerciales. Figura 2.6: Autómata compacto SP1E de Omron Electronics (Omron Industrial Automation) Figura 2.7: Autómata programable compacto M238 de Schneider (Schneider Electric) Figura 2.8: Autómata programable compacto S7-200 de Siemens (Siemens.com) 26 Marco Teórico 2.1.4 Descripción Funcional El API es un computador, y por lo tanto, su funcionamiento consiste en la ejecución de un determinado programa almacenado en la memoria de programa. Se puede distinguir dos modos de funcionamiento: modo de programación y modo de ejecución. Modo de programación. En este modo de funcionamiento el programa monitor que reside en la parte ROM de la memoria de programa comunica el API con el elemento de programación (normalmente un PC), para que desde éste se le trasvase el programa que implementa el algoritmo de control que se desea ejecutar. En este modo, el API no está controlando el proceso. Modo de ejecución (modo RUN). En este modo, se ejecuta el programa del usuario que implementa al algoritmo de control, con lo que el autómata controla el proceso. En este modo, cuando se inicializa el autómata, el programa monitor salta a la dirección donde está el programa de control, y se empieza a ejecutar éste. La ejecución del programa de control se lleva a cabo de forma cíclica, ejecutando ciclos de scan de forma indefinida Ciclo de trabajo o de Scan Se llama ciclo de trabajo (o de scan) al conjunto de tareas que el autómata lleva a cabo (instrucciones que se ejecutan) de forma cíclica cuando está controlando un proceso. El ciclo de trabajo más habitual tiene la estructura de la Figura 2.9. Figura 2.9: Ciclo de trabajo de un API La inicialización se lleva a cabo una sola vez siempre que se pone en marcha el Autómata. Los procesos comunes son funciones de autodiagnóstico y de programación del WatchDog (perro guardián). No dependen del proceso que se esté controlando. El perro guardián es un temporizador de seguridad que se utiliza para detectar bucles infinitos en el programa de control. Cada ciclo de scan, ese temporizador se borra, por lo que vuelve a empezar a contar desde cero. Si pasa demasiado tiempo y el temporizador no es borrado, éste llega al final de cuenta, y produce un error de bucle infinito. Tiempos típicos del periodo máximo del perro guardián están del orden de los 100 ms. 27 Marco Teórico La gestión de periféricos gestiona los puertos de comunicaciones (comunicación con un ordenador, con un terminal HMI, con otro autómata, etc.) El programa de usuario se ejecuta instrucción a instrucción, de forma secuencial. Las instrucciones (líneas) del programa de usuario son las que implementan la lógica de control del proceso. Todas estas instrucciones se ejecutan utilizando los valores almacenados en la memoria interna de entradas, y dan como resultado un cambio en la memoria interna de salidas. El refresco de E/S significa la actualización de la memoria interna de entradas con los valores actuales de las entradas (de los sensores), y la actualización de las salidas (actuadores) con los valores almacenados en la memoria interna de salidas. Esto quiere decir que si en medio de un ciclo de scan cambia el estado de un sensor, ese cambio no tendrá ningún efecto en el programa hasta que se ejecute este bloque de refresco de entradas y salidas. De la misma forma, aunque el programa de usuario modifique el valor de una salida, ese cambio no llegará al actuador correspondiente hasta que se ejecute el bloque de refresco de E/S. El tiempo de scan es el tiempo que tarda el autómata en realizar un ciclo completo. Este depende de la velocidad de la CPU, que se puede medir mediante el tiempo de ejecución de una instrucción de la CPU (que depende del tipo de instrucción) o por el tiempo que tarda en ejecutar 1024instrucciones, y de la longitud del programa de usuario. Valores típicos del tiempo de scan están en el orden de varios milisegundos. El tiempo total de un ciclo de trabajo para un autómata determinado es variable, en función del tamaño (número de instrucciones) del programa de usuario. Incluso para un mismo programa de usuario, el tiempo de scan puede variar en función de las instrucciones que se ejecuten, pues puede haber instrucciones de salto o instrucciones condicionadas que no siempre se ejecutan. Se define el tiempo de respuesta como el tiempo que tarda en cambiar una salida en relación al cambio de una entrada. Este tiempo es importante, pues determina la rapidez con que el autómata reacciona ante cambios del proceso. El tiempo de respuesta es variable y depende del tiempo de scan, del tiempo de retraso de activación/desactivación de los dispositivos físicos de entradas y salidas, y del momento en que se produce el cambio de la entrada. El peor caso es aquel en el que la entrada cambia justo después de que se haya refrescado la memoria interna de entradas. En ese caso, se ejecuta un ciclo de programa completo en el que el nuevo valor de esa entrada no es tenido en cuenta. Después se actualiza la memoria de entradas, con lo que se lee el valor de la entrada. A continuación, se ejecuta otro ciclo de programa en el que el nuevo valor de la entrada sí se tiene en cuenta, para después actualizar las salidas. El tiempo de respuesta máximo es, pues: Trespmax = 2Tciclo + Tout 28 Marco Teórico dondeTout es el tiempo que tarda el dispositivo físico de salida en activar realmente la salida, y que depende del tipo de salida (relé, transistor o triac). 2.1.5 Unidades De Programación Las unidades de programación son los periféricos más comunes que se utilizan al trabajar con los API. Estas unidades son las que permiten introducir en la memoria del autómata el programa de usuario que servirá para controlar el proceso. Las más utilizadas son: la consola de programación y el PC. Consola de programación La consola de programación es un dispositivo específico para programar el autómata. Consta de un incómodo teclado y una pequeña pantalla. Se comunica con el autómata por medio del puerto serie o de un puerto especial de periféricos (situados en el módulo de CPU). Introducir programas mediante la consola resulta engorroso y lento. Normalmente tienen utilidad para realizar pequeñas modificaciones en los programas de autómatas que ya están instalados en planta, debido a que son de pequeño tamaño (cómodos de transportar)y se alimentan directamente del autómata. Ordenador personal El elemento más utilizado para programar los API es el ordenador personal. Se conecta al autómata mediante el puerto serie RS232 o un puerto USB (normalmente). Cada fabricante de autómatas dispone de un software que permite la edición de programas, la depuración, la compilación y la carga del mismo en el autómata. También permite ejecutar el programa en el autómata y tener acceso al mismo tiempo a las distintas variables, lo que permite la depuración y detección de errores. Unidades HMI Además de las unidades de programación, podemos destacar otros periféricos muy utilizados que son las unidades HMI (Human Machine Interface). Son unidades que disponen de un teclado y una pantalla (que puede ser bastante grande), o bien únicamente de una pantalla táctil. Se utilizan para mostrar al operador el estado del proceso y permitir la introducción de consignas (órdenes de marcha, de paro, cambio de parámetros de funcionamiento, etc.). Estas unidades contienen un procesador y una memoria no volátil en la que se programa la aplicación de interfaz con el usuario. Se programan por medio de un ordenador por el puerto serie o un puerto USB con el software adecuado, y una vez programadas se comunican con el autómata por el puerto serie o por el puerto de periféricos (aunque también se pueden comunicar por medio de una red de mayor nivel, como Ethernet). En la Figura 2.10 se muestra un terminal táctil comercial. 29 Marco Teórico Figura 2.10: Terminal táctil programable KTP 1000 Basic de Siemens 2.1.6 Programación de los Autómatas Programables Industriales La forma más común de programar un autómata es mediante un ordenador personal con el software adecuado. En primer lugar se debe configurar el equipo (seleccionar el tipo de autómata y los módulos de entradas/salidas que se tiene). Después se introduce el programa de control (en el lenguaje adecuado), y por último, se carga este programa en el autómata para proceder a su verificación (se ejecuta el programa comprobando la evolución de las distintas variables). Antes de introducir el programa es conveniente hacer una lista de las variables de entrada y salida del proceso, y su asignación a variables internas en la memoria del autómata. Algunos software de programación permiten simularla ejecución del programa sin necesidad de cargarlo en un autómata, por lo que se puede hacer la depuración de forma más sencilla. 2.1.7 Estándar de programación IEC 61131-3 En este apartado desarrollaremos la norma que estandariza los lenguajes de programación independientemente del fabricante, ya sea en el manejo de datos, variables y programas. 2.1.7.1 Introducción IEC 61131-3 es la base real para estandarizar los lenguajes de programación en la Automatización industrial, haciendo el trabajo independiente de cualquier compañía (KarlHeinz & Tiegelkamp, 2001). 30 Marco Teórico Hay muchas maneras de describir el trabajo desarrollado en la tercera parte de esta norma, algunas de ellas son: IEC 61131-3 es el resultado del gran esfuerzo realizado por 7 multinacionales con muchos años de experiencia en el campo de la automatización industrial. Incluye 200 páginas de texto aproximadamente, con más de 60 tablas. IEC 61131-3 define las especificaciones de la sintaxis y semántica de los lenguajes de programación de PLCs, incluyendo el modelo de software y la estructura del lenguaje. La parte 3 del estándar presenta dos grandes bloques temáticos (ver Figura 2.11): Elementos comunes. Lenguajes de programación. Figura 2.11: Partes de IEC 61131-3 2.1.7.2 Elementos comunes Tipos de datos Dentro de los elementos comunes, se definen los tipos de datos. Los tipos de datos previenen de errores en una fase inicial, como por ejemplo la división de un dato tipo fecha por un número entero. Los tipos comunes de datos son: variables booleanas, número entero, número real, byte y palabra, pero también fechas, horas del día y cadenas (strings). Basado en estos tipos de datos, el usuario puede definir sus propios tipos de datos, conocidos como tipos de datos derivados. De este modo, se puede definir por ejemplo un tipo de dato denominado “canal de entrada analógica”. Variables Las variables permiten identificar los objetos de datos cuyos contenidos pueden cambiar, por ejemplo, los datos asociados a entradas, salidas o a la memoria del autómata programable. Una variable se puede declarar como uno de los tipos de datos elementales 31 Marco Teórico definidos o como uno de los tipos de datos derivados. De este modo se crea un alto nivel de independencia con el hardware, favoreciendo la reusabilidad del software. El ámbito de “vida” de una variable está normalmente limitado a la unidad de organización en la cual ha sido declarada (variable local). Esto significa que sus nombres pueden ser reutilizados en otras partes sin conflictos, eliminando una frecuente fuente de errores. Si las variables deben tener un ámbito de “validez” superior, han de ser declaradas como globales utilizando la palabra reservada VAR_GLOBAL. Pueden ser asignados parámetros y valores iniciales que se restablecen al inicio, para obtener la configuración inicial correcta. Configuración, recursos y tareas La norma IEC 61131-3 define un modelo software representado en la Figura 2.12. Figura 2.12: Modelo de Software Al más alto nivel, el elemento software requerido para solucionar un problema de control particular puede ser formulado como una configuración. Una configuración es específica para un tipo de sistema de control e incluye las características del hardware: procesadores, direccionamiento de la memoria para los canales de I/O y otras capacidades del sistema. El concepto abstracto “configuración” puede ser asimilado a un tipo de PLC dado. Dentro de una configuración, se pueden definir uno o más recursos. Se puede entender el recurso como un procesador capaz de ejecutar programas de control escritos en los lenguajes que define la norma. Dado que una configuración puede tener tantos recursos como se desee, se puede decir que la norma permite definir PLCs con tantas CPUs como se quiera. En el seno de un recurso pueden ser definidas una o más tareas. Las tareas controlan la ejecución de un conjunto de programas y/o bloques funcionales. Cada una de ellos puede 32 Marco Teórico ser ejecutada periódicamente o por una señal de disparo especificada, como el cambio de estado de una variable. Comparado este modelo con un PLC convencional, éste último contiene un solo recurso, ejecutando una única tarea que controla un único programa de manera cíclica. IEC 61131-3 brinda la posibilidad de disponer de estructuras más complejas. Así sería posible soportar multi-procesamiento, gestión de programas por eventos sistemas de control distribuido o en tiempo real con este estándar. Unidades de Organización de Programa La norma define tres formas distintas de “presentar” o crear programas de control para PLCs, a saber: ♦ Programas. ♦ Funciones. ♦ Bloques funcionales. Estas presentaciones reciben el nombre de “POUs (Unidades de Organización de Programa). Los POUs serán diseñados a partir de un diferente número de elementos de software, escritos en alguno de los distintos lenguajes definidos en la norma. Típicamente, un programa es una interacción de Funciones y Bloques Funcionales, con capacidad para intercambiar datos. Funciones y bloques funcionales son las partes básicas de construcción de un programa, que contienen una declaración de datos y variables y un conjunto de instrucciones. Programas La norma define un programa como el “conjunto lógico de todos los elementos y construcciones que son necesarios para el tratamiento de señales que se requiere para el control de una máquina o proceso mediante un PLC”. Es decir, que un programa puede contener la declaración de tipos de datos, variables e instancias de bloques funcionales junto con el conjunto de instrucciones (código o programa propiamente dicho) necesario para llevar a cabo el control deseado del proceso o máquina. Funciones IEC 61131-3 especifica funciones estándar y funciones definidas por el usuario. Las funciones estándar son por ejemplo ADD (suma), ABS (valor absoluto), SQRT (raíz cuadrada), SIN (seno), y COS (coseno). Las funciones definidas por el usuario, una vez implementadas pueden ser usadas indefinidamente en cualquier POU (Karl-Heinz & Tiegelkamp, 2001). Las funciones no pueden contener ninguna información de estado interno, es decir, que la invocación de una función varias veces con los mismos argumentos (parámetros de entrada) debe suministrar siempre el mismo resultado (salida). 33 Marco Teórico Bloques Funcionales, FB´s Los bloques funcionales son los equivalentes de los circuitos integrados usados en electrónica, IC´s, que representan funciones de control especializadas. Los FB´s contienen tanto datos como instrucciones, pudiendo guardar los valores de dichas variables entre sucesivas ejecuciones (que es una de las diferencias con las funciones). Se dice por tanto que los FBs tienen “memoria”, característica que les confiere un gran potencial de uso. Presentan una interfaz de entradas y salidas bien definida y un código interno oculto, como un circuito integrado o una caja negra. De este modo, establecen una clara separación entre los diferentes niveles de programadores, o el personal de mantenimiento. Un lazo de control de temperatura, PID, es un excelente ejemplo de bloque funcional. Una vez definido, puede ser usado una y otra vez, en el mismo programa, en diferentes programas o en distintos proyectos. Esto lo hace altamente reutilizable. Los bloques funcionales pueden ser definidos por el usuario empleando alguno de los lenguajes de la norma, pero también existen FB´s estándar (biestables, detección de flancos, contadores, temporizadores, etc.). Otra de las diferencias fundamentales con respecto a las funciones y que les confiere gran potencia de uso, es la posibilidad de crear tantas copias como se desee de un mismo FB. A cada copia se le llama instancia. Cada instancia llevará asociado un identificador y una estructura de datos que contenga sus variables de entrada, de salida e internas separada del resto de instancias. Gráfico Funcional Secuencial (Secuential Function Chart, SFC) Figura 2.13: Ejemplo de SFC Como muestra la Figura 2.13 SFC describe gráficamente el comportamiento secuencial de un programa de control. Esta definición deriva de las Redes de Petri y GRAFCET (IEC 60848), con las modificaciones adecuadas para convertir las representaciones de una norma de documentación (o de un lenguaje de modelado) en un conjunto de elementos de control de ejecución para una POU de un autómata programable (o sea, en un lenguaje de programación). SFC ayuda a estructurar la organización interna de un programa, y a descomponer un problema en partes manejables, manteniendo simultáneamente una visión global. Los elementos de SFC proporcionan un medio para subdividir una POU de un autómata programable en un conjunto de etapas y transiciones interconectadas. Cada etapa lleva asociados un conjunto bloques de acción y cada transición va asociada con una condición 34 Marco Teórico que cuando se cumple, causa la desactivación de la etapa anterior a la transición y la activación de la siguiente. Los bloques de acción permiten realizar el control del proceso. Cada elemento puede ser programado en alguno de los lenguajes de la norma, incluyéndose el propio SFC. Dado que el modo de funcionamiento de SFC requiere que la información almacenada acerca de cuál es la etapa activa se mantenga entre llamadas sucesivas, los únicos POUs que se pueden programar utilizando SFC son los bloques funcionales y los programas. Se pueden usar secuencias alternativas y paralelas, comúnmente utilizadas en muchas aplicaciones. Debido a su estructura general, de sencilla comprensión, SFC permite la transmisión de información entre distintas personas con distintos niveles de preparación y responsabilidad dentro de la empresa de manera sencilla e intuitiva. 2.1.7.3 Lenguajes de programación Cada fabricante de autómatas programables tiene su propia versión del lenguaje de diagrama de contactos y del de lista de instrucciones. En general, un programa escrito para un autómata determinado no sirve para un autómata de otra marca. Las diferencias más importantes están en las instrucciones y funciones especiales, que cada fabricante implementa a su manera (especialmente temporizadores y contadores), aunque también hay diferencias en elementos más simples, como bobinas de enclavamiento. La norma IEC 61131-3 surgió con el objetivo de establecer una sintaxis de programación estándar que permitiera programar un automatismo sin necesidad de recurrir a la sintaxis específica de ningún fabricante. El objetivo último es, evidentemente, que el programa escrito según la norma IEC 1131-3se pueda utilizar directamente en cualquier autómata. Cada vez son más los fabricantes cuyos sistemas de programación se acogen a este estándar. Además, recientemente han aparecido paquetes de software de programación de autómatas basados en este estándar, cuyo objetivo es poder realizar programas independientemente de la marca del autómata que se vaya a utilizar. El estándar IEC 61131-3 contempla seis lenguajes diferentes, tres basados en gráfico y tres basados en texto. Los lenguajes basados en gráfico son: Diagrama de contactos o de escalera. Es muy similar al de cualquier autómata, aunque hay diferencias. Por ejemplo el lenguaje de Omron utiliza solo contactos NA o NC, mientras la norma IEC 61131-3 admite además contactos de flanco de subida o de bajada que se activan solo durante un ciclo de scan cuando la variable asociada cambia de 0 a 1 o de 1 a 0. Diagrama de bloque de funciones. Dispone de cuatro tipos de elementos gráficos que se combinan para la creación de un programa. Estos elementos son: conexiones, elementos de control de ejecución, elementos para llamada a funciones y los conectores. No se incluyen otros elementos gráficos como contactos y bobinas que sí aparecen en los diagramas de contactos. 35 Marco Teórico Diagrama secuencial de funciones (modo gráfico). Permite descomponer programas complejos en unidades más simples y definir la forma en que se realizan las transiciones entre estas unidades. Su apariencia es similar a la de los diagramas de Grafcet, pues cuenta con dos tipos de elementos: las etapas (o pasos), representadas por cuadrados, y las transiciones, representadas por líneas horizontales, a las que se le asocia una condición de activación. Dentro de cada paso o etapa se incluye el código de programa(usando cualquiera de los lenguajes definidos en la norma) que se ejecutará cuando se active dicha etapa. Los lenguajes basados en texto son: Lista de instrucciones. Es similar a un lenguaje ensamblador. En general, los programas creados con otros lenguajes, gráficos o de texto, son traducidos a listas de instrucciones en el proceso de compilación. Texto estructurado. Es un lenguaje de programación de alto nivel que ofrece un amplio rango de instrucciones que simplifican la realización de operaciones complejas. Diagrama secuencial de funciones (modo texto). En este apartado se explicarán solo algunos lenguajes (de mayor uso frecuente) dentro de los cuales están los basados en gráficos como Diagrama de contactos o de escalera, y Diagrama de bloques de funciones, y dentro del grupo de lenguajes basados en texto, la Lista de Instrucciones. Asimismo es importante aclarar que solo nos limitaremos a explicar las distintas metodologías de representación de lenguajes de los Autómatas Programables, sin hacer referencia al detalle de direccionamiento y sintaxis de las variables ya que no representa el objetivo principal del presente documento. Diagrama de contactos (Ladder Diagram o diagrama de escalera) Es el lenguaje de programación más utilizado en los autómatas programables. Está basado en los automatismos cableados por medio de contactores, que fueron los primeros en implementarse. Gráficamente se representan dos líneas verticales largas separadas, de forma que la de la izquierda representa tensión y la de la derecha, masa. Entre esas líneas verticales, se representan las ecuaciones lógicas por medio de contactos. Hay 3 tipos de elementos fundamentales: Contacto normalmente abierto (NA): Representa un contacto que está abierto si la variable asociada vale 0, y que se cierra si la variable asociada vale 1. Se representa con dos líneas verticales paralelas. 36 Marco Teórico Contacto normalmente cerrado (NC): Representa un contacto que está cerrado si la variable asociada vale 0, y que se abre si la variable asociada vale 1. Se representa con dos líneas verticales paralelas cruzadas por una línea oblicua. Bobina. Representa el valor de una variable. Cada salida tiene asociada una bobina. Si esta bobina tiene corriente (el diagrama de contactos la activa), la salida está a 1, y si no tiene corriente, la salida está a cero. Además puede haber bobinas asociadas a variables internas (por ejemplo, las que representan cada etapa del proceso). Se representa mediante un círculo. Figura 2.14: Ejemplo de programa en diagrama de contactos (ladder diagram) Cada línea o red (que normalmente contiene una sola bobina, aunque puede contener varias) representa una línea del programa. El autómata ejecuta las líneas de arriba abajo. En el caso del ejemplo de la Figura 2.14, calcularía y *¬b+ay el resultado (1 ó 0) lo asignaría a la variable y. Después calcularía a*¬y, y el resultado lo asignaría a la variable x. Esta sería la fase de ejecución del programa de usuario, que se repetiría de forma cíclica según se ha visto. La función lógica implementada por los contactos de una red se suele denominar condición de activación, ya que cuando esta condición es 1, la variable de salida (bobina) asociada se activa. Hay una serie de reglas que se debe seguir para dibujar correctamente un diagrama de contactos. Algunas de ellas son: A la derecha de la bobina no puede haber contactos. En una red puede haber varias bobinas en paralelo. La conducción a través de los contactos solo se produce de izquierda a derecha. Además de la bobina simple puede haber otros dos tipos de bobinas: Bobina normalmente cerrada. Se representa mediante un círculo con una línea transversal (en el caso de Autómatas Omron). Su valor es el inverso del que resulta de la ecuación lógica de los contactos. Bobina de enclavamiento. En algunos autómatas se representa mediante un círculo que en el interior tiene una letra L, de Latch (o S de Set ) o una letra U, de Unlatch (o R, de Reset ). Si es una letra L (Latch) o S(Set ) indica que la 37 Marco Teórico variable correspondiente se activa, quedando activa aunque después se haga cero la condición de activación. Para desactivarla variable tiene que utilizarse una bobina de desenclavamiento con la letra U (Unlatch) o R (Reset ). Esos elementos básicos solo permiten programar relaciones lógicas simples. Evidentemente esto no es suficiente para controlar un proceso complejo. Además de estos elementos hay otros que permiten implementar funciones más elaboradas. Se colocan en lugar de las bobinas simples, tal como se muestra en la Figura 2.15. Figura 2.15: Uso de funciones complejas en diagramas de contactos El significado es que cuando el autómata llega a la línea correspondiente, ejecuta la instrucción o función compleja en función de que los contactos den un valor 1 ´o 0, es decir, en función de que la condición de activación sea 1 ó 0. En algunos casos, si dan un valor 0 la función no se ejecuta, en otros, la ejecución es diferente en función de que se tenga un 1 o un 0. Entre estas funciones se puede destacar: Instrucción END. Indica el final del programa. Temporizadores. Contadores. Instrucciones de salto. Operaciones binarias (mover bytes, sumar, multiplicar, comparar, etc.). Refresco de E/S. Permite refrescar las E/S cuando se desee, independientemente del refresco automático que se produce cada ciclo de scan. Funciones matemáticas complejas (senos, cosenos, exponenciales). Control de interrupciones. Funciones especiales de comunicaciones (transmisión o recepción de datos). Lista de Instrucciones Es otro lenguaje muy utilizado. Este es un lenguaje de aspecto similar al ensamblador, aunque no se codifican instrucciones de código máquina del procesador. El programa se expresa en una lista de instrucciones muy básicas. Cada instrucción contiene un nemónico (el nombre de la instrucción) y uno o varios datos con los que opera. Estos datos pueden ser un bit o una palabra (registro de 8 ó 16 bits). El conjunto de instrucciones disponible y la nomenclatura utilizada depende del fabricante del autómata. 38 Marco Teórico Hay una serie de instrucciones básicas que permiten implementar las ecuaciones lógicas equivalentes al diagrama de relés. Citaremos como ejemplo las operaciones lógicas con bits. Las operaciones lógicas con bits operan con dos dígitos, 1 y 0. Estos dos dígitos constituyen la base de un sistema numérico denominado sistema binario. Los dos dígitos 1 y 0 se denominan dígitos binarios o bits. En el ámbito de los contactos y bobinas, un 1 significa activado (”conductor”) y un 0 significa desactivado (”no conductor”). Las operaciones lógicas con bits interpretan los estados de señal 1 y 0, y los combinan de acuerdo con la lógica de Boole. Estas combinaciones producen un 1 ó un 0 como resultado y se denominan ”resultado lógico” (RLO). Las operaciones lógicas con bits permiten ejecutar las más diversas funciones. Las operaciones básicas para las operaciones lógicas con bits, en Autómatas Siemens de la Línea S7-300 son (Siemens, 2001): •U • UN •O • ON •X • XN Y Y-No O O-No O-exclusiva O-exclusiva-No Las siguientes operaciones permiten ejecutar una cadena lógica encerrada entre paréntesis: • U( Y con abrir paréntesis • UN( Y-No con abrir paréntesis • O( O con abrir paréntesis • ON( O-No con abrir paréntesis • X( O-exclusiva con abrir paréntesis • XN( O-exclusiva-NO con abrir paréntesis •) Cerrar paréntesis Para terminar una cadena lógica se puede utilizar una de las tres operaciones: •= Asignar •R Desactivar •S Activar Las operaciones siguientes permiten modificar el resultado lógico (RLO): • NOT Negar el RLO • SET Activar el RLO (=1) • CLR Desactivar RLO (=0) • SAVE Memorizar el RLO en el registro RB Otras operaciones detectan cambios en el resultado lógico y reaccionan correspondientemente: • FN Flanco negativo • FP Flanco positivo 39 Marco Teórico Con estas instrucciones se puede escribir la ecuación lógica de una red. Por ejemplo, tomando como partida el diagrama ladder de la Figura 2.16: Figura 2.16: Representación de instrucciones en Diagrama de contactos (Ladder) La lista de instrucciones de Siemens equivalente se muestra en la Figura 2.17 UN E 0.0 U E 0.1 O U E 0.0 UN E 0.1 = A 4.0 Figura 2.17: Representación en lenguaje de lista de instrucciones La salida A 4.0 es "1" si (E 0.0 es 0 Y E 0.1 es 1) O (E 0.0 es 1 Y E 0.1 es 0). Del mismo modo se puede representar la equivalencia entre el Lenguaje de listas de instrucciones (AWL de Siemens) y la representación en lógica de relés. Figura 2.18: Representación de instrucciones en listas de instrucciones y lógica de relés De acuerdo a la Figura 2.18 se puede determinar que la corriente puede fluir si: el estado en la entrada E 1.0 es "1" Y el estado en la entrada E 1.1 es "0". Diagrama de bloque de funciones Dispone de cuatro tipos de elementos Gráficos que se combinan para la creación de un programa. Estos elementos son: conexiones, elementos de control de ejecución, elementos para llamada a funciones y los conectores. No se incluyen otros elementos gráficos como contactos y bobinas que sí aparecen en los diagramas de contactos. Se dispone de las operaciones lógicas con bits siguientes: 40 Marco Teórico •# • XOR • >=1 •& •= : Conector : Operación lógica O-exclusiva : Operación lógica O : Operación lógica Y : Asignación Las siguientes operaciones reaccionan ante un RLO de 1: •R : Desactivar salida •S : Activar salida • RS : Flipflop de desactivación/activación • SR : Flipflop de activación/desactivación Otras operaciones reaccionan ante un cambio de flanco positivo o negativo para ejecutar las siguientes funciones: •N : Detectar flanco negativo (1 -> 0) •P : Detectar flanco positivo (0 -> 1) • NEG : Detectar flanco de señal 1 -> 0 • POS : Detectar flanco de señal 0 -> 1 Las restantes operaciones afectan directamente al RLO: • Insertar una entrada binaria • Invertir una entrada binaria • SAVE : Cargar resultado lógico (RLO) en el registro RB Con estas instrucciones se puede escribir la ecuación lógica de una red. Por ejemplo, tomando como partida el segmento de programa en lista de instrucciones de Siemens de la Figura 2.19 el equivalente en diagrama de bloques de funciones se muestra en la Figura 2.20 U E 1.0 U E 1.1 O U E 1.2 U E 1.3 = A 3.1 Figura 2.19: Representación en lista de instrucciones Figura 2.20: Representación en diagrama de bloques de funciones 41 Marco Teórico 2.1.7.4 Top-down vs. Bottom-Up- Figura 2.21: Desarrollo de aplicaciones IEC 61131-3 La norma define dos formas de desarrollar los programas de control, tal como se puede apreciar en la Figura 2.21: de arriba abajo (Top-down) y de abajo a arriba (bottom-up). Se puede especificar inicialmente la aplicación completa y dividirla en partes, declarar las variables y demás. O también se puede comenzar la programación desde abajo, por ejemplo, por medio de funciones y bloque funcionales que resuelvan problemas concretos. Estas funciones y bloques funcionales adecuadamente combinados podrán ser encapsulados en funciones o bloques funcionales que a su vez podrán ser empleados para resolver problemas más complejos, y así hasta resolver el problema en su totalidad. 2.1.7.5 Implementaciones Cumplir todos los requerimientos de la norma IEC 61131-3 no es fácil, por eso se permiten implementaciones parciales en varios aspectos. Esto hace referencia al número de lenguajes que soportan las herramientas de desarrollo disponibles, y al número de funciones y de bloques funcionales. Con ello se deja libertad al suministrador, pero el usuario debe tener cuidado durante el proceso de selección de la herramienta adecuada. Incluso una actualización del software puede dar lugar a una carga de trabajo mayo durante la implementación. Muchos entornos de programación IEC actuales ofrecen aquello que se espera a nivel de interface de usuario: uso de ratón, menús desplegables, pantallas de programación gráfica, múltiples ventanas, ayuda en línea, verificación durante el diseño, etc. Debe hacerse notar que estos detalles no están especificados en la norma por lo que es una de las partes donde los proveedores pueden diferenciarse, por citar el caso de la Figura 2.22. 42 Marco Teórico Figura 2.22: Ejemplos de herramienta de desarrollo IEC 61131.3 2.1.7.6 Conclusiones Las implicaciones técnicas de la norma IEC 61131-3 son altas, dejando bastante espacio para el crecimiento y la diferenciación. Esto la hace adecuada para el mercado futuro. La norma IEC 61131-3 tendrá un gran impacto en el mundo del control industrial y éste no se restringe al mercado convencional de los PLC´s. Ahora mismo, se puede ver adoptada en aplicaciones para control de movimiento, sistemas distribuidos y sistemas de control basados en PC (SoftPLC), incluyendo los paquetes SCADA. Y las áreas de su utilización siguen creciendo. El uso de IEC 61131-3 proporciona numerosos beneficios para usuarios/programadores. Los beneficios de la adopción de este estándar son varios, dependiendo de las áreas de aplicación: control de procesos, integrador de sistemas, educación, programación, mantenimiento, instalación, etc. Entre estos beneficios cabe destacar: 1. Se reduce el gasto en recursos humanos, formación, mantenimiento y consultoría. 2. Evita las fuentes habituales de problemas por el alto nivel de flexibilidad y reusabilidad del software. 3. Las técnicas de programación son utilizables en amplios sectores (control industrial en general). 4. Combinan adecuadamente diferentes elementos que pueden provenir de diferentes fabricantes, programas, proyectos... 5. Incrementa la conectividad y comunicación entre los distintos departamentos y compañías. 43 Marco Teórico 2.2 Grafcet La creciente complejidad de los automatismos industriales se traduce en una mayor dificultad para definir de una manera clara y sin ambigüedades las especificaciones funcionales a las que debe responder. Esta dificultad se ve agravada por la utilización de un gran número de informaciones de entrada y salida. Las distintas formas de descripción de un proceso podrían ser clasificadas en los distintos grupos: Una descripción literal únicamente resulta larga, incomoda, a veces imprecisa y, a menudo incompleta. Una descripción lógica (logigrama) está casi exclusivamente enfocado a una tecnología determinada, y no es apropiada a la realización mediante programa. Una representación por organigrama, más general, se adapta bien a las realizaciones mediante programa, pero resulta pobre en el caso de los secuenciales y no muestra los funcionamientos simultáneos, caso de que los haya. Los trabajos realizados en los últimos años, han conducido a representaciones gráficas de las especificaciones funcionales que son totalmente independientes de la realización tecnológica, pudiendo ésta ser cableada (módulos neumáticos, relés electromecánicos o módulos electrónicos) o programada (PLC, ordenador o microprocesador). Estas nuevas formas de representación se basan en los conceptos de etapa y de receptividad que simplifica en gran medida la síntesis de los automatismos secuenciales, al considerar el hecho de que, entre el gran número de informaciones disponibles, pocas son significativas en un determinado momento. A partir de estas ideas, los trabajos efectuados por las comisiones de AFCET (Association Française pour la Cybernétique Economique et Technique, Asociación Francesa para la cibernética económica y técnica) y de ADEPA, (Agence Nationale pour le Developpment de la Production Automatisée, Agencia nacional para el desarrollo de la producción automatizada) han dado como resultado la definición de un diagrama funcional: el GRAFCET, (Graphe de Comands Etape/Transition, gráfico de mando etapa/transición) (Boix Aragonés, Sudía Andreu, & Bergas Jané, 1997). Este diagrama funcional permite describir los comportamientos del automatismo en relación a las informaciones que recibe, imponiendo un funcionamiento riguroso, evitando de esta forma incoherencias, bloqueos o conflictos en el funcionamiento. En cada nivel de descripción, este diagrama puede ser modificado o corregido, sin necesidad de volver a partes ya estudiadas. Inicialmente fue propuesto para documentar la etapa secuencial de los sistemas de control de procesos a eventos discretos. No fue concebido como un lenguaje de programación de autómatas, sino un tipo de Grafo para elaborar el modelo pensando en la ejecución directa del automatismo o programa de autómata. Varios fabricantes en sus 44 Marco Teórico autómatas de gama alta hacen este paso directo, lo que lo ha convertido en un potente lenguaje gráfico de programación para autómatas, adaptado a la resolución de sistemas secuenciales. En la actualidad no tiene una amplia difusión como lenguaje, puesto que la mayoría de los autómatas no pueden programarse directamente en este lenguaje, a diferencia del Lenguaje Diagrama de contactos (ladder). Pero se ha universalizado como herramienta de modelado que permite el paso directo a programación, también con Ladder. 2.2.1 Metodología Grafcet: Conceptos Básicos Como se muestra en la Figura 2.23, el Grafcet se compone de un conjunto de (Gómez Crespo, 1999) : Etapas o Estados a las que van asociadas acciones. Transiciones a las que van asociadas receptividades. Uniones Orientadas que unen las etapas a las transiciones y las transiciones a las etapas. Figura 2.23: Componentes de un GRAFCET 2.2.2 Etapas Una etapa se caracteriza por un comportamiento invariable en una parte o en la totalidad de la parte de mando. En un momento determinado, y según sea la evolución del sistema: Una etapa puede estar activa o inactiva. El conjunto de las etapas activas definen la situación de la parte de mando. Las etapas se representan por un cuadrado con un número en su parte superior como identificación. La entrada y salida de una etapa aparece en la parte superior e inferior, respectivamente, de cada símbolo. El conjunto formado por el cuadrado y la extensión de las entradas y salidas constituye el símbolo completo de la etapa (Figura 2.24) Figura 2.24: Componentes de una Etapa 45 Marco Teórico Cuando varias transiciones van unidas a una misma etapa, las uniones orientadas correspondientes se reagrupan antes o después de la etapa tal como se muestra en la Figura 2.25 Figura 2.25: Bifurcación de transiciones Acciones asociadas a las etapas Las acciones están descritas, literal o simbólicamente, en el interior de uno o varios rectángulos unidos al símbolo de la etapa a la que van asociados. Tanto las acciones asociadas a las etapas como las receptividades asociadas a las transiciones se pueden describir a dos niveles: Nivel 1: no tienen en cuenta los elementos tecnológicos que implementan el órgano operativo y sólo se atienden a las especificaciones de tipo funcional. Se trata de describir las funciones del sistema tal como se muestra en el ejemplo de la Figura 2.26 Figura 2.26: Acción asociada a la etapa 1 (nivel 1): Avance del carro 1 Nivel 2: se especifican los aspectos tecnológicos del órgano operativo y de lo que le rodea y de las especificaciones operacionales del órgano de control como se representa en la Figura 2.27. Figura 2.27: Acción asociada a la etapa 1 (nivel 2): AC1 46 Marco Teórico Cuando las acciones están descritas en forma simbólica, debe haber una tabla con la relación entre cada símbolo utilizado y la acción a ejecutar. Para el ejemplo anterior debería existir algo como: AC1: Avance del Carro 1 2.2.3 Transición Una transición indica la posibilidad de evolución entre etapas. Esta evolución se consuma al producirse el franqueo de la transición. El franqueo de una transición provoca el paso en la parte de mando de una situación a otra situación. Una transición puede estar validada o no validada. Se dice que está validada cuando todas las etapas inmediatamente unidas a esta transición están activas. Una transición entre dos etapas se representa mediante una línea perpendicular a las uniones orientadas, también puede llevar una línea paralela a las uniones orientadas. Para facilitar la comprensión del Grafcet cada transición puede ir numerada a la izquierda de la línea perpendicular, como se muestra en la Figura 2.28. Figura 2.28: Transición que une la etapa 1 con la etapa 2 Receptividad asociada a la transición A cada transición va asociada una proposición lógica llamada receptividad que puede evaluada a verdadero o falso. Entre todas las informaciones disponibles en un momento determinado, la receptividad agrupa solamente aquellas que son necesarias para el franqueo de la transición. La receptividad es función de informaciones externas (entradas) o internas (estado de contadores, temporizadores, estados activos o inactivos de otras etapas). Las entradas de la parte de mando corresponden a las informaciones externas provenientes de la parte operativa, de consignas dadas por el operador, o de informaciones de otros sistemas. La receptividad va escrita literal o simbólicamente, preferentemente a la derecha del símbolo de la transición, como se puede graficar en la Figura 2.29 47 Marco Teórico Figura 2.29: Representación literal de la receptividad Figura 2.30: Representación simbólica de la receptividad Cuando la receptividad está escrita en forma simbólica, una tabla debe dar la correspondencia entre cada símbolo utilizado y la información correspondiente. En el ejemplo anterior de la Figura 2.30: Aci: Señal Arranque Cuando no hay condición asociada a una transición, se dice que la receptividad es verdadera siempre y se escribe =1. 2.2.4 Uniones Orientadas Las uniones orientadas unen las etapas a las transiciones y las transiciones a las etapas. Señalan el camino de las evoluciones. Las uniones orientadas se representan mediante líneas horizontales o verticales. Las líneas oblicuas pueden ser empleadas excepcionalmente siempre que añadan claridad al diagrama. Por convenio, el sentido de las evoluciones en un Grafcet es de arriba hacia abajo. Las flechas se utilizan para señalar la orientación de las uniones: Cuando no se respeta el convenio. En casos especiales, siempre que su presencia aporte claridad y facilite la comprensión de las evoluciones del Grafcet. 48 Marco Teórico 2.2.5 Reglas de Evolución Cuando se dibuja un GRAFCET, se pretende describir un automatismo o cualquier otro conjunto de sucesos condicionales y secuenciales. Al hacer trabajar este GRAFCET (es decir, al llevarlo a la práctica) se deben respetar unas reglas (reglas de evolución) ya que, en caso contrario, el funcionamiento del automatismo o del conjunto de sucesos no sería el que cabría esperar a la vista del GRAFCET representado. 2.2.5.1 Situación Inicial La situación inicial del Grafcet caracteriza el comportamiento inicial de la parte de mando en relación a la parte operativa, y corresponde a las etapas activas al comienzo del funcionamiento. Si esta situación es siempre la misma, caso de los automatismos cíclicos, estará caracterizada por las etapas iniciales. Este caso corresponde a un comportamiento reposo. En el caso de automatismos no cíclicos, la situación de partida depende del estado del proceso en el momento de la puesta en marcha de la parte de mando. La forma de establecer la situación inicial debe ser definida en el Grafcet o en documentación adjunta. 2.2.5.2 Franqueo de una Transición La evolución de la situación del Grafcet correspondiente al franqueo de una transición no puede producirse más que: Cuando esta transición está validada y Cuando la receptividad asociada a esa transición es cierta. Cuando estas dos condiciones se cumplen, la transición es franqueable y entonces es franqueada obligatoriamente. 2.2.5.3 Evolución de las Etapas activas El franqueo de una transición trae como consecuencia la activación simultánea de todas las etapas inmediatamente posteriores y la desactivación de todas las etapas inmediatamente anteriores. Esto se puede apreciar en el diagrama de la Figura 2.31: 49 Marco Teórico Figura 2.31: Estados posibles de la Etapa Ei y sus transiciones 2.2.5.4 Reglas de estructuras de uso frecuente Divergencia en O: Figura 2.32: Divergencia en O Cuando la etapa 1 está activa, según se cumpla la receptividad asociada a la transición a o la receptividad asociada a la transición b, pasará a ser activa la etapa 2 o bien la etapa 3 respectivamente (Figura 2.32). Convergencia en O: Figura 2.33: Convergencia en O Si la etapa activa es la 2 debe cumplirse la receptividad asociada a la transición a para pasar a la etapa 4 a activa. Si la etapa activa es la 3 debe cumplirse la receptividad asociada a la transición b, para que la etapa 4 pase a estar activa (Figura 2.33). 50 Marco Teórico Divergencia en Y: Figura 2.34: Divergencia en Y Estando activa la etapa 1 y si se cumple la receptividad asociada a la transición C, pasan a estar activas las etapas 2 y 3 (Figura 2.34). Convergencia en Y: Figura 2.35: Convergencia en Y Para que se activa la etapa 4 deben estar activas las etapas 2 y 3 y cumplirse la receptividad asociada a la transición D (Figura 2.35). 2.2.5.5 Evoluciones Simultáneas Varias transiciones que son franqueables simultáneamente, son simultáneamente franqueadas. Esta regla de franqueo simultáneo permite descomponer el Grafcet en varios diagramas, especificando claramente sus interconexiones. En este caso, es indispensable hacer intervenir, en las receptividades los estados activos de las etapas. 2.2.5.6 Activación y Desactivación Simultánea Si en el curso del funcionamiento de un automatismo una etapa debe ser desactivada y activada simultáneamente, ésta seguirá activa. 2.2.6 Estructuras Principales Las estructuras de base más utilizadas se describen a continuación. Pueden combinarse entre ellas, siendo esta enumeración no limitativa. 51 Marco Teórico 2.2.6.1 Secuencia Única Una secuencia única se compone de una sucesión de etapas que son activadas una a continuación de otra. A cada Etapa le sigue solamente una transición y cada transición es validada por una sola etapa, tal como se puede apreciar en la Figura 2.36. Figura 2.36: Representación de secuencia única Se dice que la secuencia está activa si al menos lo está una etapa. Por el contrario se dice que está inactiva si todas las etapas están inactivas. 2.2.6.2 Secuencias Simultáneas: paralelismo estructural Cuando el franqueo de una transición conduce a la activación de varias secuencias al mismo tiempo, se dice que son secuencias simultáneas. Después de la activación de estas secuencias, las evoluciones de las etapas activas en cada una de las secuencias son independientes. Para asegurar la sincronización de la desactivación de varias secuencias al mismo tiempo, generalmente se ponen etapas de espera recíproca. Un ejemplo de esta secuencia es representada en la Figura 2.37. Figura 2.37: Representación de secuencia simultánea Las activaciones o desactivaciones simultáneas de estas secuencias pueden efectuarse en una o varias veces. 52 Marco Teórico 2.2.6.3 Selección de Secuencia Una selección de secuencia, o una elección de evolución entre varias etapas o secuencias se presenta a partir de una o varias etapas, mediante tantas transiciones validadas como evoluciones posibles haya, es el caso de la divergencias en O. Secuencias exclusivas. Para obtener una selección exclusiva entre varias evoluciones posibles a partir de una misma etapa, es necesario asegurar que todas las receptividades asociadas a las transiciones son exclusivas es decir, no pueden ser verdaderas simultáneamente. Este exclusión puede ser de orden físico (incompatibilidad mecánica o temporal), o de orden lógico (en la escritura de las receptividades). En la Figura 2.38 se muestra un ejemplo de este caso Figura 2.38: Representación de secuencia exclusiva Salto de etapas y repetición de secuencia. El salto de etapas permite saltar una o varias etapas, por ejemplo, cuando las acciones a efectuar por estas etapas, lleguen a ser inútiles o no tengan objeto. Por el contrario, la repetición de secuencia, permite volver a comenzar la misma secuencia mientras que una condición establecida no sea cumplida. Un claro ejemplo se puede apreciar en la Figura 2.39. Figura 2.39: Representación de salto de secuencia 53 Marco Teórico Paralelismo Interpretado. Cuando las receptividades asociadas a las transiciones validadas por una o varias etapas no son exclusivas, pueden producirse evaluaciones simultáneas que activan varias etapas a la vez. Este segundo tipo de paralelismo se llama paralelismo interpretado, tal como se ejemplifica en la Figura 2.40. · Figura 2.40: Representación de paralelismo interpretado 2.2.7 Implementación del Grafcet Una vez realizado el Grafcet del proceso que deseamos controlar, el paso siguiente es la obtención de las condiciones de activación de las etapas, así como de las acciones asociadas a las mismas. Para ello se utilizará un proceso de normalización en el cual, y partiendo del Grafcet realizado, vamos obteniendo las condiciones de activación para cada una de las etapas y acciones. La obtención de estas condiciones booleanas se basará en la utilización de dos hechos: Una etapa se activará cuando estando activa la etapa inmediatamente anterior a ella, se evalúe a cierto la receptividad existente entre estas dos etapas, desactivándose la etapa anterior y activándose la nueva etapa. Una acción se deberá ejecutar, si la etapa a la que está asociada está activa. Una vez obtenidas estas condiciones booleanas, el paso siguiente es la implementación en el lenguaje apropiado para el controlador que se haya escogido como unidad de control del proceso. Un ejemplo de normalización de etapas y acciones es representado en la Figura 2.41. 54 Marco Teórico Figura 2.41: Normalización de Etapas La etapa 2 se activará cuando estando activa la etapa 1 se verifique la receptividad a y dejará de estar activa cuando se active la etapa 3, la cual se activará cuando estando activa la etapa 2 se verifique b. Basándonos en esto, y mediante un proceso de normalización podemos llegar a la condición booleana que debe verificarse para la etapa 2. Esta condición es la siguiente (X es nombre de la etapa): X2 = /X3.(X1.a+X2) Accion B = X2 La representación gráfica de este proceso de normalización mediante la técnica “asociación etapa-biestable” sería la que se muestra en la Figura 2.42. Figura 2.42: Proceso de normalización mediante la técnica "asociación etapa-biestable" En el bloque and (&), que está conectado al set de la etapa, se representan las condiciones de activación de la etapa, mientas, que al reset de la etapa, se conectan las condiciones de desactivación de la etapa. En el bloque correspondiente a la acción se conectan las etapas en las cuales se estaría ejecutando la acción, en nuestro caso la etapa 2. A continuación se expondrá como realizar la implementación de estas condiciones, como ejemplo, con los controladores Simatic S7-200 de Siemens. Para controlar el proceso mediante Simatic S7-200, basándose en el Grafcet construido, lo que se hace es asociar a cada etapa un elemento de memoria que permita 55 Marco Teórico saber si la etapa está activada o no. En el caso del presente trabajo, a cada etapa del Grafcet se le ha asociado una marca interna del autómata, de tal manera que la marca estará puesta a un 1 lógico si la etapa que tiene asociada está activa, y un 0 lógico en otro caso. Para controlar el proceso se realiza un programa escrito en cualquiera de los dos lenguajes de programación del S7-200 (esquema de contactos, lista de instrucciones), que se ejecuta constantemente en el autómata. El programa a construir no es más que la implementación de la secuencia de condiciones booleanas que definen la activacióndesactivación de las etapas así como de las condiciones asociadas a estas, halladas durante el proceso de normalización posterior a la construcción del Grafcet. El programa examina en cada ciclo de ejecución las entradas al autómata (entradas del proceso), y en función de las condiciones de activación-desactivación de las etapas activa estas. En el programa también están implementadas las condiciones de ejecución de las acciones, y en función de la etapa o etapas que estén activadas produce salidas dirigidas al proceso a controlar. Las condiciones de activación de las etapas obtenidas en el proceso de normalización son condiciones que se basan principalmente en operaciones booleanas AND y OR, por lo que la implementación de este tipo de condiciones en cualquiera de los lenguajes de programación del S7-200 es bastante fácil. En el ejemplo visto anteriormente la implementación de las condiciones de activación de la etapa 2, y de la acción asociada a esta etapa resultaría de la forma representada en la Figura 2.43, si utilizamos la técnica relé-memoria. Figura 2.43: Condiciones de activación en lenguaje S7-200 con técnica relé de memoria Si por el contrario utilizamos la técnica etapa-biestable la implementación resultante sería la que se representa en la Figura 2.44. 56 Marco Teórico Figura 2.44: Condiciones de activación en lenguaje S7-200 con técnica biestable 2.3 Programación Orientada a Objetos La Programación orientada a objetos (POO) es un paradigma de programación que utiliza como elemento base a los objetos (Wirfs-Brock & McKean, 2003). Los objetos son entidades que poseen propiedades específicas propias, un estado, tienen un determinado comportamiento y pueden interactuar con otros objetos. Una combinación de estas entidades resulta en el desarrollo de un programa informático. La idea de este paradigma surge en la década del 60, con la intención de poder diseñar sistemas de software de manera similar a lo que uno hace en la vida real. Es decir, todas las personas utilizan objetos con un propósito específico, dependiendo de la circunstancia, sabiendo que tienen determinadas propiedades. De esta manera, el desarrollo de aplicaciones resulta más intuitivo y, además, POO provee características que son muy deseadas en una aplicación (Korson & McGregor, 1990). Antes de mencionar las características más importantes, es necesario revisar conceptos que son esenciales a POO: Clase: es un elemento de software que define un tipo de dato abstracto, es decir, describe todas las propiedades (atributos) y funcionalidad (métodos) que va a tener un objeto de esa clase. Objeto: es una instanciación de una clase. Es decir, asume todas las funcionalidades definidas por una clase, y les otorga valores a cada una de las propiedades, definiendo así su propio estado. A su vez, todos los objetos tienen identidad (un nombre que los representa) y se relaciona con otros objetos. 57 Marco Teórico Atributo: es un elemento de software que define una propiedad de una clase y el estado de un objeto. Cada atributo, a su vez, tiene sus propias características como cualquier objeto. Método: es una porción de código que implementa cierta funcionalidad de una clase. Los objetos se comunican entre sí a través de llamados o invocaciones a métodos, para delegarse cierta responsabilidad o tarea. Interfaz: este componente define el comportamiento con el que tiene que cumplir una clase. Es un elemento aún más abstracto que una clase, que exige que estas tengan definido cierto comportamiento. Este concepto está muy relacionado con el concepto de herencia, y le da mayor estructuración al código ya que se obliga a cumplir con un determinado formato. Métodos de acceso (Accessor Method): son aquellos métodos que se encargan de acceder a los atributos de una clase, o sea, que permiten leerlos o modificarlos. Esto está muy relacionado con el principio de encapsulamiento (ver más abajo). Acoplamiento: se refiere a la dependencia que tiene una clase sobre otra. Si una clase tiene que comunicarse mucho con otra para poder resolver una determinada funcionalidad, se entiende que depende mucho de dicha clase y que tiene un alto nivel de acoplamiento. Si, por el contrario, la funcionalidad se resuelve a nivel interno, y no se realizan muchas invocaciones de métodos externos, el acoplamiento es bajo. Cohesión: se entiende por cohesión al nivel de calidad que tiene la relación entre dos clases. Es decir, si una clase delega sólo aquella responsabilidad que corresponde a otra, la calidad resulta ser muy buena y, entonces, la cohesión es muy alta. Si, caso contrario, se delega mucha responsabilidad a otras clases cuando lo correcto es que la propia clase se encargue de hacerlo, se entiende que la relación no es de buena calidad, y la cohesión es baja. Si bien son muchos los términos que se manejan en un entorno de POO, ésos son los conceptos fundamentales y más utilizados. Por otro lado, es sabido que POO cuenta con muchas características que lo distinguen del resto de los paradigmas de programación, como la programación estructurada. Las siguientes son las características más importantes de POO: Encapsulamiento: si bien en el entorno de la programación estructurada ya se manejaba este término, con el uso de variables locales o globales, en POO toma una mayor importancia. La idea principal que reside en POO es el diseño de un conjunto 58 Marco Teórico de objetos que se relacionen entre sí para poder realizar una determinada tarea. De esta manera, todas las propiedades o atributos de un objeto van a poder ser accedidas por el mismo objeto, y sólo se puede acceder a ellos externamente a través de los, ya mencionados, métodos de acceso. Luego, la manera en que se comunican los objetos es a través de los métodos definidos por cada uno. Abstracción: este concepto es una de las bases de POO, dado que la idea original es que todos los objetos abstraigan un determinado comportamiento. Es decir, como ya se mencionó, un objeto tiene un determinado estado, cumple con una determinada funcionalidad y se comunica con otros objetos sin revelar la manera en cumple con todas esas propiedades. Resumiendo, cada entidad en un sistema POO tiene un determinado comportamiento y se relaciona con otras entidades sin dilucidar cómo lo hace. Herencia: es un tipo de relación entre clases introducido por este paradigma. La abstracción es una de las bases de POO, y la idea es abstraer tanto comportamiento como sea necesario, definiendo clases que se encarguen de realizar tareas muy genéricas o abarcativas, y luego clases que especifiquen de manera puntual cada uno de esos comportamientos. A esa relación de especificación de comportamiento se la llama “herencia”, es decir, una clase hereda todo el comportamiento y propiedades de otra clase, y lo redefine haciendo que sea más específico. Polimorfismo: este término es sumamente importante para que las otras características mencionadas tengan sentido. Polimorfismo significa que puede tomar distintas formas, y eso es, precisamente, lo que se hace en POO. Específicamente, dado que en POO se busca tener mucha abstracción, el polimorfismo permite que los objetos se comuniquen con clases específicas (aquellas que heredan un comportamiento muy genérico y lo hacen más específico) como si fueran genéricas (las clases de las que heredan). De esta manera, se logra que las relaciones también sean genéricas. A la hora de desarrollar un sistema POO, se busca que este tenga una buena calidad. Esto no sólo implica que el sistema cumpla con los requisitos iniciales (su funcionalidad), que sea sencillo de utilizar y entender o que sea robusto ante fallas, por ejemplo. A todas estas propiedades se las denominan cualidades externas, dado que son las que el usuario final puede percibir (Meyer, 1988) . Sin embargo, para que una aplicación perdure en el tiempo y se adapte a los distintos cambios que pueden surgir, es necesario tener una buena calidad en las propiedades internas. Si se sigue un buen diseño de POO, se logra obtener un sistema que cumple con esas propiedades, dentro de las cuales se pueden mencionar: Extensibilidad: se denomina extensibilidad a la facilidad con la que se puede agregar una nueva funcionalidad a un sistema. Concretamente, si se realiza un diseño bien 59 Marco Teórico abstracto del problema, resulta más sencillo agregar nuevos componentes (clases, por ejemplo) que cumplan con la nueva funcionalidad, sin alterar el resto de la aplicación. Reusabilidad: como su nombre lo indica, esta característica está relacionada con el reuso de los componentes de un sistema. Esto ayuda a que aquellas problemáticas que sean similares tengan soluciones en común, ahorrando mucho tiempo de trabajo. Flexibilidad: se refiere a la capacidad del sistema de adaptarse a cambios en el funcionamiento. Es muy similar a la extensibilidad, pero este no sólo se refiere a nueva funcionalidad sino a la capacidad de cambio de una funcionalidad ya existente. Mantenibilidad: esta propiedad está muy relacionada con las anteriores mencionadas, ya que se refiere a la capacidad del sistema de mantenerse cumpliendo los pedidos y deseos del usuario. Esto implica, también, una buena legibilidad del código y facilidad para corroborar fallas. Existen muchos leguajes que sirven para implementar sistemas siguiendo este paradigma. El primero fue Simula67 surgido en 1967 (Dahl, Myhrhaug, & Nygaard, 1967) y fue el primero en introducir el concepto de clase. Luego, en 1980, surge la primera versión de Smalltalk (Glodberg & Robson, 1983) que toma los conceptos introducidos por Simuls67 y, además, permite la creación de objetos dinámicamente. Viendo la gran popularidad y virtudes que tenía POO, surgen varios lenguajes que se adaptan a sus propiedades, entre los que se destacan C++ y Java (Eckel, 1998), (Oracle, 1995). A partir de entonces la programación orientada a objetos es el paradigma más utilizado en el desarrollo de sistemas de software. 2.4. Trabajos relacionados Una amplia búsqueda de artículos de investigación e informes fue llevada a cabo con el objetivo de explorar el estado del arte en el campo de la asistencia en el diseño de procesos de automatización secuencial basados en representación Grafcet. Dicha búsqueda ha dado resultados negativos en cuanto a la existencia de herramientas del estilo con la posibilidad de extender a las necesidades del presente proyecto. Se puede citar como caso del mismo ámbito, una aplicación comercial desarrollada por uno de los más importantes fabricantes de sistemas de automatización y líder en el mercado, como es Siemens. Esta aplicación es denominada S7-GRAPH V5.3 para S7-300/400 Programación de controles secuenciales. 60 Marco Teórico 2.4.1 Ámbito de aplicación de S7-GRAPH Se utiliza para describir los procedimientos con secuencias alternativas o paralelas. Los procedimientos se configuran y se programan de forma clara y rápida en un tipo de representación estandarizado (IEC 61131-3, DIN EN 61131). El proceso se describe de forma gráfica, y se divide en pasos individuales con un alcance de fácil comprensión de las funciones. 2.4.2 Características generales de S7-GRAPH Con el lenguaje de programación S7-GRAPH se amplían las prestaciones de STEP 7 con la posibilidad de programar controles secuenciales gráficamente (AG, 2004). Dado que S7-GRAPH opera en el entorno del software básico de programación de PLCs STEP 7 de Siemens exclusivamente, se requiere tener instalado el paquete de programación STEP 7 V5.x, además de conocimientos expertos sobre este software, obviamente. Con S7-GRAPH se pueden programar las secuencias que se desee controlar con un sistema de automatización SIMATIC de forma clara y rápida. Para ello se deberá dividir el proceso en distintas etapas con un volumen de funciones no demasiado extenso. Dicho proceso se representará gráficamente y puede documentarse tanto con figuras como con texto. En las etapas se determinan las acciones que se van a ejecutar. El paso de una etapa a otra se regula mediante transiciones (condiciones de transición). Estas condiciones se definen con ayuda de los lenguajes de programación KOP (esquema de contactos) y FUP (diagrama de funciones). PLCopen Basis Level S7-GRAPH cumple, a partir de la versión 5.1, el PLCopen Basis Level para controles secuenciales de la norma DIN EN 61131-3. Si dispone de un control secuencial que no cumple la norma, puede importarlo a la gestión de datos de STEP 7 como archivo ASCII desde el Administrador SIMATIC y tratarlo posteriormente con S7-GRAPH. Para crear controles secuenciales conforme a la norma, elija el cuadro de diálogo "Preferencias de la aplicación" y en la ficha "General" active la opción "Comportamiento según IEC". 61 Marco Teórico Bloques del control secuencial Un control secuencial controla el proceso en un orden preestablecido y en función de determinadas condiciones. La complejidad del control secuencial depende de la tarea de automatización que se desea ejecutar, pero un control tendrá siempre - como mínimo - los 3 bloques siguientes, representados en la Figura 2.45: Un bloque STEP 7 (1) desde el que se llamará al FB de S7-GRAPH. Este bloque puede ser un OB, una FC u otro FB. Un FB de S7-GRAPH (2) para describir las tareas parciales del control secuencial y de qué dependen. Estas tareas parciales (etapas) y dependencias (transiciones) pueden organizarse en una o varias cadenas secuenciales. Un DB de instancia (3) que contiene los datos y parámetros del control secuencial. Este DB de instancia se asigna al FB de S7-GRAPH y puede ser generado automáticamente por el sistema. Figura 2.45: Bloques de Control Secuencial Extracto de una cadena secuencial con etapas y transiciones Las cadenas secuenciales se programan en el FB de S7-GRAPH. Se componen de una serie de etapas, las cuales se activan en un orden determinado dependiendo de las transiciones (condiciones de transición) programadas, tal como se muestra en el ejemplo de la Figura 2.46. 62 Marco Teórico Figura 2.46: Ejemplo de una cadena secuencial en S7-GRAPH 2.4.3 Análisis de la Herramienta S7-GRAPH Tal como se ha mencionado anteriormente, esta herramienta corresponde a un ámbito de programación específico para la línea de equipos propios del fabricante, en este caso Siemens. Del mismo modo, como opera en el entorno del software básico de programación de PLCs STEP 7 de Siemens exclusivamente, se requiere tener instalado previamente el paquete de programación STEP 7 V5.x. Dentro de las ventajas principales que podemos destacar se detallan: Es un sistema comercial confiable y robusto. La interfaz es intuitiva y con alto nivel de ayuda. Contempla todos los tipos de datos y operaciones lógicas, ya sean básicas y aritméticas de coma flotante. En cuanto a las limitaciones y desventajas podemos enumerar las siguientes: Requisitos para la instalación: Sistema operativo Microsoft Windows 2000/XP, es decir muy limitado en cuanto a las plataformas. Requiere Instalación previa del Paquete básico SIMATIC STEP 7 para la programación de PLC. Para la utilización del software de programación S7-GRAPH se requiere una clave de licencia (autorización de utilización) específica para el producto, cuya instalación se ejecuta a partir de la versión 5.3 de S7-GRAPH con el Automation License Manager. Una licencia se otorga a modo de derecho de la utilización del producto solamente a 1 usuario. En el caso de la utilización del paquete por parte de varios usuarios simultáneos requiere la instalación de la misma cantidad de licencias. 63 Marco Teórico Al tratarse de un paquete cerrado, no es posible la extensibilidad a un ámbito genérico de lenguajes de programación utilizable para distintas marcas y normas aplicadas por otros fabricantes. Se requiere conocimiento experto en el desarrollo de programas de automatización basados en PLC además del propio conocimiento de la representación Grafcet. No es posible realizar simulaciones del sistema Off Line, con lo que representa el riesgo de puesta en marcha del sistema real. Solo es posible simular el comportamiento vía comunicación física con el PLC mediante protocolo MPI. 64 Solución Propuesta Capítulo 3 - Solución Propuesta Luego de la investigación realizada y de las ideas analizadas en el marco teórico presentamos en este capítulo la propuesta que radica en brindar una herramienta que permita a usuarios con mínimo conocimientos en materia de automatización industrial, desarrollar proyectos a través de una interfaz amigable y módulos de funcionalidad bien definida. Actualmente el desarrollo de un sistema de Automatización Industrial requiere de un conocimiento específico de los conceptos mencionados en el capítulo anterior. En este trabajo se propone el desarrollo de una herramienta que permita simplificar la tarea de implementación de automatismos de procesos. Aprovechando la potencialidad de los diagramas Grafcet (Siemens, 2004); (Boix Aragonés, 1997); (Siemens, 1998); (Bossy, Brard, Faugère, & Merlaud, 1995) se propone una herramienta gráfica amigable para la creación de la secuencia del proceso a automatizar, la posibilidad de simulación del comportamiento del sistema mediante herramientas gráficas de interacción con el usuario. 3.1 Descripción de la Solución Propuesta El proceso de un automatismo requiere de varios recursos organizados por especialistas en cada uno de los ítems planteados: Conocimientos en relevamientos de procesos Conocimientos en herramientas de diseño gráfico Conocimientos en materia de desarrollo de programación secuencial Conocimientos de programación de Autómatas Industriales en cada una de las variantes que el mercado ofrece. Con el avance de nuevas tecnologías de desarrollo de Sistemas resultaría de suma utilidad contar con una herramienta integral que permita englobar cada una de las etapas del proceso de manera que con el único requerimiento del proceso a Automatizar se pueda arribar a la solución definitiva. Esta herramienta integral debería contemplar: Una interface gráfica amigable (Gálvez Rojas, Alcaide García, & Mora Mata, 2007); (Knudsen, 1999); (Gilbert, 2002) para diseñar el diagrama funcional del proceso con todos los componentes intervinientes. Esta interface debería contar con la posibilidad de incluir atributos propios a cada elemento (por ejemplo nombre simbólico, detalle del componente, dirección en la estructura física futura, etc.), de modo que se pudiera generar un formato de salida imprimible que servirá para el proceso del montaje físico de los elementos. 65 Solución Propuesta Posibilidad de que una vez diseñado el diagrama anterior se pueda generar un diagrama secuencial Grafcet (Siemens, 2004) interactuando gráficamente cada componente físico del proceso con el diseño de Etapas y transiciones. Una vez realizado el diagrama secuencial poder simular el proceso abstrayéndose completamente de la estructura física que alojará el sistema (Direccionamiento del PLC), sino tan solo con la generación de eventos basados en la interrelación del diagrama funcional, por ejemplo el uso del mouse que active cada uno de los compontes intervinientes y reflejando la ejecución en un Runtime del Grafcet señalizando el circuito. Al finalizar la Simulación del proceso contar con una herramienta que genere el código de programa de bajo Nivel con la posibilidad de que sea abierto a cualquier implementación de autómatas disponibles en el mercado (Marcos, Estévez, Gangoiti, & Portillo, 2001); (Siemens A. , 2011). De esta manera se podría pensar en prescindir, en un alto porcentaje, de conocimientos profundos en programación en lenguajes basados en Controladores lógicos programables que si bien están encuadrados en una norma universal estándar IEC 61131, cada fabricante ofrece diferentes metodologías y enfoques de programación (Tratamientos de direccionamiento, ámbito y denominaciones de variable, operandos, módulos de organización, funciones, etc.) 3.2 Objetivos de la Solución Propuesta Esta herramienta permite diseñar programas de Automatismos de control Industrial y probar los mismos mediante simulador, evitando los riesgos y dificultades que se podrían presentar al probarlos en un sistema real, roturas físicas de maquinarias como punto fundamental. Los objetivos que se han seguido a la hora de desarrollar la herramienta han sido: • Permitir un diseño al mayor alto nivel posible • Permitir portabilidad, flexibilidad, y extensibilidad a futuros desarrollos. Para ello la herramienta dispone de un Editor Grafcet que permite: Dibujar: Diseñar un programa de control utilizando diagramas estandarizados por la norma IEC 848 Generar código automáticamente: Generar código automáticamente a partir del diagrama grafcet. Además, permite generar código que combine varios grafcets en un mismo PLC, facilitando aún más la creación de programas de control. 66 Solución Propuesta Depurar diseño: Permite la depuración tanto a nivel de grafcet como a nivel de lista de instrucciones. Simular ejecución del proceso: Mediante una interfaz gráfica interactiva para activación de variables y visualización del punto de ejecución del proceso a través de coloreo de etapas activas. 3.3 Representación General de la solución Propuesta Como se ha mencionado a lo largo del presente Capítulo, y como se puede apreciar en la Figura 3.1, la Herramienta propuesta consta de 4 módulos bien definidos, con los cuales, a través de una interfaz flexible, el usuario puede interactuar y desarrollar el proyecto de automatización de un proceso secuencial. Figura 3.1: Representación General de la Solución Propuesta 67 Solución Propuesta Las fases de desarrollo del Proyecto de automatización está contemplado en cada uno de los módulos funcionales, a través de los cuales el usuario tendrá la posibilidad de la edición de un diagrama Grafcet, programación del proceso automático mediante condiciones y acciones, testeo del proceso a través de la interacción con las variables intervinientes y finalmente la generación del código de programa en lenguaje de PLC. 3.4 Diseño del Diagrama Grafcet Como se puede apreciar en la Figura 3.2, el usuario estará en condiciones de diseñar el diagrama secuencial Grafcet, basándose en las herramientas de edición contempladas para cada elemento interviniente, de modo que al finalizar esta etapa, el resultado será la transcripción gráfica de un proceso secuencial en una representación estándar normalizada. Figura 3.2: Edición del diagrama Grafcet 68 Solución Propuesta Símbolos Gráficos del Grafcet A continuación describiremos los símbolos utilizados en los diagramas Grafcet, y cuya funcionalidad fue abordada en profundidad en la sección 2.2: Cuadrado: Simboliza una etapa. La etapa inicial RESET se representa con doble línea. Líneas de evolución: Unen entre sí las etapas que representan actividades consecutivas. Transiciones entre las líneas de evolución: Representan las condiciones lógicas necesarias para que finalice la actividad de una etapa y se inicie la etapa/s inmediatamente consecutiva. Divergencia en Y: Subprocesos simultáneos. Si se cumple la condición y si la etapa inicial está activada, se activan todos los caminos simultáneos. Convergencia en Y: Cuando dos o más caminos en Y convergen en un estado, para que ese estado se active, se deben haber ejecutado completamente dichos caminos. 69 Solución Propuesta 3.5 Programación del Proceso Mediante este módulo el usuario podrá configurar las condiciones lógicas que definen el ciclo de avance del proceso, las cuales conforman las Transiciones entre dos etapas consecutivas. Del mismo modo se podrán definir la/s acción/es que serán llevadas a cabo en cada una de las Etapas. En la Figura 3.3 podemos apreciar la representación gráfica de la interfaz, que permite al usuario programar el ciclo del proceso. Figura 3.3: Programación del proceso automático secuencial 70 Solución Propuesta 3.5.1 Condiciones Como se mencionó previamente, el objetivo principal que persigue la herramienta desarrollada es facilitar el desarrollo y codificación de sistemas de PLC. Uno de los pasos fundamentales que tiene dicho proceso es la definición de condiciones, cuya notación puede resultar poco intuitiva, con una notación poco amigable para un desarrollador inexperto en la tarea de programación de automatismos industriales, como lo puede ser un alumno. Operaciones Lógicas Como se ha adelantado en la sección 2.1.7, las operaciones lógicas con bits operan con dos dígitos, 1 y 0. Estos dos dígitos constituyen la base de un sistema numérico denominado sistema binario. Los dos dígitos 1 y 0 se denominan dígitos binarios o bits. En el ámbito de los contactos y bobinas, un 1 significa activado (”conductor”) y un 0 significa desactivado (”no conductor”). Las operaciones lógicas con bits interpretan los estados de señal 1 y 0, y los combinan de acuerdo con la lógica de Boole. Estas combinaciones producen un 1 ó un 0 como resultado y se denomina ”resultado lógico” (RLO). Las operaciones lógicas con bits permiten ejecutar las más diversas funciones. En la Tabla 3.1 se puede apreciar las diferentes sintaxis de representación de las operaciones lógicas con bits son, en este caso tomando como ejemplo la implementación en un sistema S7-300/400 de Siemens y la correspondiente equivalencia en el sistema PL7 de Schneider: Función Operación lógica 'Y' Operación lógica 'O' Operación lógica 'Y' negada Operación lógica 'O' negado Operación lógica 'O-exclusiva' Operación lógica 'O-exclusiva' negada. Negación del resultado lógico. Flanco ascendente Flanco descendente Asignación de un bit Puesta a 1 Puesta a 0 Sintaxis S7-300/400 Siemens U O UN ON X XN NOT P N = S R Sintaxis PL7 Schneider AND OR ANDN ORN XOR XORN NOT RE FE := SET RESET Tabla 3.1: Sintaxis de operaciones lógicas con bits Como se puede apreciar, cada fabricante de autómatas programables tiene su propia versión del lenguaje de diagrama de contactos y de lista de instrucciones. En general, un programa escrito para un autómata determinado no sirve para un autómata de otra marca. Las diferencias más importantes están en las instrucciones y funciones especiales, que cada 71 Solución Propuesta fabricante implementa a su manera (especialmente temporizadores y contadores), aunque también hay diferencias en elementos más simples, como son las especificadas. La norma IEC 61131-3 surgió con el objetivo de establecer una sintaxis de programación estándar que permitiera programar un automatismo sin necesidad de recurrir a la sintaxis específica de ningún fabricante. El objetivo último es, evidentemente, que el programa escrito según la norma IEC 1131-3 se pueda utilizar directamente en cualquier autómata aunque como podemos notar no es completamente aplicable. Para la implementación del presente proyecto, y dado que uno de los objetivos principales es la generación de código automático a partir del diseño del diagrama Grafcet, se utilizará como base de programación el lenguaje desarrollado por Siemens, más precisamente el modelo S7-300/400. Si bien es cierto que el objetivo secundario del proyecto es ampliarlo para la generalidad de sistemas de automatización, quedará como propuesta trabajos futuros, la ampliación a la generalidad de sistemas justamente aprovechando la potencialidad de la POO en lo que se refiere a flexibilidad y reusabilidad. También es posible definir operaciones con una cadena lógica encerrada entre paréntesis. La lista de instrucciones es más extensa, en la que se incluyen funciones de contaje, temporización y operaciones matemáticas en coma flotante, pero en este caso sólo nos centraremos en las operaciones básicas: Y, O y NOT. A continuación se muestra en el ejemplo de la Figura 3.4 un fragmento de programa en el que se involucra una combinación de las operaciones lógicas mencionadas. Como se puede ver, el programa citado es sumamente verborrágico, con muchas sentencias para explicar poca funcionalidad. Es un lenguaje de muy bajo nivel que hace que sea sumamente difícil de comprender, así como también resulta muy complejo utilizarlo para agregar nueva funcionalidad como se podría brindar si se representara en formar gráfica. U( O O ) U( O O ) = E 1.0 E 1.1 E 1.2 E 1.3 A 3.1 Figura 3.4: Estructura de Programa con lista de instrucciones Este fragmento de programa describe la siguiente combinación: o El estado de señal de la salida A 3.1 es “1" cuando al menos una operación Y es verdadera. o El estado de señal de la salida A 3.1 es “0" cuando ninguna operación Y es verdadera 72 Solución Propuesta En la Figura 3.5 por su parte, se muestra una representación gráfica que detalla de manera más amena el resultado del fragmento de programa anterior. En la misma se puede notar que es mucho más sencillo de comprender el significado de la combinación lógica Y O Y Figura 3.5: Representación gráfica de la estructura de programa Aprovechando la potencialidad de la herramienta proporcionada por los diagramas Grafcet, la cual es tomada como eje central del presente proyecto, podríamos representar el citado fragmento de programa en un Nivel superior de abstracción para un usuario inexperto. En la Figura 3.6 se puede apreciar una mayor ventaja en cuanto a la comprensión de la combinación lógica. Como se ha mencionado con anterioridad, el Grafcet es una herramienta estándar según IEC 848 y permite la descripción gráfica del control del proceso. Y O Y Figura 3.6: Representación gráfica en Nivel Grafcet En términos de definición de Grafcet se puede transcribir dicho fragmento de condición lógica como condición de franqueabilidad de la transición B3 y por consiguiente la activación de la etapa 2, que es quién tiene la funcionalidad de habilitar la salida A 3.1 Esta salida se podría ejemplificar como la simple marcha de un motor o la apertura de una Electroválvula. 73 Solución Propuesta 3.5.2 Lenguaje del Editor Grafcet, es una metodología clara para la descripción y diseño de control independiente de la tecnología a utilizar. El Editor Grafcet como tal, es también independiente de la tecnología; sin embargo, sería muy útil que dicho diagrama pudiese ser depurado con un PLC. Además, resulta muy interesante la posibilidad que el Editor Grafcet generase código automáticamente Como se ha explicado anteriormente, el código generado automáticamente por el Editor Grafcet será implementado siguiendo una versión reducida del lenguaje de programación de los autómatas Simatic de Siemens, siguiendo la línea S7-300/400. El PLC resuelve la lógica programada como una lista de instrucciones o sentencias. Cada sentencia es un objeto que consiste en uno o dos campos. El primero de estos campos, siempre presente, representa el comando de una de las instrucciones de la lista de funciones del PLC. El segundo de los campos es el operando sobre el que se ejecuta la instrucción. El operando suele ser una dirección de memoria, temporizadores o acumuladores. Ciertas instrucciones, como la carga de una constante de temporización, permiten que el operando sea una constante numérica u hay otras instrucciones, como la apertura de paréntesis que no tienen operando. La ejecución del PLC va a leer el estado del operando a modificar su contenido como resultado de la ejecución de la instrucción sobre la que opera. La descripción de cómo se forman las direcciones de memoria y el juego de instrucciones se detallan a continuación. 3.5.3 Direcciones de memoria El direccionamiento de la memoria del PLC, es sólo directa (sin uso de punteros). Con el direccionamiento directo, las posiciones de memoria se denominan directamente por su posición en la tabla de datos. Cada variable se representa por una letra, un modificador (opcional), una posición de memoria o número de elemento y un número de bit. Un ejemplo es: TMe.b donde T= Designación del tipo de memoria M= Modificación de la variable e= Número de elemento b= Número de bit (cuando sea aplicable) Los tipos de memoria soportados son los descriptos en la Tabla 3.2: 74 Solución Propuesta Código de Area Descripción E Entradas A Salidas M Memoria interna de flag/bit T Temporizadores Z Acumuladores Tabla 3.2: Tipos de área de memoria Los modificadores de memoria sólo son aplicables para las áreas de memoria E, A y M. Los modificadores de dichas áreas de memoria de detallan en la Tabla 3.3: Modificador (ninguno) B W L Descripción Bit Byte Word Long Word Número de bits 1 8 16 32 Tabla 3.3: Modificadores de memoria Por lo tanto, son direccionamientos válidos: E 124.0 AB0 ML21 T31 Z124 3.5.4 Constantes Los operandos además de ser posiciones de memoria (variables) pueden ser constantes. Las constantes pueden ser de dos tipos: - Literales: un número, como por ejemplo 3. - De temporización: empiezan por S5T# seguido por un tiempo con el formato XXhXXmXXsXXms, donde h=horas, m=minutos, s=segundos, ms=milisegundos y X son números. Por ejemplo: S5T#123h12m3ms. 3.5.5 Juego de instrucciones La lista completa de instrucciones en un API, en este caso Siemens, se describe en la Tabla 3.4: 75 Solución Propuesta Operador L Mod ( Operando Cualquiera Descripción T Cualquiera S Cualquiera R Cualquiera Carga el valor del operando en el acumulador. Guarda el contenido del acumulador en el operando actual. Pone el operando a true (1).Trabajando con acumuladores, carga el valor del ACU1 de la CPU en el acumulador. Pone el operando a false(0) U ( Bit AND lógico O ( Bit OR lógico X ( Bit OR lógico exclusivo (XOR) >I Cualquiera >=I Cualquiera Compara el contenido del acumulador con el del operando y pone a 1 el resultado lógico si es mayor Mayor o igual que(ver >I) ==I Cualquiera Igual que (ver >I) <I Cualquiera Menor que(ver >I) <=I Cualquiera Igual o menor que (ver >I) <>I Cualquiera No igual (ver >I) UN ( Bit AND lógico negado ON ( Bit OR lógico negado XN ( Bit OR exclusivo lógico negado SET Pone el resultado lógico a true (1) SE Timer FP Bit FN Bit Activa la cuenta del temporizador si resultado lógico es 1 Detecta un flanco positivo en el operando Detecta un flanco negativo en el operando Tabla 3.4: Juego de instrucciones básicas de un API Siemens 76 Solución Propuesta En este caso nos centraremos en el conjunto de instrucciones básicas de operaciones con bits, ya que representan la mayoría de las aplicaciones de automatizaciones de procesos secuenciales, y por ende donde la herramienta Grafcet interviene en todo su potencial. Este conjunto acotado de instrucciones lógicas son los que se detallan en la Tabla 3.5: Operador Mod Operando Descripción U ( Bit AND lógico O ( Bit OR lógico UN ( Bit AND lógico negado ON ( Bit OR lógico negado Tabla 3.5: Juego de instrucciones acotadas del proyecto 77 Solución Propuesta 3.6 Simulación del Proceso Tal como se representa en la Figura 3.7, el usuario tendrá la posibilidad de efectuar la simulación del proceso anteriormente creado y programado. Mediante una interfaz gráfica interactiva, la herramienta permitirá la activación o forzado de variables del proceso y de esta manera visualizar el punto de ejecución del proceso a través de coloreo de etapas activas. En este punto el usuario tendrá la posibilidad de depurar la ejecución del automatismo, corrigiendo las condiciones programadas. Figura 3.7: Simulación del proceso automático secuencial 78 Solución Propuesta 3.7 Generación Automática de Código PLC Una vez que el Proceso ha sido depurado, la herramienta brindará la posibilidad al usuario, de generar en forma automática código de bajo Nivel, interpretado por un Autómata programable Industrial (PLC). Como se ha planteado dentro de los objetivos, en el presente trabajo se ha acotado la traducción a un lenguaje específico, en este caso de la línea S7-300 de Siemens. En la Figura 3.8 podemos apreciar representada la funcionalidad del módulo de generación de código, con la correspondiente sintaxis en el lenguaje anteriormente especificado. Figura 3.8: Generación automática de código de bajo nivel 79 Diseño e Implementación Capítulo 4 - Diseño e Implementación En el presente capítulo se detallan aspectos correspondientes al diseño e implementación de la herramienta que materializa el enfoque estudiado en el capítulo anterior. 4.1 Arquitectura general Grafcet es una aplicación compleja que cuenta con una gran variedad de clases que cumplen con distintas funcionalidades específicas. La aplicación en sí basa su arquitectura en el estilo arquitectónico Modelo Vista Controlador (MVC). MVC es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación, de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información, y por otro lado para la interacción del usuario. En la Figura 4.1 se observa la relación entre los módulos. Figura 4.1: Arquitectura basado en Modelo Vista Controlador (MVC) Básicamente, el modelo es el encargado de manejar los datos, así como también la lógica del programa. La Vista, por su parte, es el componente encargado de administrar la interfaz gráfica y de recibir la información y actualización de los datos por parte del Modelo. Finalmente, el Controlador es el que interactúa con el usuario para traducir sus entradas en comando para la Vista o el Modelo. 80 Diseño e Implementación Las siguientes subsecciones detallarán aún más cada uno de dichos componentes. Más específicamente, la Sección 4.1.1 explicará el modelo que tiene la aplicación Grafcet, con cada una de las partes más importantes del sistema. La Sección 4.1.2 por su parte detallará los distintos gestores que conforman el controlador del sistema. Finalmente, la Sección 4.1.3 muestra la vista y algunas capturas de pantalla de la interfaz gráfica. 4.1.1 Modelo El componente Modelo contiene el núcleo funcional de la aplicación. Éste encapsula los datos apropiados, y el procesamiento específico. El Modelo desconoce las interfaces asociadas a él, ya que lo que se busca es la independencia de éste con cualquier Vista o Controlador, en cambio, las Vistas y Controladores sí conocen su modelo. Los Controladores invocan a los módulos del Modelo. El Modelo además provee las funciones para acceder a sus datos que son usadas por las Vistas para obtener la información a ser mostrada. En particular, el diagrama de clases correspondiente al Modelo se puede ver de manera general en la Figura 4.2. Más específicamente, en la figura se muestra las clases que representan cada una de las figuras y de los componentes que conforman la edición de los programas codificados para el PLC. Figura 4.2: Diagrama de clases del componente Modelo En primer lugar, se puede ver la interfaz Figura, que representa cada una de las posibles figuras que pueden ser graficadas en un panel. Si bien no se define funcionalidad en esta clase, especifica los métodos que deben ser implementados por las sucesivas figuras que componen la jerarquía. En este caso los 81 Diseño e Implementación métodos a implementar están más relacionados con la posición que ocupan en el panel en el que van a ser graficados. Luego, se pueden ver las clases Linea, Condicion y la interfaz Enlace. Una línea representa la línea que conecta a dos instancias de la clase Enlace. Esta clase se encarga, entre otras cosas, de encontrar un camino entre dos enlaces de manera de que la línea en sí no pase por encima de otro enlace. Además, una Linea tiene una Relación definida, que se encarga de indicar cuáles son los enlaces que tiene de un lado de la línea y cuáles los de la otra. Finalmente, la clase Condicion se encarga de representar las condiciones que hay entre los enlaces. Dado que las condiciones también son mostradas gráficamente, es necesario saber en la posición en la que van a ser mostradas, es por eso que también es considerada una Figura. La interfaz Enlace agrega un nuevo conjunto de métodos a una Figura. Estos métodos son los encargados de determinar cómo agregar, borrar u obtener relaciones con otros enlaces. Se considera un Enlace a todas las figuras que pueden ser conectadas con líneas: una etapa, una etapa inicial, una línea simultánea o de bifurcación, y una línea de conjunto o de unión. Cada una de ellas puede recibir como entrada un conjunto de relaciones, y puede tener un conjunto de relaciones como salida. En primera instancia, la línea simultánea o de bifurcación tiene la función de activar a más de un enlace de manera simultánea. Es decir, cuando una línea simultánea es activada todas las relaciones que tiene como salida serán así mismo activadas al mismo tiempo. La parte de simulación en la que se puede ver detalladamente dicho funcionamiento se explicará en la Sección 4.3. Por otro lado, una línea de conjunto o unión tiene una funcionalidad opuesta. Esto es así porque la tarea de una línea de conjunto es esperar a que todas las relaciones que tiene como entradas sean activadas, para poder activar a las relaciones que tiene como salida. Entonces, una etapa que tenga como predecesor a una línea de conjunto sólo será activada cuando todas las etapas que precedan a dicha línea sean activadas. Al igual que con las líneas de bifurcación, toda esta funcionalidad se detalla en mayor profundidad en la Sección 4.3. Otra de las clases que es considerada un Enlace es una Etapa. Una etapa representa un estado en el que se está ejecutando una determinada acción en el proceso del programa de PLC. Estas son los componentes principales del diseño, dado que todo un programa se basa en el pasaje de una etapa a la otra dadas unas determinadas condiciones. Una etapa cumple con diversas funciones además de saber administrar sus relaciones. Cumple un rol muy importante en la simulación (ver Sección 4.3) y además en la traducción al código. Cuenta con un conjunto de acciones que representan las actividades que se ejecutan durante dicha etapa, y que además son las que se traducen luego al código general. Una etapa inicial cumple con la definición de una etapa, aunque tiene una manera de graficarse distinta, así como también la manera de administrar las relaciones de entrada. 4.1.2 Controlador El componente Controlador toma las interacciones del usuario como eventos. Cómo estos eventos son enviados al controlador, depende de la plataforma de la interfaz de usuario. Por simplicidad, se asume que cada controlador implementa un proceso manejador de eventos por cada evento relevante. Los eventos son traducidos en peticiones para el modelo o las vistas asociadas. 82 Diseño e Implementación Si el comportamiento de un controlador depende del estado del modelo, el controlador se registra así mismo al mecanismo change-propagation e implementa los procedimientos de actualización (Buschmann, Meunier, Rohnert, Sommerlad, & Stal, 1996). Este componente está dividido en varias clases denominadas gestores. Son las encargadas de administrar cada una de las distintas partes del programa: gestor de paneles, gestor de código, gestor de símbolos definidos, gestor de simulación, entre otros. Cada uno de estos gestores está conectado con la Vista para poder procesar las entradas del usuario y así notificar de los cambios efectuados al Modelo. En primer lugar, el gestor de paneles se encarga de administrar los distintos paneles de dibujo. Lleva registro del panel que está siendo utilizado en un momento determinado, y a su vez guarda en memoria cada uno de los restantes paneles para ser utilizados en caso de que el usuario así lo desee. También provee la funcionalidad para agregar nuevos paneles de diseño o eliminar alguno. Este es el componente que le envía los paneles así como cada una de sus etapas al gestor de simulación, para que el mismo los pueda administrar. El gestor de simulación, por su parte, se encarga de tener un registro de las etapas que están activadas en cada paso de la simulación. Además, permite administrar los valores de las variables previamente definidos en la tabla de símbolos. Cuando el usuario desea avanzar un paso de simulación, es este gestor el encargado de avisarles a las figuras correspondientes para que las mismas se actualicen. Lo mismo sucede en caso de que el usuario desee resetear la simulación, o cambiar un valor de las variables. Otro gestor importante en el programa es el gestor de símbolos definidos. Este permite agregar, editar o eliminar símbolos en cualquier momento de la etapa de diseño. Otra de sus responsabilidades es generar los símbolos predefinidos a la hora de comenzar con un diseño. También le envía al gestor de código la tabla de símbolos para que el mismo pueda imprimirla en el programa. En conclusión, cada parte del controlador interactúa con una parte de la vista para poder informar al modelo de los cambios que el usuario introduzca. A su vez, el controlador se encuentra dividido en varios gestores, cada uno de los cuales se encarga de una parte específica del programa. 4.1.3 Vista El componente Vista presenta la información al usuario. Las diferentes vistas presentan la información del modelo de diversas maneras. Cada una define un procedimiento de actualización que es activado por el mecanismo change-propagation. Cuando el procedimiento de actualización es llamado, la vista recupera los valores actuales de los datos a ser mostrados desde el modelo, y los presenta en pantalla. Durante la inicialización todas las vistas son asociadas con el modelo, y registradas en el mecanismo change-propagation. Hay una relación uno a uno entre la vista y el controlador, esta relación es un ejemplo del patrón de diseño Strategy. Las vistas, a menudo, ofrecen funcionalidad a los controladores para manipular el despliegue en pantalla. Esto es útil para operaciones activadas por el usuario y que no afectan al modelo (Buschmann, Meunier, Rohnert, Sommerlad, & Stal, 1996) Para esta parte del sistema, se hizo uso de la librería Swing1 que provee un conjunto de métodos para diseñar e implementar una interfaz gráfica de usuario. En particular, Swing 1 Sitio web de Swing 83 Diseño e Implementación fue diseñado con el fin de proveer un conjunto más sofisticado de componentes para la interfaz que su antecesor Abstract Window Toolkit (AWT). Esta biblioteca está diseñada de manera tal que su integración con sistemas MVC sea muy intuitiva. Además cuenta con diversos componentes predefinidos que agilizan el diseño de una interfaz gráfica. Uno de los componentes principales que provee esta librería es el JPanel. Esta clase representa un panel en el que se pueden agregar otros componentes como botones, campos de texto, etiquetas o, así mismo, otros paneles. Todos estos componentes pueden ser usados como clases para heredar y así poder personalizarlos, cambiando parte de su comportamiento interno. Esto brinda una gran flexibilidad a la hora de desarrollar. Adicionalmente, estos componentes cuentan con una gran variedad de métodos para poder modificar el tamaño, la posición, el ancho o alto, entre otras propiedades. Por otro lado, los componentes que se consideran contenedores de otros, como un JPanel, tienen definidos Layouts internamente. Un Layout es una forma de esquematizar los componentes dentro del contenedor, que sirve para diseñar la vista. Por ejemplo, RelativeLayout es un layout en el cual cada componente se define de acuerdo al resto de los componentes; BoxLayout permite definir los componentes de manera vertical u horizontal; etc. Todos los componentes que manejan información internamente, como lo son las tablas, cuentan con la posibilidad de definir modelos. Esos modelos son los que sirven para representar el modelo del sistema, es decir, el modelo explicado en la Sección 4.1.1 se plasma en los modelos de dichos componentes. Además, cada componente cuenta con Listeners que son clases que avisan de cada interacción del usuario con la interfaz. Estos sirven para poder avisar a los diferentes gestores las entradas del usuario, como se mencionó en la Sección 4.1.2. Es por todo esto que se considera que Swing tiene una gran compatibilidad con sistemas MVC. A sabiendas de todos los beneficios otorgados por esta librería, se decidió realizar la implementación con la misma. En la Figura 4.3 se muestra una captura de pantalla de Grafcet. Allí se pueden ver los distintos componentes: un panel donde se realiza el diseño de las etapas, los botones para agregar etapas o líneas, barras de menú en la parte superior y en la parte izquierda. Cada uno de dichos componentes tiene definidos sus Listeners para informarle a los distintos gestores, y tienen definidos distintos tipos de Layouts. 84 Diseño e Implementación Figura 4.3: Captura de pantalla de la vista de Grafcet 4.2 Condiciones Como se mencionó previamente, el objetivo principal que persigue le herramienta desarrollada es facilitar el desarrollo y codificación de sistemas de PLC. Ya se mencionó la gran dificultad que presenta desarrollar sistemas de este tipo, y el tiempo de desarrollo que puede implicar. Dentro del desarrollo en sí mismo, uno de los pasos fundamentales es la definición de condiciones, cuya notación puede resultar anti-intuitiva, con una notación poco amigable para un desarrollador inexperto, como puede ser un alumno. En la Sección 4.2.2 se detalla el diseño y los requerimientos para la representación de condiciones en Grafcet. La Sección 4.2.3, por su parte, detalla los pormenores de la implementación del diseño previamente mencionado. Luego, en la Sección 4.3 se especifica el diseño e implementación de los módulos correspondientes a la simulación. 4.2.1 Operaciones Lógicas Las operaciones lógicas con bits operan con dos dígitos, 1 y 0. Estos dos dígitos constituyen la base de un sistema numérico denominado sistema binario. Los dos dígitos 1 y 0 se denominan dígitos binarios o bits. En el ámbito de los contactos y bobinas, un 1 significa activado (“conductor”) y un 0 significa desactivado (“no conductor”). 85 Diseño e Implementación Las operaciones lógicas con bits interpretan los estados de señal 1 y 0, y los combinan de acuerdo con la lógica de Boole. Estas combinaciones producen un 1 ó un 0 como resultado y se denominan “resultado lógico” (RLO). Las operaciones lógicas con bits permiten ejecutar las más diversas funciones. Las operaciones básicas para las operaciones lógicas con bits son: U: Operación lógica AND. UN: Operación lógica AND negado. O: Operación lógica OR. ON: Operación lógica OR negado. X: Operación lógica OR-exclusivo. XN: Operación lógica OR-exclusivo negada. NOT: Niega el resultado lógico. También es posible definir operaciones con una cadena lógica encerrada entre paréntesis. La lista de instrucciones es más extensa, pero en este caso sólo nos centraremos en las operaciones básicas: AND, OR y NOT. A continuación se muestra un ejemplo de un fragmento de programa en el que se involucra alguna combinación de las operaciones lógicas mencionadas. O( U var1 U var2 ) O( U var3 U var4 ) Figura 4.4: Ejemplo de código representando una condición simple En la Figura 4.4 se muestra un breve ejemplo que involucra solo dos operaciones: AND y OR; y cuatro variables: var1 , var2 , var3, y var4 . Como se puede ver, el programa citado es sumamente verborrágico, con muchas sentencias para explicar poca funcionalidad. Es un lenguaje de muy bajo nivel que hace que sea sumamente difícil comprender su funcionalidad, así como también resulta muy complejo utilizarlo para agregar nueva funcionalidad. 86 Diseño e Implementación El mismo funcionamiento se puede ver gráficamente en la Figura 4.5 y se puede notar que es mucho más sencillo de comprender. Cada uno de los operadores está representado por una nueva caja en el diagrama, así como también las variables. Resulta mucho más ameno y entendible este lenguaje gráfico, sobre todo para aquellos usuarios que no tienen previa experiencia para su uso. 4.2.2 Diseño para la representación de condiciones Una vez analizada la problemática, se puede ver que hay una correspondencia directa entre la representación gráfica y el código necesario para representar las condiciones en un PLC. Este análisis resulta de gran utilidad a la hora de realizar un primer diseño para que la aplicación realice el pasaje automáticamente. Figura 4.5: Representación gráfica una condición simple Puntos a considerar a la hora de realizar el diseño: Puede haber cualquier combinación de operadores. Es decir, un operador AND, por ejemplo, puede estar precedido por cualquier operador (AND, OR, NOT) así como también por una variable. Lo mismo sucede con cualquier operador. La letra U se corresponde con el operador AND, la letra O con el operador OR y la letra N se corresponde con el operador NOT. Cuando un operador está precedido por una variable, solo se agrega la letra que corresponda para ese operador delante de la variable. Por ejemplo, el operador AND de la Figura 4.5 sólo está precedido por dos variables: var1 y var2. Su representación es la siguiente: 87 Diseño e Implementación U var1 U var2 Cuando un operador está precedido por un operador, se agrega la letra que corresponda a dicho operador y un paréntesis. Debajo de esa línea, se listan las condiciones que involucre el operador por el cual está precedido. Finalmente, se agrega una línea con el paréntesis para cerrar el paréntesis abierto previamente. Cuando un operador tiene más de una entrada, estas se listan una debajo del otro con la letra que corresponda a dicho operador. Es decir, si en el código se ven dos líneas con una 'U' que preceda, estos se corresponden al mismo operador, que en este caso es un AND. Para separar líneas que se correspondan con distintos operadores se usan los paréntesis. Las variables pueden ser vistas como operadores que sólo devuelven su valor de verdad. Teniendo en cuenta dicha especificación, se procede a realizar un primer diseño general que ataque cada uno de los puntos mencionados. Teniendo en cuenta el primer punto en particular, se puede notar la gran flexibilidad que existe a la hora de realizar una condición. Es decir, cualquier operador puede ser precedido por otro operador, y todos tienen un comportamiento en común: retornar las líneas de código correspondientes al operador. De esta forma, está claro que un operador tiene que tener completa independencia de lo que lo preceda. Luego de realizar una búsqueda por los patrones de diseño que puedan proveer una solución para esta problemática, se encontró el patrón que mejor se ajusta a dichos requerimientos es el patrón Composite. Según (Gamma, 1995), el patrón Composite permite: “Componer objetos en árboles para representar jerarquías todo-parte. Composite permite a los clientes tratar objetos individuales y objetos compuestos de una manera uniforme”. Esa definición es muy similar a lo que se había especificado previamente, un operador debe tratar a sus precedentes de la misma forma obteniendo el mismo formato de entrada, sin importar si estos eran objetos individuales (variables en nuestro caso) u operadores compuesto (operadores). Es por eso que para el diseño inicial se decidió utilizar este patrón. En la Figura 4.6, se muestra el diagrama de clases resultante luego de aplicar el patrón Composite. Como se puede ver, se define una clase abstracta Operador en la que se definen los métodos comunes a todos los tipos de operadores. 88 Diseño e Implementación Figura 4.6: Diseño para representar las condiciones usando el patrón Composite Como se mencionó en el último punto de las especificaciones, una variable también es un operador, que sólo retorna su propio valor. Es por eso que también está en el diagrama de clases. Dentro de los métodos definidos en el diagrama de clases, se distingue solo getCondicion(). Dicho método devuelve la traducción del gráfico a su formato PLC. Es decir, el operador AND, del ejemplo mencionado en la Figura 4.5, retornaría: U var1 U var2 De esta manera queda el diseño para la representación de condiciones terminado. El resto de los puntos mencionados en la especificación se desarrollarán con la implementación misma, dado que son más puntuales. 4.2.3 Implementación Una vez presentado el diseño, se pasa a mostrar los pasos que se siguieron para implementar el sistema de condiciones en el programa. Para la implementación se deben considerar las dos partes que esta involucra, por un lado, la lógica necesaria y, por el otro, la interfaz gráfica requerida para mostrar al usuario un editor con el que pueda establecer las condiciones. En principio, se puede plantear un diseño como el que se puede ver en la Figura 4.7 donde cada operador tiene la responsabilidad de dibujarse a sí mismo. Es decir, el método pintar, que proviene de la interfaz Figura, se encarga de generar el gráfico correspondiente para cada operador. En este caso, el operador AND graficaría una caja con la palabra 'AND' en su interior, el operador OR haría lo mismo para su caso pero con la palabra 'OR', las variables graficarían una caja con su nombre en el interior, y de manera análoga con el operador NOT. 89 Diseño e Implementación Figura 4.7: Diseño de operadores que pueden graficarse a sí mismos Es posible distinguir que existe una gran repetición de código con el caso anterior. Es decir, todos los operadores se representan con cajas, de la misma manera. La única diferencia que hay en cada caso es el texto que muestran en su interior. Entonces, una posible solución es delegar el funcionamiento de dibujar la caja a la clase abstracta, y definir un método que le permita a cada operador devolver el texto que deben dibujar en el interior de la caja. El diseño para este caso se puede ver en la Figura 4.8. Existe un patrón de diseño que especifica esta estrategia para delegar funcionamiento en común a la clase abstracta (en nuestro caso, graficar la caja que representa el operador), y solo heredar una pequeña parte de dicha funcionalidad (obtener el texto para escribir en la caja) en las clases hijo. Este patrón se conoce con el nombre de Template (Gamma, 1995). 90 Diseño e Implementación Figura 4.8: Diseño de operadores usando el patrón Template para graficar Si bien el diseño presentado parece correcto, todavía restan definir todos los métodos para poder establecer relaciones entre los distintos operadores, tanto sean de entrada como de salida. Analizando el código ya definido para poder graficar etapas y relaciones entre etapas, se puede distinguir una gran similitud con lo que se precisa para graficar operadores. Por lo cual, se decidió reutilizar dicha funcionalidad. Para lograr dicho objetivo, se procedió a realizar el diseño presentado en la Figura 4.9. 91 Diseño e Implementación Figura 4.9: Diseño de operadores reutilizando la funcionalidad para graficar una etapa Aquí se puede ver que toda la funcionalidad para graficar un elemento y para definir relaciones con otros elementos está definida en la interfaz Enlace. Luego, la clase abstracta Caja se encarga de implementar todos esos métodos para poder graficar una caja con un texto en su interior, siguiendo también el patrón Template. Finalmente, la clase Etapa implementa todos los métodos específicos de una etapa así como también el método para retornar el texto a escribir dentro de la caja. Lo mismo sucede con los operadores, que implementan su propia funcionalidad y la necesaria para obtener el texto a escribir. Con este diseño final, los únicos métodos que deben ser implementados son los correspondientes a la funcionalidad de los operadores. Es decir, los métodos getCondicion(), y getTexto(). Para el caso de getTexto(), cada operador retornará el texto que lo representa ('AND', 'OR', 'NOT', o el nombre de la variable, dependiendo del operador). Finalmente, para la implementación del método getCondicion() se precisa un poco más de lógica. En la Figura 4.10 se muestra la implementación para el operador compuesto. 92 Diseño e Implementación Figura 4.10: Implementación del método getCondicion() para el operador compuesto Allí se puede ver que cuando se trata de una variable, sólo se agrega la letra “U” por delante. Mientras que cuando se trata de un operador, se agrega una línea por encima de la condición devuelta por el operador que lo precede, en la que se abren los paréntesis. Luego se agrega otra línea al final de la condición en la que se cierran los paréntesis. El resto de los operadores siguen una implementación muy similar a la mostrada para el operador compuesto. Una vez que se agregan todos los operadores al editor, el usuario puede definir cualquier combinación de los mismos. Sin embargo, para determinar cuál es el operador final, el que devuelve el resultado de toda la condición que se quiere definir, se debe agregar un nuevo operador. Es decir, dado que pueden existir varios operadores usados a la hora de definir una condición, se debe determinar cuál de todos ellos es el que entrega el resultado final. Por este motivo, se agregó el operador IGUAL. Este operador sólo puede ser definido una vez en el editor, y su implementación del método getCondicion() va a retornar la condición que obtiene como entrada simplemente. Una vez definidos todos los operadores y su implementación, se procede a mostrar un breve ejemplo en el que se aplican todos los conceptos mencionados. La Figura 4.11 muestra la representación del ejemplo mostrado en la Figura 4.5, esta vez usando el editor Grafcet. Como se puede ver, se definieron todas las variables, se las conectó con los operadores AND. Estos, a su vez, pudieron ser posteriormente conectados con el operador OR. Finalmente, el operador OR es conectado con el mencionado operador IGUAL, que se encarga de retornar el resultado final una vez que se pulsa el botón Aceptar en la parte inferior. Como resultado se obtiene su representación en lenguaje de PLC, mostrado con anterioridad en la Figura 4.4. 93 Diseño e Implementación Figura 4.11: Ejemplo de la definición de una condición usando Grafcet 94 Diseño e Implementación 4.3 Simulación Una significativa potencialidad agregada como herramienta para el usuario resulta la posibilidad de depuración de código. Esto es, una vez definido el diagrama con sus respectivas etapas y transiciones, contar con la ventaja de simular el funcionamiento, mediante una interfaz interactiva en donde tenga la posibilidad de operar manualmente en el valor de cada variable interviniente. De esta forma, una vez que se han realizado todas las pruebas y correcciones en la programación, efectuar la traducción a lenguaje de PLC con un grado de certeza elevado en cuanto a funcionamiento y respuesta. En esta sección se detallará el diseño e implementación requeridos para poder agregar un soporte de simulación, en el cual se pueda probar el diagrama realizado, dándole la oportunidad al usuario de cambiar los valores de estado de cada una de las variables definidas y ver, paso a paso, el comportamiento del sistema. 4.3.1 Diseño Antes de poder realizar un diseño para poder implementar el módulo que soporte la simulación del sistema, es necesario realizar un análisis del estado actual de la aplicación. De esta forma, se detectará qué características se deben agregar y en qué punto es necesario agregar la nueva funcionalidad para poder brindar el mencionado soporte. En principio, se cuenta con una representación de Etapas y de enlaces. Las Etapas representan un estado en el diagrama, mientras que los enlaces representan las conexiones entre dichos estados. Básicamente, la simulación consta de tres características esenciales: 1. Activar etapas según corresponda. 2. Cambiar el estado de las variables previamente definidas. 3. Determinar si una condición se cumple o no. A continuación se detallará los puntos fundamentales a cubrir para poder brindar las mencionadas características. En primer lugar, el hecho de activar etapas implica que cada etapa debe saber si está o no activada. Es decir, debe mantener su propio estado. Por otro lado, para que una etapa pueda activarse se deben cumplir dos condiciones: las etapas inmediatamente anteriores (o sea, aquellas que solo están separados por un enlace) deben estar activadas; y que las condiciones definidas en los enlaces emergentes de dicha etapa sean franqueadas. La única excepción a este caso es la etapa inicial, dado que la misma se activa siempre por defecto al comenzar con la simulación. La Figura 4.12 muestra un ejemplo en el cual se explica mejor el proceso mediante el cual se activa una etapa. En principio, ninguna etapa se encuentra activada dado que la simulación todavía no comenzó. Una vez que la simulación comienza, automáticamente la etapa inicial es activada. Luego, dadas las circunstancias, la condición es cumplida. Así, debido a que ambas la condición y la etapa inmediatamente anterior están activadas, la etapa 2 es activada. 95 Diseño e Implementación Figura 4.12: Ejemplo de transición de etapas en una simulación Cuando se trata de una bifurcación o Divergencia en Y (ver Sección 3.4), el comportamiento difiere un poco de lo que se viene explicando hasta ahora. Una vez que la etapa inmediatamente anterior a la bifurcación es activada, y la condición de la relación se cumple, la bifurcación se activa. Al activarse la bifurcación, automáticamente se activan todas las etapas inmediatamente siguientes a la bifurcación. En la Figura 4.13 se muestra un ejemplo de una transición de etapas en una simulación, involucrando una bifurcación. La bifurcación, en este caso, es precedida por la etapa inicial, y está conectada a las etapas 2 y 3. La etapa inicial es activada al comenzar la simulación. Cuando la condición definida en la relación que conecta la etapa inicial con la bifurcación es cumplida, la bifurcación activa a las etapas 2 y 3 automáticamente. 96 Diseño e Implementación Figura 4.13: Ejemplo de transición de etapas con una bifurcación Solo resta por detallar el comportamiento de la simulación cuando se involucra una unión (ver Sección 3.4). Al contrario que en el caso de la bifurcación, una unión sólo es activada cuando todas las etapas que la preceden son activadas. Una vez cumplida la receptividad asociada a la transición emergente, la unión es activa y pasa a la etapa siguiente. La Figura 4.14 muestra un ejemplo de una simulación donde se involucra una transición de etapas con una unión. 97 Diseño e Implementación Figura 4.14: Ejemplo de transición de etapas con una unión En el primer estado las etapas 3 y 4 se encuentran activadas. Además, las condiciones definidas en la relación que las conecta con la unión también se cumplen. Por ende, la unión se activa y pasará automáticamente a la etapa 5. De todo el proceso previamente explicado, se pueden distinguir varios puntos a considerar en el diseño de esta sección del programa. A continuación se listan algunos de dichos puntos: Todas las figuras (etapas, enlaces, uniones y bifurcaciones) deben proveer la funcionalidad para informar si está activado o no. De esta forma, otras etapas van a poder determinar si deben o no ser activados, considerando que las etapas anteriores cumplen con los requisitos. Todas las figuras deben poder ser reseteadas. Como se mostró en los ejemplos de transición, cuando una etapa se activa, las etapas anteriores deben ser desactivadas. Todas las figuras deben proveer la funcionalidad para determinar si deben o no ser activadas. Por ejemplo, una tapa debe corroborar que las etapas y enlaces anteriores estén activados. A su vez, una relación va a estar activada si la condición definida en su interior se cumple. 98 Diseño e Implementación Todas las figuras deben poder actualizarse, en caso de que deban ser activadas (esto se determina usando la funcionalidad definida anteriormente). Aquí es donde se debe informar a las etapas y enlaces anteriores que deben ser reseteados. Por otro lado, al igual que sucedió con las condiciones, todas las figuras pueden ser combinadas de cualquier forma. Es decir, antes de un estado puede haber una unión, una bifurcación u otro estado. Lo mismo sucede con el resto de las figuras. Por lo tanto, se puede ver que estamos en condiciones de reutilizar el patrón de diseño Composite. Esto es así porque nos brinda la flexibilidad para independizarse de lo que esté definido previa o posteriormente. En la Figura 4.15 se muestra el diagrama de clases que representa los componentes necesarios para implementar la simulación en Grafcet. Figura 4.15: Diseño para la simulación utilizando el patrón Composite Como se puede apreciar, se aplicó nuevamente el patrón Composite siguiendo la estrategia previamente mencionada. También se puede notar que una etapa, una bifurcación y una unión sólo pueden conectarse con líneas. Una línea, en cambio, puede relacionarse con cualquier figura. Los métodos surgen de las especificaciones listadas anteriormente. activa() Este método se encarga de determinar si la etapa debe o no ser activada. Es decir, retornará un valor de verdad positivo en caso de que se cumplan las condiciones ya nombradas. En caso de que la etapa ya se encuentre activada, este también retornará un valor de verdad positivo. Caso contrario, devolverá FALSO como resultado, indicando que no se encuentra activada y que no se cumplen las condiciones necesarias para ser activado. 99 Diseño e Implementación actualizar() Este método se encarga de actualizar cada figura. Utiliza el método activa() para saber si debe ser activado. En cuyo caso, actualiza las variables necesarias para futuras invocaciones. Y resetea las figuras que la precedan. reset() Resetea la etapa, indicando que ya no se encuentra activado. Con esto se da por terminado el diseño para representar las figuras en la simulación. Resta por definir el diseño del componente del sistema que se encargue de procesar las condiciones (ver Sección 4.2) para determinar si las mismas son cumplidas o no. Para el análisis y procesamiento de las condiciones se puede pensar un diseño muy similar al desarrollado para la definición de las condiciones. Es decir, cada operación (AND, OR, NOT) debe poder determinar si esta se cumple o no. Por ejemplo, para determinar si una operación AND, el operador debe consultar a sus entradas si las mismas se cumplen. En caso de que se cumplan todas ellas, la operación AND retornará un valor de verdad positivo. Entonces, la estructura a plantear es muy similar a la mostrada en la Figura 4.9, solo que esta jerarquía no precisa ser representada gráficamente, con lo cual es necesario definir una nueva estructura. En este caso, el método a definir es CumpleCondicion() que se encarga de realizar la tarea previamente mencionada. Así, el resultado final de la estructura se puede apreciar en la Figura 4.16. Figura 4.16: Diagrama de Clases que representan las condiciones para la simulación Además de dicha funcionalidad, se debe realizar un módulo que se encargue de interpretar el texto en el que se definen las condiciones. Básicamente la tarea de este módulo es interpretar cada una de los caracteres definidos en la especificación de las condiciones, y, en base a ello, hacer una representación en memoria usando la jerarquía previamente mencionado. Siguiendo con el ejemplo mostrado en la Sección 4.2.1, dada una especificación de una condición como la que se pudo ver en la Figura 4.4, este módulo lo interpretaría para generar el modelo mostrado en la Figura 4.5. Una vez explicado todo el diseño que concierne al proceso de simulación, se procede a detallar la implementación de cada uno de los módulos previamente explicados. 100 Diseño e Implementación 4.3.2 Implementación Al igual que en el caso de la definición de condiciones, una vez definida la estructura a utilizar, la implementación es directa y sencilla. A continuación se mostrarán extractos de la implementación de cada uno de los componentes mencionados en el diseño mostrado en la Figura 4.15. Luego, se mostrará la implementación correspondiente a los módulos que interpretan las condiciones para determinar si las mismas se cumplen o no. En primer lugar, en la Figura 4.17 se muestra el código correspondiente a la implementación de la clase Etapa. Como se puede apreciar, los métodos son cortos y sencillos de entender. Vale aclarar que el método activa() es recursivo, es decir, invoca al mismo método pero de la Figura que lo antecede. Entonces, para determinar si una Figura debe ser activada o no, se llama recursivamente hasta llegar a la etapa inicial. Esto se puede agilizar en caso de que una etapa ya se encuentre activada. Figura 4.17: Código de la clase Etapa para implementar la simulación Para el caso de la Línea, tal como se presenta en la ¡Error! No se encuentra el origen de la eferencia., el código resultante es muy similar, solo se genera una ligera variación en cada método. Siguiendo la misma línea, se pueden definir el resto de los módulos a implementar. 101 Diseño e Implementación Figura 4.18: Código de la clase Linea para implementar la simulación En segundo lugar, el intérprete de condiciones es un poco más complejo de implementar, dado que se deben considerar diversas posibilidades. Básicamente, si se trata de una línea que contenga un paréntesis, entonces se trata de un operador lógico. Si no posee paréntesis, entonces pueden existir dos opciones: operador lógico con variable ó variable sola. Una vez identificada cada una de las alternativas, se puede proceder a generar la estructura en memoria, usando la jerarquía de clases mostrada en la Figura 4.16. Con lo cual, solo resta por presentar la implementación de la reciente mencionada jerarquía de clases que representa las condiciones. En la Figura 4.19 se muestra la implementación del método getCondicion() para la clase Variable. Se puede notar que la implementación es muy sencilla. Figura 4.19: Código de la clase Variable para implementar la interpretación de condiciones 102 Diseño e Implementación En la Figura 4.20, por su parte, se muestra la implementación del método en la clase And. Esta difiere un poco de la anterior presentada, dado que tiene que corroborar que cada una de las entradas sea verdadera para poder retornar un valor verdadero. El resto de los operadores se implementan siguiendo la misma línea: Figura 4.20: Código de la clase And para implementar la interpretación de condiciones 103 Casos de Estudio Capítulo 5 - Casos de Estudio Para poder evaluar la respuesta y el comportamiento de la herramienta desarrollada, se realizaron dos casos de estudio. Cada uno de ellos se ideó con el fin de plasmar de manera adecuada y concisa el funcionamiento de la herramienta en los puntos de mayor importancia. En el Apéndice A se muestra cómo es el funcionamiento de la herramienta, con información de la interfaz y los distintos elementos que la componen, junto con ejemplos sencillos que permitan facilidad de comprensión en la modalidad de trabajo. En el primer caso de estudio se plantea un ejemplo simple y didáctico a modo de introducción en el desarrollo de un automatismo de control, que permitirá analizar la sencillez que brinda la herramienta en el caso de que el usuario no posea amplios conocimientos en el ámbito de la programación de Autómatas Industriales. En el segundo caso de estudio se abordará un Proceso real de Automatismo de Control, el cual se encuentra implementado y en actual funcionamiento en una Planta Fabril, que permitirá analizar el funcionamiento de la herramienta en su máxima capacidad. En este punto se trazará una analogía con el comportamiento de la instalación física y las ventajas concretas ofrecidas en cada etapa del ciclo de trabajo, acompañado de ilustraciones fotográficas para una mayor comprensión del mismo. Se plantearán, además, posibles situaciones reales a modo de ilustración de las ventajas de la herramienta en el nivel de simulación virtual, resaltando la importancia que significa minimizar los riesgos de la puesta en marcha física del sistema. 104 Casos de Estudio 5.1 Caso de Estudio N° 1 En este apartado desarrollaremos la aplicación de la herramienta en un caso práctico y sencillo como es el funcionamiento de una taladradora. La taladradora es una máquina herramienta donde se mecanizan la mayoría de los agujeros que se hacen a las piezas en los talleres mecánicos. Estas máquinas de manejo sencillo, tienen dos movimientos: El de rotación de la broca que le imprime el motor eléctrico de la máquina a través de una transmisión por poleas y engranajes, y el de avance de penetración de la broca, que puede realizarse de forma manual sensitiva o de forma automática, si incorpora transmisión para hacerlo. Mando de una taladradora Consola Móvil Broca Bastidor Fijo Figura 5.1: Vista simbólica de la taladradora 5.1.1 Descripción Como se puede apreciar en la Figura 5.1, la taladradora se compone de un bastidor fijo y de una consola móvil respecto al bastidor. La consola soporta la broca y el motor de accionamiento de la taladradora. Las piezas a taladrar son puestas y fijadas manualmente en un montaje solidario del bastidor. 5.1.2 Ciclo de funcionamiento - La broca da vueltas permanentemente. El operario fija la pieza y da información al automatismo para el inicio de ciclo: 105 Casos de Estudio - Después de una aproximación a gran velocidad de la taladradora hacia la pieza, el taladrado se efectúa a pequeña velocidad. Cuando el taladro se ha efectuado, la broca vuelve a ascender a gran velocidad hasta la posición de reposo. Nótese que, cuando el recorrido de la broca, en sentido ascendente, llega de nuevo al captador b1 "aproximación terminada", la etapa 4 activa hasta este momento, no es receptiva a esta información y por lo tanto el comportamiento del automatismo permanecerá inactivo, por tanto la información facilitada por b1 será ignorada. De acuerdo al ciclo de funcionamiento descripto, podemos representar el diagrama Grafcet funcional de la aplicación, tal como se muestra en la Figura 5.2. Figura 5.2: Grafcet funcional de la taladradora 5.1.3 Nivel tecnológico Para construir efectivamente el automatismo de mando de la máquina, es necesario definir su naturaleza. Los actuadores dentro de la parte de mando permiten obtener las acciones a realizar. Los captadores entregarán las informaciones correspondientes o las señales de fin de ejecución. La toma en consideración de la naturaleza y en particular de la tecnología de los captadores y actuadores utilizados pueden conducir a representaciones diferentes. A título de ejemplo, consideramos la taladradora descripta anteriormente y analizamos su parte tecnológica: Los movimientos de descenso y ascenso son obtenidos por un motor eléctrico. Las informaciones "posición alta" y "posición baja" son obtenidos por finales de carrera electromecánicos. La información de "marcha" está facilitada por un pulsador eléctrico. 106 Casos de Estudio 5.1.4 Implementación con la Herramienta Paso 1: Lo primero que debemos hacer es identificar cuáles son las variables, y definirlas en la tabla de símbolos, en la pantalla de la Figura 5.3. Figura 5.3: Vista de pantalla de la tabla de símbolos de la Taladradora De esta manera quedan definidas todas las variables intervinientes en el proceso, que en nuestro caso serían: Pulsador de marcha de la máquina por parte del operario Las señales leídas por los captadores de acuerdo a la altura de la consola móvil Las acciones asociadas a los movimientos del cabezal, ascenso y descenso. 107 Casos de Estudio Paso 2: Una vez definidas las variables, creamos el diagrama que controlará el automatismo en cuestión. Dibujaremos las 4 etapas del diagrama en la pantalla de la Figura 5.4. Figura 5.4: Vista de pantalla del diagrama de etapas de la Taladradora El diagrama estará compuesto por 4 etapas, incluida la etapa inicial. 108 Casos de Estudio Paso 3: Dibujar las líneas de conexión entre las etapas de acuerdo al ciclo de trabajo del proceso tal como se observa en la pantalla de la Figura 5.5. Figura 5.5: Vista de pantalla de conexiones de etapas del diagrama de la Taladradora Por defecto, al crear la transición entre la etapa inicial y la próxima, el sistema asigna la condición de RESET_0, por una cuestión de diferenciación de tipos de etapas, pero dicha condición puede ser reemplazada por el usuario, tal como veremos más adelante. 109 Casos de Estudio Paso 4: Pulsando con el botón derecho encima de una etapa, nos aparece el panel de la Figura 5.6, que nos permite: - Cambiar la identificación de la etapa. Crear/Modificar/Eliminar la etiqueta asociada a la etapa. Modificar/Crear/Eliminar la etiqueta asociada a la etapa El cambiar el bitEstado o el bitCopia de la etapa Añadir una acción a la etapa Eliminar relaciones con otras etapas Eliminar la etapa Figura 5.6: Vista de pantalla del menú de edición de etapas Como vemos, a las etapas se les puede añadir etiquetas, que aporten más información al diagrama. En este caso, se despliega el menú de la Figura 5.7. Figura 5.7: Vista de pantalla del menú de edición de etiquetas En el cual podemos editar el texto de la etiqueta y la ubicación de la misma, a la derecha o izquierda del diagrama. Repetimos este proceso por cada una de las restantes etapas, y al finalizar la operación el diagrama quedará editado tal como se observa en la Figura 5.8. 110 Casos de Estudio Figura 5.8: Vista de pantalla del diagrama con edición de etiquetas 111 Casos de Estudio Paso 5: Añadimos las acciones correspondientes a las etapas: Pulsando con el botón derecho del ratón encima de una etapa y seleccionando la opción Acciones, nos aparece el panel de la Figura 5.9. En él, podremos definir acciones tipo S, R o = asociados a una posición cualquiera o a un símbolo definido previamente. En este caso definimos la acción asociada a la etapa 1. Repetimos el mismo procedimiento para las restantes etapas. Figura 5.9: Vista de pantalla del menú acciones de la Taladradora Paso 6: Añadimos las condiciones correspondientes a las transiciones: Haciendo doble clic en una relación entre dos etapas, nos aparece la ventana de la Figura 5.10. En ella podemos definir el texto de la etiqueta y todas las condiciones posibles que nos permite el lenguaje. Allí tenemos las alternativas de editar la combinación de condiciones lógicas mediante lenguaje de sentencias, o en forma gráfica que es justamente la potencialidad que brinda la herramienta, para abstraer al usuario del lenguaje complejo y poco intuitivo del PLC. Figura 5.10: Vista de pantalla del menú de condiciones de la Taladradora Pulsando la opción Dibujo aparecerá la pantalla de la Figura 5.11, para editar gráfica e intuitivamente la condición de una de las transacciones. 112 Casos de Estudio Figura 5.11: Vista de pantalla de edición gráfica de una transición de la Taladradora En el caso que el usuario optara por definir las condiciones en forma de sentencias, por ejemplo un usuario experto y familiarizado con la programación de PLCs, para la transición de la etapa 0 a 1, la condición estaría representada como se puede observar en la pantalla de la Figura 5.12, la cual estaría conformada por la simultaneidad de que la broca esté en rotación, en posición alta y pulsado el botón de marcha. Figura 5.12: Vista de pantalla de condición de transición 0-1 en modo sentencias Si por el contrario, optara por definir las condiciones en un lenguaje gráfico e intuitivo, la condición descripta en el menú anterior quedaría definida como se observa en la pantalla de la Figura 5.13. 113 Casos de Estudio Figura 5.13: Vista de pantalla de condición de transición 0-1 en modo gráfico Al pulsar el botón Aceptar, el sistema transcribirá en forma automática la cadena de condiciones del modo gráfico al lenguaje de sentencias de PLC como se observa en la pantalla de la Figura 5.14 La inclusión de paréntesis en la transcripción se da por la concatenación de operadores pero esta expresión es equivalente a la versión descripta anteriormente donde la combinación lógica se definía directamente en lenguaje de sentencias de PLC. Figura 5.14: Vista de pantalla transcripción de condiciones 114 Casos de Estudio Repitiendo el mismo procedimiento para las restantes transiciones, de acuerdo a las condiciones requeridas por el proceso en cada una de ellas, obtendremos como resultado el diagrama de la Figura 5.15, completamente programado. Figura 5.15: Vista de Pantalla del diagrama Grafcet completo de la Taladradora Como podemos apreciar, hemos podido representar, de manera sencilla, el diagrama funcional de la Figura 5.2, mediante la Herramienta desarrollada. En este punto estaríamos en condiciones de descargar el código en lenguaje de PLC, de forma automática mediante el botón Codigo. 115 Casos de Estudio Simulación En nuestro caso procederemos, antes de generar el código de programa, a efectuar una prueba del proceso mediante la herramienta de simulación para depurar posibles conflictos y de manera interactiva forzar variables del proceso que nos permitan visualizar la ejecución del mismo. Para ello, al pulsar el botón Simulacion aparecerá la pantalla de la Figura 5.16. Figura 5.16: Vista de pantalla del estado inicial de Simulación En este punto estamos en condiciones de interactuar con las variables del proceso. Pulsando el botón Actualizar podemos observar que el ciclo de trabajo está en marcha representado por el coloreo de la etapa inicial (Esperar). Es decir que el proceso está en reposo tal como se muestra en la pantalla de la Figura 5.17 Figura 5.17: Vista de pantalla del proceso de simulación de la Taladradora en estado de reposo 116 Casos de Estudio Para conocer cuáles son las variables que intervienen en una transición, en el caso de tratarse de combinación múltiple, haciendo doble click en la transición se despliega la visualización de cómo está conformada dicha transición, como se muestra en la pantalla de la Figura 5.18 Figura 5.18: Vista de pantalla visualización de condiciones en simulación de la Taladradora De esta forma, al clickear en el campo Valor de las variables de la transición 0-1 (PU_ON, Rot_Br y Pos_h) estamos forzando el valor lógico 1 a cada una de ellas, con lo cual la transición es franqueada y el proceso pasará a la etapa 1. Esto lo veremos reflejado al pulsar el botón Actualizar, con lo cual el cambio quedará visualizado en la pantalla de la Figura 5.19. Figura 5.19: Vista de pantalla franqueo de la transición 0-1 de la Taladradora 117 Casos de Estudio De esta manera podemos proseguir con cada una de las transiciones, observando cómo se comporta el sistema al efectuar los cambios de valores de variables. Para comprender la robustez del sistema Grafcet vamos a ejemplificar una condición real que puede ocurrir. En el estado de la Figura 5.19, es decir con el coloreo de la etapa 1, veremos qué ocurre si forzamos el valor de la variable de la transición 2-3. Para esto clickeamos en el valor de la variable correspondiente, que en este caso es solo una (Pos_b2). El usuario podría pensar que al validarse la condición de esta transición, el sistema debiera pasar a la etapa 3, sin embargo al pulsar el botón Actualizar ocurre lo observado en la pantalla de la Figura 5.20. Figura 5.20: Vista de pantalla del proceso con estado inalterable de salto de etapas Es decir, el proceso no se modifica justamente porque se cumple el principio de la regla de evolución del Grafcet, que especifica que para que sea franqueada una transición debe estar activa la etapa inmediata anterior, en nuestro ejemplo se cumpliría si el sistema se encontrara en la etapa 2. Para representar esto, forzamos la variable de la transición 1-2, pulsamos el botón Actualizar y en este punto estaríamos recién en condiciones de validar la condición de la transición 2-3. De la misma manera el usuario puede comprobar cada uno de los estados del ciclo del proceso y poder depurar el programa ante anomalías impensadas, ya sea por la falta de condiciones necesarias o inclusive errores en la definición de las condiciones, por ejemplo alguna de las variables que debieran tratarse como valores de verdad negados y se hubieran definidas de forma inversa. Si se pulsara el botón Reset, en cualquier punto del proceso, la ejecución pasará al estado inactivo y se borran todos los valores forzados de las variables. En este caso volveríamos al estado inicial de la simulación, en condiciones de ejecutar un nuevo ciclo de Simulación. 118 Casos de Estudio Generación de Código Una vez realizadas todas las pruebas de Simulación que el usuario crea conveniente, podríamos obtener el código final del programa a ser ejecutado por el PLC, en forma automática. Para ello, si pulsamos el botón Codigo, obtendríamos el código del programa correspondiente en la pantalla de la Figura 5.21. Figura 5.21: Vista de pantalla con el código de programa generado automáticamente Este código generado puede ser enviado a dispositivos de impresión, a través del menú Archivo, con la opción Imprimir. 119 Casos de Estudio 5.2 Caso de Estudio N° 2 En esta Sección desarrollaremos un caso real aplicado sobre una línea de Producción de Ladrillos cerámicos implementada en la Planta Industrial Loimar S.A., de la ciudad de Tandil, cuyo automatismo se encuentra actualmente en funcionamiento. Por una cuestión de simplificación, y como ya se ha explicado anteriormente el funcionamiento de la herramienta, no nos detendremos en la construcción paso a paso del diagrama, sino que resulta interesante mostrar las ventajas de la misma en el nivel de Simulación, donde podremos observar las ventajas de realizar todas las pruebas pertinentes del automatismo antes de su implementación práctica y prueba física del sistema. Acopio de Pallets de ladrillos terminados Se desea Automatizar una pinza de movimientos electromecánicos para el sector de Empaquetado de ladrillos cocidos. La funcionalidad radica en que permite crear un sector de Acopio de pallets terminados, de manera de optimizar los movimientos de un Autoelevador (ver Figura 5.26), guiada por operador, que en la actualidad es la que debe cargar cada grupo de 3 pallets finalizados en la mesa (ver Figura 5.22) y transportarlos individualmente a la playa de Acopio General de ladrillos, sitio desde donde son cargados en los camiones de transporte. El sector creado estará constituido por 3 estaciones de almacenaje, llamados Boxes, donde en cada estación se podrán almacenar hasta 3 filas de pallets compuestas por 3 pallets cada fila. Es decir que en cada estación de almacenaje se depositarán hasta 9 pallets de ladrillos que serán cargados por el autoelevador una vez completado el Box correspondiente, o todos los Boxes como se puede observar en la Figura 5.23. Las ventajas analizadas a la hora de proyectar la obra fueron las siguientes: • Reducción significativa de los movimientos del autoelevador, ya que se reduciría a solo un tercio la cantidad de movimientos, al pasar a trasportar 3 pallets en vez de 1 como es en la actualidad. • Aumento considerable de la eficiencia de la línea de producción debido a que brindaría la posibilidad de tener un pulmón de descarga sin riesgo, en un período de tiempo razonable, de que la línea de empaquetado se vea imposibilitada de continuar descargando si por alguna razón el autoelevador no llegase a cargar el pallet terminado y en espera de liberación de la mesa, antes de que un próximo pallet requiera arribar a la misma. • Funcionamiento absolutamente automático de manera que no requeriría contar con nuevos puestos de trabajo para la operación funcional de la pinza. Además contará con todos los elementos de seguridad de funcionamiento y con una tasa de mantenimiento prácticamente nula, salvo lubricación y control de los componentes mecánicos. 120 Casos de Estudio Figura 5.22: Vista del Procedimiento aplicado anterior al Proyecto de Automatización Figura 5.23: Vista del Procedimiento posterior al Proyecto de Automatización finalizado 121 Casos de Estudio Vista General de la Instalación Figura 5.24: Vista General de la Instalación 122 Casos de Estudio Vista del Tablero Eléctrico General de Comando Figura 5.25: Vista del Tablero de Comando General del Automatismo Vista del Autoelevador Industrial Figura 5.26: Vista de un Autoelevador para Transporte de Pallets 123 Casos de Estudio 5.2.1 Descripción En la Figura 5.27 se representa el diagrama físico general de la instalación, en el cual se ubican los elementos necesarios para efectuar el automatismo, tales como sensores captadores de posición y actuadores electromecánicos que efectuarán los movimientos de traslación e izaje de la pinza, en nuestro caso motores asincrónicos. Figura 5.27 Diagrama general de la instalación En la Figura 5.28 podemos observar la lista detallada de los componentes para implementar el automatismo. Símbolo Función Sensores de Detección de Traslación de Carro Sensores de Detección de Presencia de Pallets en Boxes - Mesa Sensores de Posicionamiento Final de Carro Sensores de Detección de Niveles de Pinza Sensor de Detección de Apoyo de Pallet Motores Carro y Pinza Figura 5.28: Componentes del Automatismo del Proceso 124 Casos de Estudio En la Figura 5.29 podemos observar la descripción de la funcionalidad de los componentes del ciclo del automatismo. Símbolo S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 S17 S18 S19 S20 S21 S22 S23 S24 M1-A M1-R M1-V M2-A M2-D M2-V Descripción Presencia Pallet para ser cargado Presencia Pallet en Box 1 Fila 1 Presencia Pallet en Box 1 Fila 2 Presencia Pallet en Box 1 Fila 3 Presencia Pallet en Box 2 Fila 1 Presencia Pallet en Box 2 Fila 2 Presencia Pallet en Box 2 Fila 3 Presencia Pallet en Box 3 Fila 1 Presencia Pallet en Box 3 Fila 2 Presencia Pallet en Box 3 Fila 3 Posicionamiento Pinza Fuera de Operaciones Posicionamiento Pinza en espera de carga Posicionamiento Pinza Pallet cargado Posicionamiento Pinza en Box 1 Posicionamiento Pinza en Box 2 Posicionamiento Pinza en Box 3 Posicionamiento Pinza Seguridad Traslación Adelante Posicionamiento Pinza Retroceso Pallet descargado Posicionamiento Pinza Ajuste Final de Parada Posicionamiento Pinza en Nivel Inferior Posicionamiento Pinza en Nivel de Carga Posicionamiento Pinza en Nivel Superior Posicionamiento Pinza Apoyo Pallet Detección Pallet cargado en pinza Avance Traslación Pinza Retroceso Traslación Pinza Movimiento Traslación Veloz Movimiento Ascenso Pinza Movimiento Descenso Pinza Movimiento Izaje Veloz Figura 5.29: Descripción de los componentes para la automatización de la pinza de acopio 125 Casos de Estudio 5.2.2 Ciclo de funcionamiento 1. La pinza permanecerá en reposo en posición de espera de carga de un nuevo grupo de Pallets. 2. Cuando arriba un grupo a la mesa (S1) debe efectuar el movimiento de traslación de avance hasta una posición fija de carga (S13) a Velocidad "Lenta" prefijada de manera de enhebrar las uñas en los huecos de la tarima de madera sobre la cual se deposita el pallet de ladrillos. 3. Una vez cargado el pallet debe efectuar el movimiento de ascenso a velocidad "Veloz" prefijada hasta una posición fija de Nivel superior (S22). 4. La prioridad es siempre desde adelante hacia atrás, es decir que el orden de descarga será Box 3 -> Box 2 -> Box 1, inalterable por ninguna razón. 5. Si se ha liberado un Box posterior se debe respetar el orden de descarga, es decir que si se ha descargado un pallet en el Box 2, y en ese momento se liberase el Box 3, de todas maneras se debe continuar a completar los 3 niveles del Box 2 y luego se pasaría al Box 1. Este motivo se debe a que como la pinza, al descarga un pallet, debe efectuar un movimiento de retroceso para liberar las uñas, no debería existir obstáculo de pallet alguno que imposibilite esta operación. 6. Siempre que se haya depositado un pallet en uno de los niveles de un Box, debe continuar operando con el mismo hasta completar los 3 Niveles. 7. En el momento que la pinza carga un pallet de la mesa, y asciende hasta la posición fija para trasladarse, deben chequearse las condiciones de prioridad y espacio libre para efectuar la descarga, caso contrario permanecerá en esta posición a la espera de condiciones seguras. 8. Una vez comprobado el puesto de descarga, la pinza efectúa el movimiento de traslación de avance hasta la posición fija del box correspondiente, a una velocidad "Veloz" prefijada. 9. Al arribar al sensor de posicionamiento de traslación de box adecuado, el movimiento de traslación continúa a una velocidad "Lenta" de aproximación prefijada hasta la posición de ajuste final de parada de la traslación (S19). 10. En el Box correspondiente, la pinza efectúa el movimiento de descenso a una velocidad "Veloz" prefijada. 11. Al llegar a obstruirse el sensor de Nivel de box correspondiente a la fila a descargar, el movimiento de descenso continúa a una velocidad de aproximación "Lenta" prefijada, hasta el posicionamiento de Pallet descargado (S23). 12. Una vez depositado el pallet, comienza el movimiento de traslación en retroceso a velocidad "Lenta" prefijada, hasta una posición fija para liberar uñas (S18). 13. Una vez liberadas la uñas debe ascender a velocidad "Veloz" prefijada hasta la posición fija de nivel superior (S22). 14. En posición de nivel superior, apta para traslación, debe efectuar el retroceso a velocidad "Veloz" prefijada hasta posición de espera de carga en mesa (S12). 126 Casos de Estudio 15. Al arribar al sensor de posicionamiento de traslación en mesa de carga, el movimiento de traslación continúa a una velocidad "Lenta" de aproximación prefijada hasta la posición de ajuste final de parada de la traslación (S19). 16. En la posición de Debe efectuar el movimiento de descenso a velocidad "Veloz" prefijada hasta posicionamiento en Nivel de carga (S21). 17. Fin del ciclo Automático. En este punto es importante resaltar la importancia del objetivo principal del presente trabajo debido a que, actualmente, a la hora de realizar la programación del automatismo, el usuario programador debe confeccionar en forma manual, a mano alzada, un diagrama propicio para el seguimiento del ciclo ya que no se cuenta con una herramienta útil para crear el diseño del ciclo del proceso y posteriormente poder transcribirlo al lenguaje de PLC. Como se puede apreciar en la Figura 5.30, se cita a modo de ejemplo un fragmento del ciclo del automatismo con el cual se creará posteriormente el programa de control en el software propio del PLC. Figura 5.30: Ejemplo del diseño del automatismo de la pinza 127 Casos de Estudio Una vez finalizado el diagrama, con todos los componentes intervinientes en el automatismo, el programador deberá transcribir el diagrama funcional en el lenguaje propio del PLC, y mediante el software correspondiente al fabricante del mismo. En el caso de la Figura 5.31, el programa está basado en la línea S7-300 de Siemens. Figura 5.31: Fragmento de código de programa en lenguaje de PLC Con esto queda evidenciado que el automatismo debe ser llevado a cabo por usuarios expertos en programación de sistemas basados en PLCs, lo cual resalta la importancia del objetivo principal del presente proyecto, que es justamente desarrollar una herramienta que permita a un usuario inexperto abstraerse del mundo de los autómatas, ya que solamente deberá focalizarse en diseñar un diagrama Grafcet del automatismo y la herramienta posteriormente generará de manera automática el código del programa del PLC. 128 Casos de Estudio 5.2.3 Implementación con la Herramienta Por una cuestión de simplicidad y mejor comprensión del ejemplo optaremos por acotar el ciclo de trabajo sólo para el acopio en el Box 3. De todas maneras será suficiente para el caso que se desea mostrar en lo que respecta a funcionalidad de la Herramienta. Paso 1: Una vez identificadas las variables, de acuerdo a la lista de la Figura 5.29 procedemos a definir la tabla de símbolos en la pantalla de la Figura 5.32. Figura 5.32: Vista de pantalla de la tabla de símbolos de la pinza de acopio 129 Casos de Estudio Paso 2: De acuerdo a la descripción del automatismo, identificamos las etapas que van a componer el diagrama funcional del mismo, tal como se representa en la Figura 5.33. Figura 5.33: Diagrama Funcional de Ejecución del ciclo 130 Casos de Estudio Basándonos en el esquema funcional de la Figura 5.33, crearemos el diagrama Grafcet que controlará el automatismo en cuestión. Dibujaremos las etapas y conexiones como se observa en la pantalla de la Figura 5.34. Figura 5.34: Vista de pantalla con etapas y conexiones del Grafcet de la Pinza de Acopio 131 Casos de Estudio Paso 3: Añadimos las etiquetas a cada una de las etapas, pulsando botón derecho encima de la etapa y luego seleccionando la opción Añadir etiqueta del menú desplegable. Como resultante obtendremos el diagrama de la pantalla de la Figura 5.35. Figura 5.35: Vista de pantalla con etiquetas en etapas del Grafcet de la Pinza de Acopio 132 Casos de Estudio Paso 4: Definimos las condiciones de transición entre las etapas. Por ejemplo, para la transición entre las Etapas 0 (En Reposo) y 1 (Carga Pallets en Mesa), las condiciones que deben validarse, en forma simultánea, son las siguientes: - Pinza en Posición de Carga (S12) Posición Pinza en Nivel de Mesa (S21) Selección Funcionamiento Automático (Auto) Presencia de Pallet para ser cargado (S1) Dibujamos la combinación lógica mediante el submenú Dibujo dentro de la ventana de Condición - Relación 0 – 1 de la pantalla de la Figura 5.36. Figura 5.36: Vista de pantalla edición gráfica de condición 0-1 del Grafcet de la Pinza de Acopio Al finalizar la edición de la combinación lógica, pulsando el botón Aceptar, quedarán definidas las condiciones en formato de lista de instrucciones tal como se observa en la Figura 5.37 Figura 5.37: Vista de pantalla condiciones etapa 0-1 Grafcet de la Pinza de Acopio 133 Casos de Estudio Paso 5: Aplicando el mismo procedimiento, definimos las etiquetas de todas las transiciones del ciclo, así como también las combinaciones de condiciones lógicas que comprenden cada una de ellas obteniendo en pantalla el diagrama de la Figura 5.38. Figura 5.38: Vista de pantalla con etiquetas en transiciones Grafcet de la Pinza de Acopio 134 Casos de Estudio Paso 6: Añadimos las acciones correspondientes a las etapas pulsando con el botón derecho del ratón encima de una etapa y seleccionando la opción Acciones. Nos aparece el panel de la Figura 5.39. En este caso definimos la acción asociada a la etapa 1, que según el diagrama funcional corresponde al movimiento de avance lento para efectuar la carga del pallet. Figura 5.39: Vista de pantalla de edición de acciones Etapa 1 del Grafcet de la Pinza de Acopio De la misma forma repetimos el procedimiento para las restantes etapas, basándonos con el diagrama funcional y la tabla de símbolos. De esta manera el ciclo del Automatismo estará plenamente programado, y en condiciones de generar el código Automático de programa en lenguaje de PLC. 135 Casos de Estudio Simulación Procederemos, antes de generar el código de programa, a efectuar una prueba del proceso mediante la herramienta de simulación, para depurar posibles conflictos y explicar algunos casos concretos para una mejor comprensión de las ventajas de la Herramienta. Tal como se ha mencionado en el caso de Estudio N° 1, al pulsar el botón Simulación aparecerá la pantalla correspondiente y como primera instancia de ejecución, al pulsar el botón Actualizar, el sistema permanecerá con la Etapa Inicial activada en condiciones de ejecutar el ciclo, es decir a la espera de que sean franqueadas las condiciones de la transición 0-1, lo cual puede visualizarse en la pantalla de la Figura 5.40. Figura 5.40: Vista de pantalla simulación estado de reposo del Grafcet de la Pinza de Acopio Desde el punto de vista de la realidad del proceso, podemos representar el estado inicial del ciclo de simulación virtual con las imágenes de la Figura 5.41 , en las cuales se puede apreciar el estado de la pinza en tal condición. 136 Casos de Estudio Figura 5.41: Vista real de la Pinza de Acopio en estado inicial del ciclo El siguiente paso del ciclo seria forzar el estado de las variables que intervienen en la condición de la transición de paso de la Etapa 0 a la Etapa 1. En los casos en que dicha condición esté conformada por una combinación de variables, y el usuario obviamente no tenga la certeza acerca de cuáles son dichas variables, haciendo doble click sobre la transición en cuestión, aparecerá la pantalla de edición de las condiciones y de esta manera se podrá constatar qué valores se deben validar o forzar para pasar a la próxima etapa como podemos apreciar en la Figura 5.42 Figura 5.42: Vista de pantalla consulta de condición Grafcet de la Pinza de Acopio 137 Casos de Estudio De esta forma, al forzar los valores de las variables correspondientes sobre la tabla de la derecha, y al pulsar el botón Actualizar el ciclo del proceso pasará a la Etapa 1 como se puede apreciar en la pantalla de la Figura 5.43. Figura 5.43: Vista de pantalla franqueo de transición 0-1 Grafcet de la Pinza de Acopio Es decir que en este punto la pinza comenzará a efectuar el proceso de carga, el cual consiste, de acuerdo a las acciones implementadas en tal etapa, en el movimiento en sentido de avance, a velocidad lenta de manera de enhebrar las uñas en los huecos de las tarimas de madera sobre las cuales están depositados los pallets tal como se representa en la Figura 5.44. Uñas de la Pinza Figura 5.44: Enhebrado de Uñas de la pinza para carga de pallets 138 Casos de Estudio Esta situación podemos representarla, en el estado real de la instalación, mediante las fotografías de la Figura 5.45, donde podemos apreciar el proceso de carga de la pinza sobre un nuevo grupo de pallets que han arribado. Figura 5.45: Vista real de la Pinza en Estado de Carga de Pallet De la misma manera podemos interactuar sobre la tabla de valores de variables de la simulación, y visualizando el comportamiento del ciclo del automatismo, verificando que se cumpla el funcionamiento del sistema en respuesta a los cambios de estado de las variables implicadas en cada punto. Este proceso nos permitirá constatar que no se produzcan cambios de etapas si no están dadas las condiciones permitidas, o por el contrario chequear ante posibles casos en que no se produzca el cambio de estado debido a condiciones faltantes o inclusive defectos en la programación de las condiciones. Así por ejemplo podemos representar la analogía del comportamiento del proceso de Simulación con el estado real de la instalación física de acuerdo a las siguientes ilustraciones: 139 Casos de Estudio Estado del Sistema en Etapa 2: Ascenso Veloz en Mesa (Figura 5.46) Figura 5.46: Vista real de la pinza con el Estado del Sistema en Etapa 2 Estado del Sistema en Etapa 3: Traslación Veloz a Boxes (Figura 5.47) Figura 5.47: Vista real de la pinza con el Estado del Sistema en Etapa 3 140 Casos de Estudio Estado del Sistema en Etapa 5: Descenso Veloz en Box 3 (Figura 5.48) Figura 5.48: Vista real de la pinza con el Estado del Sistema en Etapa 3 Estado del Sistema en Etapa 6: Descenso Lento en Box 3 (Figura 5.49) Figura 5.49: Vista real de la pinza con el Estado del Sistema en Etapa 6 141 Casos de Estudio Estado del Sistema en Etapa 7: Retroceso Lento en Box 3 (Figura 5.50) Figura 5.50: Vista real de la pinza con el Estado del Sistema en Etapa 7 De esta manera el usuario puede forzar distintas situaciones de eventos para comprobar el comportamiento ante posibles anomalías y de esta manera depurar las combinaciones lógicas de las distintas transiciones entre etapas o acciones dentro de cada una de las mismas. A continuación analizaremos 2 casos prácticos que pueden ocurrir perfectamente durante el desarrollo de la implementación y comprobar la importancia que brinda la herramienta en lo que respecta a poder solucionar conflictos antes de efectuar la puesta en marcha física del sistema. Primer Caso: De acuerdo a la pantalla de la Figura 5.51, vemos que las condiciones de la transición de la Etapa 1 a la Etapa 2 están definidas por un operador OR entre los Operandos: S12 (Posicionamiento Pinza en espera de carga) S24 (Detección Pallet cargado en pinza) Esto significa que ante la validación de cualquiera de las dos variables, el sistema franqueará la transición y pasará al estado de activación de la Etapa 2 (Ascenso de la Pinza), es decir que la carga del pallet se ha cumplido. Esta situación es válida y en la mayoría de los casos se cumple perfectamente con lo cual la operación se efectúa sin inconvenientes. 142 Casos de Estudio Figura 5.51: Vista de pantalla Condiciones de Transición 1-2 con Operador OR Sin embargo, como hemos explicado con anterioridad, la forma de carga del pallet a través de la pinza, con el enhebrado de las uñas en la tarima de madera, pueden ocurrir casos como se representa en la Figura 5.52. Figura 5.52: Vista de la situación con tarimas defectuosas Con lo cual, por defecto en la tarima, las uñas no serán enhebradas, pero sin embargo la posición de fin de carga de la pinza será validada ya que no hay impedimento para efectuar el movimiento de traslación. De esta manera el sistema pasará a la Etapa 2 (Ascenso de la Pinza), provocando la situación que se representa en la Figura 5.53. 143 Casos de Estudio Figura 5.53: Ilustración Incidente provocado por tarimas defectuosas Para solucionar este tipo de conflicto, el usuario debiera modificar las condiciones de transición correspondiente de manera de contemplar la simultaneidad de las 2 variables que intervienen y de esta manera asegurarse que la pinza está en la posición correcta de carga y se detecte la carga efectiva del pallet por parte de las uñas de la pinza, o sea perfectamente enhebradas. Esta modificación quedaría representada por la pantalla de la Figura 5.54. Figura 5.54: Vista de pantalla Condiciones de Transición 1-2 con Operador AND 144 Casos de Estudio Segundo Caso: De acuerdo a la pantalla de la Figura 5.55, vemos que la condición de transición de la Etapa 2 a la Etapa 3, es decir la traslación de la pinza una vez cargado en pallet en la mesa, se valida cuando la Pinza está arriba de la mesa con el pallet cargado. Figura 5.55: Vista de pantalla de la condición de transición 2-3 Grafcet de la Pinza de Acopio El usuario comprueba que al cabo de efectuar 3 ciclos del proceso, es decir ha depositado los 3 grupos de pallets en el Box correspondiente, al cargar el cuarto grupo de la mesa, y al validarse la transición, el sistema activa la Etapa 4 del ciclo (Traslación veloz a Boxes), con lo cual se produce el incidente mostrado en la Figura 5.56. Figura 5.56: Ilustración Incidente provocado por sobre- acopio de Pallets 145 Casos de Estudio Esta situación puede producirse cuando el autoelevador no desocupa el box antes de que la pinza cargue el cuarto grupo de la mesa, por cualquier circunstancia que demore el normal transporte de pallets a la playa de acopio. La manera de contemplar y solucionar esta situación sería adicionando a la condición de la transición, la condición que contemple que al menos hay lugar para depositar un grupo en el Box, que sería utilizando el sensor que determina la presencia de pallets en el Nivel 3 del Box (S10). De esta forma la condición quedaría modificada como se muestra en la pantalla de la Figura 5.57. Figura 5.57: Vista de pantalla de la condición de transición 2-3 modificada Con estos casos de análisis queda de manifiesto la importancia, para el usuario, de lo que representa efectuar una prueba exhaustiva del proceso, que permita depurar la programación del automatismo de tal manera de minimizar los futuros riesgos que representarían los incidentes planteados si se efectuara la puesta en marcha física del sistema sin posibilidad de pruebas preliminares. Una vez finalizada la etapa de simulación del sistema, y efectuadas las depuraciones necesarias del proceso automático, se podrá generar el código de programa generado en forma automática. Para ello, si pulsamos el botón Codigo, del menú superior, obtendríamos el código del programa correspondiente en lenguaje de PLC como se puede observar en la pantalla de la Figura 5.58. Mediante la opción Imprimir del Menú Archivo se puede descargar el programa en dispositivos de impresión. 146 Casos de Estudio Figura 5.58: Vista de pantalla código de programa generado de la Pinza de Acopio 147 Conclusiones Capítulo 6 - Conclusiones Luego de haber realizado una investigación inicial, donde se introdujo al lector en conceptos importantes y necesarios para poder tener una visión completa y entender los temas desarrollados en todo el trabajo, se planteó la problemática actual frente a la implementación de un sistema automático de control industrial. También se plantea la comparación, en cuanto a ventajas y desventajas que presentan otras aproximaciones comerciales existentes en el mercado. Estas herramientas si bien presentan diferentes propuestas que intentan brindar ayuda al usuario, y facilitar la tarea de programación en el área del Control Automático, se pudieron encontrar algunas deficiencias o faltantes que no permiten lograr una asistencia integral y adecuada. A partir de las deficiencias encontradas, se elaboró una herramienta de asistencia amigable, capaz de brindar ayuda en temas de diseño de control automático secuencial. A través de una interfaz clara y sencilla se pretende maximizar la usabilidad y la interacción con los usuarios. El beneficio adquirido al utilizar la propuesta planteada, es la separación de las responsabilidades, fundamental para el mantenimiento del sistema y el desarrollo de posibles futuras extensiones. A partir de las pruebas realizadas en el capítulo anterior, se observó un comportamiento satisfactorio de la herramienta. Los niveles de éxito entregados en cada prueba se encontraron dentro del rango de los valores esperados, en general se lograron buenos resultados. La interfaz demostró ser simple e intuitiva, presentando la información de una forma clara y precisa. Al realizar las pruebas se pudo comprobar un mínimo nivel de dificultad en los casos en los que se trataba de usuarios de escaso nivel de conocimiento en programación de PLCs, obteniendo prácticamente los mismos resultados que las pruebas llevadas a cabo por personal experto en la materia. Como se puede ver, utilizando diferentes escenarios en diversas aplicaciones, y diversidad de niveles de experiencia por parte de los usuarios, los resultados son prometedores y corroboran que el proceso cumple con su propósito. Del mismo modo, y luego de las pruebas efectuadas, se identificaron algunas limitaciones que presentaremos en las secciones posteriores. A continuación se enumeran algunas de las ventajas que brinda el asistente así como también algunas de sus limitaciones conocidas. Finalmente veremos algunas posibles extensiones o trabajos futuros que han ido surgiendo durante el desarrollo y se consideraron importantes. 148 Conclusiones 6.1 Ventajas Algunas de las ventajas que se encontraron y fueron consideradas como relevantes para presentar, son las siguientes: La utilización de la herramienta ofrece al usuario novato un aprendizaje en el área de diseño de automatismos de control automático industrial. Esto se debe a que por el grado de abstracción que ofrece la propuesta, el usuario puede desarrollar un proceso de control sin mayores requisitos más que la experiencia práctica que brinda el conocimiento de la instalación e incorporar nuevos conocimientos a medida que utiliza la herramienta. La herramienta brinda al personal responsable de la ingeniería de proyectos de Automatización, la posibilidad de delegar la tarea, al menos en parte, del diseño del proceso así como también la programación del mismo ya que ofrece como resultado final el código generado en forma automática. La interfaz gráfica de la herramienta es sencilla, práctica y concisa, permitiendo al usuario una rápida adaptación al sistema de desarrollo. El módulo de simulación de la herramienta brinda a usuarios novatos la posibilidad de efectuar todas las modificaciones y/o correcciones necesarias en la definición de condiciones lógicas, liberándolos de la responsabilidad que significaría afrontar los riesgos directos que puede causar la puesta en marcha física sin pruebas virtuales previas. Las funcionalidades principales se dejaron totalmente abiertas para su extensión. De este modo, se pueden realizar distintas implementaciones para generar dichas funcionalidades y adaptarlas a la aplicación sin ningún tipo de impedimentos aprovechando la flexibilidad que brinda la Programación Orientada a Objetos. La herramienta fue desarrollada en código Java, favoreciendo la portabilidad a distintos sistemas operativos. Al estar integrada con el IDE Eclipse, logra combinar la rama del diseño de software con el desarrollo del código que lo materialice. 149 Conclusiones 6.2 Limitaciones Algunas de las limitaciones encontradas son las siguientes: Si bien la interfaz es sencilla e intuitiva el usuario debe tener algún conocimiento previo del funcionamiento de la metodología Grafcet, ya que la herramienta carece de un sistema de ayuda. El ámbito de condiciones lógicas en la definición de transiciones está acotada a funciones básicas de operaciones con bits impidiendo realizar operaciones de carga, transferencia de variables analógicas (Bytes, palabras), así como también operaciones de conteo y temporización. Si bien la herramienta brinda la posibilidad de editar las condiciones lógicas de las transiciones en modo gráfico, del tipo compuertas lógicas y posterior conversión a listas de sentencias, no permite la reciprocidad, es decir obtener en modo gráfico las condiciones en formato de instrucciones. La herramienta brinda la posibilidad de generación de código de PLC, pero en este caso está limitado a una única línea de autómatas programables con su correspondiente lenguaje y manejo de variables (concretamente S7-300 de Siemens). En cuanto al código de programa generado, la herramienta permite la salida a dispositivos de impresión pero no permite su descarga directa al dispositivo real que controla el automatismo, es decir la propia CPU del autómata. La herramienta no permite la importación de diagramas confeccionados en otros sistemas posibles que no sean de formato propio de la herramienta. 150 Conclusiones 6.3 Trabajos futuros Luego de haber presentado las conclusiones obtenidas a partir de los experimentos realizados en este trabajo, se presentan los trabajos futuros que se podrían realizar continuando con la misma línea de investigación. Partiendo de la premisa de que por la estructura empleada en este trabajo, puede ser extendido en numerosos aspectos, y conociendo las limitaciones resultantes se presentarán los tópicos principales sobre los cuales se puede trabajar: Ampliar el ámbito de condiciones lógicas en la definición de transiciones a todo el universo de operaciones soportadas por un autómata programable industrial. Ampliar el universo de lenguajes de programación basados en PLCs de manera que el código generado pueda ser compatible con un mayor número de controladores existentes en el mercado comercial. Esto brindaría la transparencia de un proyecto creado, independizándolo del dispositivo físico que se fuera a utilizar, inclusive reutilizar el proyecto en caso que se produzca un cambio en el hardware del Automatismo. Inclusión de los drivers y protocolos de comunicación PC<->PLC de manera que permita que el código de programa generado, sea descargado directamente en el dispositivo de control. Como extensión del ítem anterior, podría vincularse la visualización de ejecución del Grafcet en el modo simulación, con las variables reales del Autómata de manera que la visualización del estado del sistema concuerde con la realidad del proceso. Integrar un sistema de Supervisión, Control y Adquisición de Datos (SCADA), (Rodríguez Penin, 2015) de manera de vincular, en el modo simulación, la visualización del estado del sistema con el estado de proceso a nivel dinamización gráfica de la instalación, tales los casos de ejemplo que se pueden observar en la Figura 6.1 (estado en Etapa 2) y en la Figura 6.2 (estado en Etapa 3), en los que además de dinamizar la posición actual respecto del estado del diagrama, también pueden señalizarse el estado de los componentes del proceso (coloreo de sensores de posición y actuadores). 151 Conclusiones Figura 6.1: Dinamización del Sistema en Etapa 2: Ascenso veloz en Mesa Figura 6.2: Dinamización del Sistema en Etapa 3: Traslación Veloz a Boxes 152 Bibliografía Capítulo 7 - Bibliografía 1. AG, S. (2004). S7-Graph V5.3 para S7-300/400 Programación de Controles Secuenciales. Nümberg: Siemens Energy & Automation . 2. Boix Aragonés, O., Sudía Andreu, A., & Bergas Jané, J. (1997). Automatización industrial con Grafcet. Ediciones UPC. 3. Bolton, W. (1996). Instrumentación y control industrial. Paraninfo. 4. Bossy, J.-C., Brard, P., Faugère, P., & Merlaud, C. (1995). Grafcet. Práctica y aplicaciones. Universitat Politécnica de Catalunya. 5. Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., & Stal, M. (1996). Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. Inglaterra: John Wiley & Sons. 6. Clements-Jewery, K., & Jeffcoat, W. (1996). The PLC Workbook. EEUU: Prentice Hall. 7. Dahl, O.-J., Myhrhaug, B., & Nygaard, K. (1967). Simula 67 common base language. Noruega: Norwegian Computer Center. 8. Eckel, B. (1998). Thinking in Java. Prentice-Hall. 9. Gálvez Rojas, S., Alcaide García, M., & Mora Mata, M. (2007). Como tratar con JAVA Figuras, Imágenes y Texto en 2D. Edición Electrónica. 10. Gamma, E. (1995). Design patterns: elements of reusable object-oriented software. Pearson Education India. 11. García Higuera, A. (2005). El control automático en la industria. Universidad de Castilla La Mancha. 12. Garzón Vásquez, J. A. (2013). Lógica Cableada. 13. Gilbert, D. (2002). The JFreeChart Class Library. Simba Management Limited. 14. Glodberg, A., & Robson, D. (1983). Smalltalk-80: the language and its implementation. Addison-Wesley Longman Publishing Co., Inc. 15. Gómez Crespo, D. (1999). Sistemas Secuenciales Grafcet. Bilbao: Dpto. Ingeniería de Sistemas y Automática Escuela Superior Técnica de Bilbao. 16. Hill, F. J., & Peterson, G. R. (1979). Teoría de conmutación y diseño lógico. México: Limusa. 17. https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html. (s.f.). 18. Karl-Heinz, J., & Tiegelkamp, M. (2001). IEC 61131-3: Programming Industrial Automation Systems. Alemania: Springer Verlag. 19. Knudsen, J. (1999). JAVA 2D Graphics. O´Reilly. 153 Bibliografía 20. Korson, T., & McGregor, J. (1990). . Understanding Object Oriented: a Unifying Paradigm. Communications of the ACM. 33(9). 21. Marcos, M., Estévez, E., Gangoiti, U., & Portillo, J. (2001). Generador de Código IEC 61131 basado en tecnologías XML. 22. Meyer, B. (1988). Object-oriented software construction, volume 2. New York: Prentice hall . 23. Omron Industrial Automation. (s.f.). http://www.ia.omron.com/products/family/16/. 24. Oracle. (1995). The Java Tutorial. Obtenido de http://java.sun.com/ 25. Peñin, L. F., Carrera, J., & Barrientos, A. (1999). Automatización de la fabricación: autómatas programables, actuadores, transductores. Madrid: Universidad Politécnica de Madrid. 26. Rodríguez Penin, A. (2015). Sistema Scada 2da. Ed. Marcambo. 27. Sánchez Llopis, R., Romero Pérez, J. A., & Ariño Latorre, C. V. (2010). Automatización Industrial. Universitat Jaume I. 28. Schneider Electric. (s.f.). http://www.schneider-electric.com/en/product-range/1468modicon-m340/. 29. Siemens. (2001). Manual S7-300 Instalación y configuración, lista de operaciones. Nümberg: Siemens Enegy & Automation. 30. Siemens, A. (1998). El Grafcet. Práctica y aplicaciones. Siemens Energy & Automation. 31. Siemens, A. (2004). S7-Graph V5.3 para S7-300/400 Programación de Controles Secuenciales. Nürberg: Siemens Energy & Automation. 32. Siemens, A. (2011). Manual S7-300. Instalación y Configuración, datos de CPU, datos de módulos, lista de operaciones. Nürberg: Siemens Electric & Automation. 33. Siemens.com. (s.f.). http://www.siemens.com.ar/sites/internet/legacy/siepe/pe/automatizacion.htm. 34. Wirfs-Brock, R., & McKean, A. (2003). Object Design: Roles, Responsibilities, and Collaborations. . Addison-Wesley. 154 Apéndice A Apéndice A Herramienta en Acción 155 Apéndice A Índice A.1 Editor Grafcet ............................................................................................................ 157 A.1.1 Abrir el Editor ........................................................................................................... 157 A.1.2 Descripción de componentes ................................................................................... 158 A.1.2.1 El menú .............................................................................................................. 158 A.1.2.2 Botones .............................................................................................................. 159 A.1.2.3 Etiquetas ............................................................................................................ 160 A.1.3 Ejemplos ................................................................................................................... 161 A.1.3.1 Transición entre dos etapas .............................................................................. 161 A.1.3.2 Divergencia en Y ................................................................................................ 162 A.1.3.3 Convergencia en Y ............................................................................................. 163 A.1.3.4 Crear una Acción................................................................................................ 164 156 Apéndice A A.1 Editor Grafcet El editor Grafcet, es una herramienta que nos permite crear un diagrama de control grafcet y generar el código asociado directamente. En las siguientes secciones brindaremos un panorama general de la herramienta, así como también una breve descripción e ilustración de los componentes del sistema. A.1.1 Abrir el Editor Para abrir el editor hay que abrir la aplicación GRAFCET, a continuación nos aparecerá la pantalla mostrada en la Figura A- 1: Figura A- 1: Vista de la Interfaz de edición de Grafcet Se trata de la pantalla principal del editor. A continuación describiremos sus componentes. 157 Apéndice A A.1.2 Descripción de componentes A continuación describiremos los elementos que componen la interfaz de la herramienta así como también su correspondiente funcionalidad. A.1.2.1 El menú En él podremos realizar las siguientes acciones: Guardar: Permite guardar el grafcet actual en el directorio seleccionado. Leer: Permite recuperar un grafcet guardado con anterioridad. Nuevo: Elimina el grafcet actual y comienza de cero un nuevo dibujo. Imprimir: Envía a dispositivo de Impresión el código de programa generado Salir: Nos saca del Editor Grafcet. 158 Apéndice A A.1.2.2 Botones Los botones sólo son aplicables a la ventana de diseño. Sirven para crear el diagrama grafcet. Los describiremos uno a uno: Este botón sirve para seleccionar la posición puntero. De este modo, podremos mover las figuras del diagrama. Posición etapa inicial. En esta posición al pulsar dentro del panel de dibujo se creará una etapa inicial en el lugar pulsado. Si ya existiese uno, ignoraría el evento. Posición etapa. En esta posición, al pulsar dentro del panel de dibujo se crea una etapa en la posición pulsada. Si ya existiese un elemento en esa posición ignoraría el evento. Posición línea. En esta posición, se puede crear una relación entre dos etapas, o línea especial. Existen dos modos. Punto a punto y de forma automática. Línea simultánea. En esta posición, al pulsar en el panel de dibujo se crea una línea de este tipo en el panel. Línea conjunta. En esta posición, al pulsar en el panel de dibujo se crea una línea de este tipo en el panel. Rejilla. Pulsando en este botón se activa o se oculta la cuadrícula en el panel de dibujo. Autoajuste. Pulsando en este botón, se activa o desactiva el ajuste automático a la cuadrícula del panel de dibujo. 159 Apéndice A A.1.2.3 Etiquetas A continuación describiremos para que sirven cada una de las etiquetas de la herramienta. Dibujo Sirve para que aparezca la ventana de dibujo del diagrama. En la parte inferior del panel aparece la siguiente etiqueta. Sirve para seleccionar el panel grafcet que queremos ver. Pulsando en la etiqueta más, creamos un grafcet nuevo. Código Sirve para visualizar el código que se está generando a partir del grafcet creado (ver Figura A- 2) Figura A- 2: Vista de pantalla de generación de código 160 Apéndice A Asignar bits Esta opción está directamente relacionada con el lenguaje de PLC en que será generado el código, por lo que no se cree conveniente para este propósito detenernos en mayores explicaciones. Aparece una tabla como la de la Figura A- 3. Figura A- 3: Vista de pantalla de asignación de bits Tabla de Símbolos Sirve para ver los símbolos que se crean automáticamente, modificar el valor de los mismos, o crear nuestros propios símbolos. Al pulsar aparece la tabla de la Figura A- 4 Figura A- 4: Vista de pantalla de tabla de símbolos A.1.3 Ejemplos A continuación emplearemos algunos ejemplos básicos para facilitar la comprensión de las distintas funcionalidades de la herramienta en el desarrollo de un proyecto, y familiarizar al lector en la modalidad de trabajo de la misma. A.1.3.1 Transición entre dos etapas El primer paso una vez abierto el editor es crear dos etapas. Hay que tener en cuenta que en todo grafcet es obligatorio la existencia de una etapa inicial. En este caso vamos a crear una transición entre una etapa inicial y una etapa normal. Paso 1: Pulsamos el botón de etapa inicial Paso 2: Pulsamos en la ventana de edición donde queremos situar la etapa 161 Apéndice A Paso 3: Pulsamos el botón de etapa Paso 4: Pulsamos en la ventana de edición donde queremos situar la etapa Paso 5: Pulsamos en el botón línea Paso 6: Pulsamos en la etapa inicial y a continuación en la etapa final. En este caso, por ser la etapa origen la inicial, aparece el comentario directamente Paso 7: Hacer doble clic en la transición y seleccionar la condición de paso de una etapa a otra, y el texto a mostrar, en la pantalla de la Figura A- 5. Figura A- 5: Vista de pantalla de edición de condiciones A.1.3.2 Divergencia en Y Paso 1: Creamos una etapa origen y dos etapas destino. Pulsamos en el botón etapa, y tres veces en la pantalla de panel de dibujo 162 Apéndice A Paso 2: Pulsamos en el botón Divergencia en Y. Ahora hacemos clic en el punto debajo de la etapa 2 entre las etapas 3 y 4 Paso 3: Pulsamos en el botón línea. A la hora de hacer las líneas de transición, la línea divergente se comporta como una etapa. Hacemos clic en la etapa 2 y luego en la línea divergente. A continuación hacemos lo mismo con el resto de las etapas. Paso 4: Haciendo doble clic en la transición podemos definir las condiciones de paso. Cuando éstas se cumplan y la etapa 2 esté activada, se activarán las etapas 3 y 4. A.1.3.3 Convergencia en Y Paso 1: Creamos dos etapas origen y una etapa destino. Pulsamos en el botón etapa, y tres veces en la pantalla de panel de dibujo Paso 2: Pulsamos en el botón Convergencia en Y. Ahora hacemos clic en el punto encima de la etapa 5 entre las etapas 3 y 4 163 Apéndice A Paso 3: Pulsamos en el botón línea. A la hora de hacer las líneas de transición, la línea convergente se comporta como una etapa. Hacemos clic en la etapa 3 y luego en la línea convergente. A continuación hacemos lo mismo con el resto de las etapas. Paso 4: Haciendo doble clic en la transición podemos poder las condiciones de paso. Cuando éstas se cumplan y las etapas 3 y 4 estén activadas, se activará la etapa 5. A.1.3.4 Crear una Acción Si queremos crear una etapa realice una acción o acciones seguiremos los siguientes pasos. Paso 1: Partimos de una etapa Paso 2: Pulsamos con el botón derecho encima de la etapa Paso 3: Seleccionamos la opción acciones y nos aparecerá el panel de la Figura A- 6. 164 Apéndice A Figura A- 6: Vista de pantalla de edición de acciones Paso 4: Seleccionamos la acción o acciones que queremos realizar. Para añadir una línea, seleccionamos el modificador, luego indicamos la dirección de memoria o el símbolo y pulsamos añadir. Si lo que queremos es que en una etapa se active una variable utilizamos el símbolo =. El Editor, internamente se encarga de asignar los Resets y Sets correspondientes, de modo que sólo cuando indiquemos una acción = en una etapa, se active el símbolo asociado. De este modo, nos aseguramos que no falta ningún Reset que deje una variable activada y fuera de control. 165