Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica IE – 0502 Proyecto Eléctrico Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Por: Alexánder Barrantes Muñoz Diciembre del 2004 IE-0502 ii Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Por: Alexánder Barrantes Muñoz Sometido a la Escuela de Ingeniería Eléctrica de la Facultad de Ingeniería de la Universidad de Costa Rica como requisito parcial para optar por el grado de: BACHILLER EN INGENIERÍA ELÉCTRICA Aprobado por el Tribunal: ___________________ M.Sc. Geovanny Delgado Cascante Profesor Guía ___________________ Ing. Roberto Rodríguez Rodríguez Profesor Lector __________________ Dr. Jorge Arturo Romero Chacón Profesor Lector Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. iii DEDICATORIA A mi mamá por estar siempre incondicional, cuando la ocupé, por brindarme la oportunidad de estudiar y porque su muerte no culminó con su deseo, el hacerme una persona de bien. A mis hermanas por ayudarme en mi carrera, por ser mi admiración y modelo a seguir. A Fátima por estar siempre a mi lado, y por dar de sí misma algo que no tiene valor, amor. A mis amigos por hacerme sentir especial. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. iv RECONOCIMIENTOS Carlos Manuel Calvo Muñoz Por su constante ayuda en este proyecto A mis Profesores Por compartir con tanto gusto su experiencia y conocimiento Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. v ÍNDICE GENERAL ÍNDICE DE FIGURAS......................................................................................... vii ÍNDICE DE TABLAS.......................................................................................... viii NOMENCLATURA............................................................................................... ix LSTA DE MARCAS REGISTRADAS ................................................................ xi RESUMEN............................................................................................................. xii CAPÍTULO 1: Introducción .................................................................................. 1 1.1 Objetivo General..............................................................................................................2 Objetivos específicos .............................................................................................. 2 Metodología .....................................................................................................................2 1.1.1 1.2 CAPÍTULO 2: Generalidades de una Aplicación HMI ...................................... 5 2.1 Generalidades de un PLC. .........................................................................................................5 2.1.1 Concepto ........................................................................................................................ 5 2.1.2 Funciones ....................................................................................................................... 6 Las funciones básicas que posee un PLC común son:............................................................ 6 2.1.3 Componentes ................................................................................................................ 7 2.1.4 Aplicaciones.................................................................................................................. 9 2.1.5 Fortalezas y Debilidades............................................................................................... 9 2.2 Generalidades de los Sistemas SCADA. .................................................................................10 2.2.1 Concepto ...................................................................................................................... 10 2.2.2 Funciones de un Sistema SCADA ............................................................................... 12 2.2.3 Elementos necesarios para un sistema SCADA .......................................................... 12 2.3 Protocolos de Comunicación ...................................................................................................13 2.3.1 Concepto ...................................................................................................................... 13 2.3.2 Protocolo DDE............................................................................................................. 14 2.4 Enlaces OLE para Windows ....................................................................................................17 2.5 Generalidades de un Servidor OPC .........................................................................................19 2.6 Compilador Gráfico Delphi. ....................................................................................................23 CAPÍTULO 3: Desarrollo de una Interfaz HMI ............................................... 25 3.1 Breve reseña de la compañía Unitronics..................................................................................25 3.1.1 Misión .......................................................................................................................... 26 3.1.2 Historia de sus productos............................................................................................. 26 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. vi 3.1.3 Breve Organigrama de la compañía............................................................................. 27 3.1.4 Puntos Claves............................................................................................................... 27 3.1.5 Productos ..................................................................................................................... 27 3.2 La familia de productos de Unitronics.....................................................................................28 3.2.1 Características generales de los productos................................................................... 29 3.2.1.1 El modo de información ........................................................................................... 30 3.2.1.2 La estructura de memoria de la serie M90................................................................ 30 3.2.1.3 Variables ................................................................................................................... 31 3.2.1.4 Comunicación ........................................................................................................... 32 Puerto Serial.......................................................................................................................... 32 3.3 Características Generales del M90 OPLC™............................................................................33 3.3.1 Tipos de datos del sistema ........................................................................................... 35 3.3.2 Especificaciones Técnicas ........................................................................................... 37 3.3.3 Acceso de datos ........................................................................................................... 39 3.3.3.1 Nombre de los Ítems ................................................................................................. 40 3.4 Desarrollo del programa SCADA para la interfaz HMI ..........................................................46 CAPÍTULO 4: Conclusiones y Recomendaciones ............................................. 50 4.1 Conclusiones............................................................................................................................50 4.2 Recomendaciones ....................................................................................................................51 BIBLIOGRAFÍA................................................................................................... 52 ANEXOS ................................................................................................................ 53 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. vii ÍNDICE DE FIGURAS Figura N°2.1 Funcionamiento e Interfaces de OPC ................................................................. 21 Figura N°2.2 Modelo de Objetos del Servidor de Automatización OPC ................................. 21 Figura N°3.1 Organigrama de la Co. Unitronics ...................................................................... 27 Figura N°3.2 Familia de PLCs de Unitronics ........................................................................... 29 Figura N°3.3 Conectando la PC con un Controlador................................................................ 34 Figura N°3.4 PLC M90............................................................................................................. 39 Figura N°3.5 Pantalla de Conexión de UniScada ..................................................................... 49 Figura N°3.6 Pantalla de Conexión de UniHMI....................................................................... 49 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. viii ÍNDICE DE TABLAS Tabla 2.1 Descripción de la colección de objetos de la especificación OPC ........................... 22 Tabla 3.1 Descripción de registros internos del M90 ............................................................... 33 Tabla 3.2 Distribución de pines del puerto RS232 ................................................................... 33 Tabla 3.3 Descripción de conexión para el puerto CANbus.................................................... 34 Tabla 3.4 Categorías de información que se pueden alcanzar en el modo de Información...... 35 Tabla 3.5 La función de los bits del sistema............................................................................. 36 Tabla 3.6 Funciones de Bits del Sistema del teclado................................................................ 36 Tabla 3.7 Funciones de los Enteros del Sistema....................................................................... 37 Tabla 3.10 Descripción de los tipos de ítems del M90 ............................................................. 41 Diciembre del 2004 IE-0502 ix Interfaz Humano-Máquina para la familia de PLC’s Unitronics. NOMENCLATURA ActiveX Tecnología de Acceso a Datos ADO Objetos de Base de Datos ActiveX Baud rate Tasa de transmisión de datos en bps BDE Motor de Base de Datos de Borland CCFL Lámpara fluorescente COM Modelo Componente del Objeto CORBA Arquitectura Común del Corredor de la Petición del Objeto CPU Unidad Central de Proceso DCOM Distribución COM DDE Protocolo de Intercambio de datos dinámico DLL Librería de Enlace Dinámico DSR Entrada Datos preparados, listo para iniciar diálogo DTR Patilla de terminal de listo datos del puerto RS232 HMI Interfaz Humano-Máquina ID Identificación NetDDE Red de DDE Ladder Programa de configuración de PLCs en lenguaje escalera LCD Pantalla de cristal líquido OCX Librería de programación OLE Enlace e inclusión de objetos OPC OLE para Control de Procesos OPLC Serie de PLCs Unitronics PC Computadora Personal Pcom Protocolo propietario de Unitronics PID Proporcional Integral Derivativo PLC Controlador Lógico Programable PWM Modulación de Anchura de Pulso Diciembre del 2004 IE-0502 x Interfaz Humano-Máquina para la familia de PLC’s Unitronics. QVGA Clase de tecnología RAD Desarrollo Rápido de Aplicaciones RAM Memoria de acceso lectura RxD Patilla de recepción de datos del puerto RS232 RS232 Puerto Serial de la PC RJ-11 Cable para conexión del módem a la base de la red telefónica SCADA Supervisor de Control y Adquisición de Datos STL Librería estándar de plantillas Tag Conjunto de caracteres que se añade a un elemento de los datos para identificarlo TxD Patilla de transmisión de datos del puerto RS232 UCR Universidad de Costa Rica VCA Voltaje de Corriente Alterna VCD Voltaje de Corriente Directa VisiLogic Programa para PLC’s Unitronics WebPLC Serie de PLCs Unitronics basados en comunicación por web I/O Entradas/Salidas Diciembre del 2004 IE-0502 xi Interfaz Humano-Máquina para la familia de PLC’s Unitronics. LSTA DE MARCAS REGISTRADAS Delphi Enterprise 5.0: Borland Pascal Unitronics: M90, OPC Server Microsoft: Windows, Office(Word, Excel, Access), Internet Explorer, NetDDE, DDE, OLE, DCOM, ADO, BDE, InterBase, InstallShield OPC Foundation: Intellution, Opto-22, Fisher-Rosemount, Rockwell Software y Intuitiv Software Siemens C++, Visual Basic, VBScrip, JavaScript DeviceNet Diciembre del 2004 IE-0502 xii Interfaz Humano-Máquina para la familia de PLC’s Unitronics. RESUMEN El objetivo principal es una aplicación HMI, Interfaz Humano Máquina, para el modelo de PLCs de Unitronics M90, por medio de la implementación de un programa SCADA en la plataforma de programación Delphi Enterprise 5.0, con lenguaje Borland Pascal. Se empezó por estudiar dicha plataforma, que utiliza programación orientada a objetos. Después se estudió la estructura interna del PLC M90, se estableció comunicación con el PLC en pequeñas pruebas de manipulación de registros internos en Excel ® por medio del protocolo de comunicación DDE. Seguidamente se trasladaron estas pruebas a desarrollos con Delphi y poco a poco se fueron solventando problemas que aparecían en el transcurso de la implementación. Las fuentes de información fueron obtenidas en su gran parte de Internet. Se utilizaron variables tales como el servidor OPC de Unitronics, los enlaces OLE de Windows y el protocolo DDE, entre otros. Se han podido experimentar las ventajas de utilizar herramientas diseñadas especialmente para la creación de sistemas SCADA. Los resultados fueron: Se Desarrolló una Interfaz Humano-Máquina (HMI) para la familia de PLC’s Unitronics con la creación de las aplicaciones UniScada y Uni_HMI, Se practicó en el desarrollo de aplicaciones en Borland Delphi, Se estudió la arquitectura de los PLC’s Unitronics, Se Desarrolló una aplicación de comunicación entre Delphi y el OPC Server de Unitronics, Se Realizó una aplicación de lectura de registros del PLC, Se Desarrolló la aplicación HMI de despliegue de registros, pues se obtuvo un prototipo de lo que hoy en día es materia de mercado, asimismo, se eliminó el desconocimiento en dicho tema, haciendo más familiar futuras experiencias con programas SCADA comerciales en el campo laboral. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 1 CAPÍTULO 1: Introducción Lo que se pretendió en este trabajo fue la creación de un programa básico de monitoreo estilo SCADA, como es mencionado comercialmente, implementándolo en una plataforma de programación gráfica, Delphi 5.0, en donde se estableció una comunicación entre un PLC y la PC, de manera que el usuario pueda tener una cómoda interacción con el dispositivo. Se seleccionó el controlador lógico programable de la familia de Unitronics, enfatizando en el modelo M90, a pesar de que toda la línea de PLC’s de dicha familia (Unitronics) posee características extremadamente similares, en donde es posible que sus diferencias significativas no sean más que sus capacidades de memoria, pero su estructura interna es muy parecida y para efectos de este proyecto la comunicación y manipulación de datos son idénticas, pues hasta los registros internos poseen los mismos nombres. Este dispositivo (M90) fue seleccionado por su simple estructura interna y su fácil manipulación, como más adelante se mencionará. La plataforma de programación Borland Pascal de Delphi fue seleccionada por sus características gráficas y de compatibilidad con los sistemas OPC. El fin que posee este proyecto fue desarrollar una interfaz HMI, para adentrar al estudiante en aplicaciones industriales muy usadas hoy en día, con el objetivo de actualizar al estudiante con materia de mercado en el área de control automático. Un objetivo futurista de este trabajo pretende utilizar las bases creadas para la realización de un software competitivo en el mercado industrial, de manera que se optimice y se produzcan nuevas implementaciones con mayor detalle y versatilidad, dejando un software abierto. Este legado pretende motivar al estudiante en la creación de este tipo de softwares. Diciembre del 2004 IE-0502 1.1 2 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Objetivo General Desarrollar una Interfaz Humano-Máquina (HMI) para la familia de PLC’s Unitronics. M90. 1.1.1 Objetivos específicos Entrenamiento en el desarrollo de aplicaciones en Borland Delphi. Estudiar la arquitectura de los PLC’s Unitronics M90. Desarrollar una aplicación de comunicación entre Delphi y el OPC Server de Unitronics. Realizar una aplicación de lectura de registros del PLC. Desarrollar la aplicación HMI de despliegue de registros. 1.2 Metodología La metodología utilizada para la realización de este proyecto, comenzó con una distribución del tiempo secuencial para cada objetivo específico antes mencionado. El cronograma de las actividades realizadas inició con el establecimiento de rangos de tiempo determinados por la dificultad del objetivo. En primer lugar se dependía y a su vez se limitaba a ser desarrollado en un lapso de cuatro meses, dictado por la división de los periodos lectivos establecidos por la UCR. Como parte del procedimiento se tuvieron que realizar constantes y aleatorias reuniones profesor guía-estudiante, según la necesidad de respaldo e información que el estudiante necesitara en el proceso tanto de elaboración como en el de investigación del trabajo. En dichas reuniones se definieron en primer lugar el tema a realizar, el procedimiento a seguir, las fuentes de información necesarias y consultoría. Conforme pasó el tiempo se tuvo que acudir a asesorías con personas expertas o familiarizadas con los temas, en donde si no precisamente fue función total del profesor guía, el mismo brindaba las dichas fuentes asesoras. El estudiante por su parte también acudió a asesores según su comodidad, debe entenderse que los asesores encontrados no poseían en su totalidad conocimiento de aplicaciones similares a la realizada y que su conocimiento comprendía desde control- Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 3 automático solamente hasta simple programación, por lo que la base teórica obtenida fue compuesta por información de fuentes diversas. El primer apartado del cronograma correspondió al a) Entrenamiento en el desarrollo de aplicaciones en Borland Delphi. Nótese que la Escuela de Ingeniería Eléctrica carece de cursos obligatorios de introducción a la programación orientada a objetos en su plan de estudios, por lo que se debió familiarizar con dicho tema, y se debe recalcar que esta es la base de este proyecto, por lo que se destinó, al ser este uno de los objetivos de mayor dificultad, un periodo de un mes y medio. El resto del tiempo fue destinado para los demás objetivos. Una vez emprendido el trayecto con los conocimientos básicos de la plataforma Delphi y de programación orientada a objetos, se procedió al siguiente paso b) Estudiar la arquitectura de los PLC’s Unitronics M90. Es necesario citar que la familia de PLC’s Unitronics poseen características muy parecidas, me refiero al ámbito de sus registros internos, que además son relativamente simples y de fácil comprensión; por lo que el tiempo destinado a esta etapa no fue excesivo; por el contrario, este puede que fuese el más fácil de los objetivos, como se refiere en el capítulo 3, basta más que leer ese capítulo del informe para darse por enterado y comprendido todo lo referente a este tipo de PLC’s. Se debe recalcar que el mayor asesor sobre este tema fue el profesor guía, pues además de que posee vasta experiencia en el área de automatización, es un experto de la familia de PLC’s Unitronics. El tercer apartado fue: c) Desarrollar una aplicación de comunicación entre Delphi y el OPC Server de Unitronics, d) Realizar una aplicación de lectura de registros del PLC e) Desarrollar la aplicación HMI de despliegue de registros. Estas aplicaciones (puntos c, d y e) se realizaron por primera vez en la hoja de cálculo Excel ®, por su gran comodidad, facilidad y documentación, pues en la ayuda del driver OPC Server existe información de comunicación Excel ®-Servidor OPC; se estableció comunicación entre el PLC y la PC, en donde se probaron los registros internos, de manera que se comprobó las diferentes utilidades de cada registro, conociéndolas más profundamente. Este paso fue muy fácil gracias a los protocolos de comunicación tipo Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 4 DDE que posee Windows ®, pues con este protocolo se pudo comunicar Excel ® con el OPC Server. Se prosiguió con una pequeña implementación de comunicación en la plataforma Delphi. Este objetivo puede que fuese el más difícil de todos, y el que tomó mayor tiempo, pues fue imposible importar el DLL del OPC Server al compilador Delphi 5.0, problema que se atribuye a la incompatibilidad de este OPC Server (de Unitronics Co) con la versión del Delphi Enterprise (5.0). Todavía se desconoce si de verdad esta fue la razón o simple desconocimiento. Al no tener mucho tiempo para determinar el motivo, se decidió tomar una medida paralela y alterna, la cual correspondió a la creación de una clase Excel ® (Excel ® Application), que se puede hacer en Delphi Enterprise 5.0, que permite emular partes de la hoja de Excel ®, tales como una celda. El último objetivo fue f) Completar la aplicación HMI de forma gráfica. Este objetivo necesitó mucha creatividad e información, pues es aquí donde se empezó a desarrollar la interfaz gráfica. Se trabajó con archivos, entre muchos elementos de programación, lo cual implicó gran cantidad de consultas acerca de información sobre la implementación de determinados elementos, realizadas en Internet. Diciembre del 2004 IE-0502 5 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. CAPÍTULO 2: Generalidades de una Aplicación HMI Para iniciar en el desarrollo de este proyecto, se especifican algunas conceptos de relevancia con respecto a los PLC’s, en términos generales, y sobre nuestra aplicación se especifican su definición, funciones, estructura física Hardware o componentes, aplicaciones, debilidades y fortalezas. Seguido a esto procede definir conceptos como definiciones de un sistema SCADA y sus funciones, protocolos de comunicación, protocolo DDE, OLE para Windows y Servidor OPC , además la utilidad del compilador Delphi en el proyecto, entre otras cosas de conocimiento imprescindible. Esta es la teoría que se debe tener muy clara antes de empezar a desarrollar una aplicación HMI. Se espera que cualquier persona que lea el informe puede iniciarse en el tema, conociendo los principios básicos para desarrollar una aplicación HMI. 2.1 Generalidades de un PLC. 2.1.1 Concepto Las siglas PLC significan Programmable Logic Controller, lo que en español sería Controlador Lógico Programable. Resulta ser simplemente a grandes rasgos un equipo que se puede programar en un lenguaje simbólico, y está diseñado para controlar procesos industriales e implementar máquinas. Cuando se refiere a programar en un lenguaje no informático, se habla de que estos aparatos se programan en un lenguaje denominado “Escalera”, un tipo de programación muy simple, fácil y amigable de manera que no hace falta escudriñar en profundidad las notaciones que poseen generalmente los compiladores comerciales, donde es necesario estar familiarizado con algún lenguaje para entenderlo. Este lenguaje se basa en una notación gráfica de bloques (en algunos casos, tales son los PLC’s marca SIEMENS), o con figuras simples como esquemáticos de contactores, bobinas y otros. Al no estar este tema en nuestro marco de análisis, pues la aplicación está directamente relacionada con la manipulación de los registros internos del PLC, se retoma este tema en el Capítulo 3. Un PLC recibe por sus entradas o captadores, información que será procesada por un programa lógico interno determinado, que ejecutará acciones específicas sobre sus Diciembre del 2004 IE-0502 6 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. accionadores en sus salidas. Por lo que los PLC son funcionales en sistemas que poseen procesos de monitorear, control, entre otros. Es necesario utilizar PLC en el caso que se presenten situaciones tales como1: • Espacio reducido • Procesos de producción periódicamente cambiante • Procesos secuénciales • Maquinaria de procesos variables • Instalaciones de procesos complejos y amplios • Chequeo de programación centralizada de las partes del proceso. 2.1.2 Funciones Las funciones básicas que posee un PLC común son2: Detección: Lectura de la señal de las entradas distribuidos por el sistema de fabricación. Mando: Elaborar y enviar las acciones al sistema mediante las salidas y preaccionadores. Diálogo hombre máquina: Mantener un diálogo con los operarios de producción, obedeciendo sus consignas e informando del estado del proceso. Programación: Para introducir, elaborar y cambiar el programa de aplicación del autómata. El diálogo de programación debe permitir modificar el programa incluso con el autómata controlando la máquina. Hoy en día los PLC’s poseen nuevas funciones tales como: Redes de comunicación: Permiten establecer comunicación con otras partes de control. Las redes industriales permiten la comunicación y el intercambio de datos entre autómatas en tiempo real. Sistemas de supervisión: También los autómatas permiten comunicarse con ordenadores provistos de programas de supervisión industrial. Esta comunicación se 1 Puntos tomados de http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm. 2 Funciones tomadas de: http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm. Diciembre del 2004 IE-0502 7 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. realiza por una red industrial o por medio de una conexión por el puerto serie del ordenador. Control de procesos continuos: Además de dedicarse al control de sistemas de eventos discretos los autómatas llevan integradas funciones que permiten el control de procesos continuos. Disponen de módulos de entrada y salida analógicas y la posibilidad de ejecutar reguladores PID que están programados en el autómata. Entradas- Salidas distribuidas: Los módulos de entrada salida pueden estar distribuidos por la instalación y se comunican con la unidad central del autómata mediante un cable de red. Buses de campo: Mediante un solo cable de comunicación se pueden conectar al bus de entradas y salidas, reemplazando al cableado tradicional. El autómata consulta cíclicamente el estado de las entradas y actualiza el estado de las salidas. 2.1.3 Componentes Entre los principales componentes de un PLC básico se encuentran los siguientes3: Gabinete Principal: Este elemento es sobre el que se "enchufan" o conectan el resto de los elementos. Puede alojar a un número finito de elementos dependiendo del fabricante y conectarse a otros gabinetes similares mediante un gabinete de expansión. Fuente de Alimentación: La tensión de entrada es normalmente de 110/220VCA de entrada y 24 VCD de salida que es con la que se alimenta a la CPU. CPU: Es el cerebro del PLC. Consta de uno o varios microprocesadores (según el fabricante) que se programan mediante un software propio. La mayoría de ellos ofrecen varias formas de programación (lenguaje de contactos, neumónico o instrucciones, de funciones, etc.). Normalmente trabajan con buses de 16 bits, aunque algunos modernos trabajan con buses de 32 bits. Hoy en día la potencia de cálculo de estos PLC's es grandísima, sobre todo si se trabaja con números reales o coma flotante, dando unas resoluciones más que deseables. Trabajando con programas digitales puede alcanzarse un ciclo de exploración de 10 ms. 3 Información tomada de: http://www.euskalnet.net/m.ubiria/ARTICULOS.htm#Articulos_2001_01 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 8 El programa alojado en la CPU va escrito en un lenguaje propio de la misma, se ejecuta en una secuencia programable y tiene un principio y un final. El tiempo que transcurre entre los dos se llama ciclo de exploración y hay un temporizador interno que vigila que este programa se ejecute de principio a fin, llamado perro guardián o watchdog. Si este temporizador finaliza y el programa no ha ejecutado la instrucción END, el PLC pasará a estado de STOP. Tarjetas entradas/salidas digitales: Se enchufan o conectan al gabinete y comunican con la CPU a través de la citada conexión. En el caso de las entradas digitales transmiten los estados 0 ó 1 del proceso a la CPU. En el caso de las salidas, la CPU determina el estado de las mismas tras la ejecución del programa y las activa o desactiva en consecuencia. Normalmente se utilizan tarjetas de entradas de 24 VCD y salidas de 24 VCD, aunque también las hay de 110 y 220 VCA, depende de las preferencias y normativas locales. Las hay de 8, 16 y 32 entradas o salidas o mezclas de ambas. Tarjetas entradas/salidas analógicas: Se enchufan o conectan al gabinete de igual manera que las anteriores, pero teniendo en cuenta que en algunos modelos de PLC’s han de estar situadas lo más cerca posible de la CPU (por problemas de caída de tensión). Estas tarjetas leen un valor analógico e internamente lo convierten en un valor digital para su procesamiento en la CPU. Esta conversión la realizan los convertidores analógico-digitales internos de las tarjetas que en algunos casos es uno para todos los canales de entrada o salida aunque actualmente se tiene uno por cada canal de entrada o salida. En este último caso el procesamiento de las señales analógicas es mucho más rápido que en el otro. Estas tarjetas son normalmente de 2, 4, 8 ó 16 entradas/salidas analógicas, llamándose a cada una de ellas canal. Los rangos de entrada están normalizados siendo lo más frecuente el rango de 4-20 mA (miliamperios) y 0-10 VCD, aunque también existen de 0-20 mA, 1-5V, 0-5V, etc. Tarjetas especiales: Se enchufan o conectan al gabinete y comunican con la CPU a través de la citada conexión. Se utilizan normalmente para control o monitorización de variables o movimientos críticos en el tiempo, ya que usualmente realizan esta labor independientemente de la CPU. Son algunas muestras las siguientes: • Tarjetas de posicionamiento de motores Diciembre del 2004 IE-0502 9 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. • Tarjetas de regulación. 2.1.4 Aplicaciones Entre las aplicaciones más comunes que puede tener un PLC podemos mencionar algunos ejemplos tales como4: • Maniobra de máquinas • Maquinaria industrial de plástico • Maquinaria de embalajes • Maniobra de instalaciones: • Instalación de aire acondicionado, calefacción, etc. Instalaciones de seguridad Señalización y control: Chequeo de programas Señalización del estado de procesos 2.1.5 Fortalezas y Debilidades Las principales virtudes del uso de un PLC son5: • Menor tiempo empleado en la elaboración de proyectos debido a que: No es necesario dibujar el esquema de contactos No es necesario simplificar las ecuaciones lógicas, ya que, por lo general la capacidad de almacenamiento del módulo de memoria es lo suficientemente grande. • La lista de materiales queda sensiblemente reducida, ya que un PLC es un equipo con muchos elementos integrados, y al elaborar el presupuesto correspondiente se elimina parte del problema que supone el contar con diferentes proveedores, distintos plazos de entrega. • Posibilidad de introducir modificaciones sin cambiar el cableado ni añadir aparatos. • Mínimo espacio de ocupación. • Menor costo de mano de obra de la instalación. 4 Ejemplos tomados de: http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm. 5 Información tomada de: Diciembre del 2004 IE-0502 • 10 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Economía de mantenimiento. Además de aumentar la fiabilidad del sistema, al eliminar contactos móviles, los mismos autómatas pueden indicar y detectar averías. • Posibilidad de gobernar varias máquinas con un mismo autómata. • Menor tiempo para la puesta en funcionamiento del proceso al quedar reducido el tiempo de cableado. • Si por alguna razón la máquina queda fuera de servicio, el autómata sigue siendo útil para otra máquina o sistema de producción. En contraposición a sus cualidades se puede citar algunas de sus inconvenientes: • Es necesario un programador, lo que obliga a adiestrar a uno de los técnicos en tal sentido. • El costo inicial es alto. 2.2 Generalidades de los Sistemas SCADA. 2.2.1 Concepto Las siglas HMI son provenientes del inglés Human Machine Interface, lo que en español es Interfaz Humano Máquina. Esto se refiere a un programa interfaz, que suele correr en un computador tipo PC, el cual es utilizado por el operario del proceso industrial para monitorear y/o controlar un sistema determinado. Este programa interfaz está en constante comunicación y transmisión de datos con el PLC. Antes de seguir refiriéndose al tema es importante definir otro concepto elemental, el de sistema SCADA. Cuando se hable de sistemas SCADA se refiere exclusivamente al software, en este apartado, pero es necesario aclarar que no es lo único que comprende el sistema como tal, pero se hace para efectos de interés. Las siglas SCADA provienen del inglés: Supervisory Control and Data Adquisition, lo que traducido al español y de forma más explícita, es un software supervisor que realiza la adquisición de datos desde PLC hacia una PC comúnmente, y el envío de datos en sentido contrario. El carácter de los datos a transferir en ambos sentidos es de control (pueden ser simple monitorear, instrucciones, etc.), generalmente de tipo industrial. El objetivo primordial es que por medio de un programa interactivo, gráfico y amigable http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 11 simule los procesos que se realizan en una planta (como control de calidad, supervisión, mantenimiento, etc.), de tal manera que realice un sensado en tiempo real y los despliegue en la pantalla del PC que utiliza el operador, o también, que envíe instrucciones que actúen directamente sobre los diferentes dispositivos, de tal manera que sea tan cómodo como el presionar una tecla del computador. De una manera más personal, agregando a la definición anterior, un programa SCADA es un software creador de aplicaciones programadas específicas de un proceso determinado. Un ejemplo es el de monitorear alarmas de un Banco. Los procesos que se realizan son: recoger la información de los censores en las entradas de un PLC y visualizar las entradas en la PC (el PLC ya posee una programación que realizará con una entrada específica programado a lenguaje escalera). El programa SCADA está basado en los iconos necesarios para comunicar el estado de las alarmas, por lo que no se necesita más que esta aplicación en el programa de monitoreo. Pero si es el vendedor de PLC’s y cada cliente necesita una aplicación distinta o actualizar la que ya tiene, ocupa tener un programa que cree los distintos softwares para cada aplicación, a este programa padre o creador le denomino SCADA. Continuando con las características generales de las HMI, cada uno tiene su software propio y la comunicación generalmente se da a través del puerto serial RS232. Una descripción general propuesta de cómo deben ser los módulos que componen un software SCADA es la siguiente6: • Configuración: permite al usuario definir el entorno de trabajo de su SCADA, adaptándolo a la aplicación particular que se desea desarrollar. • Interfaz gráfico del operador: proporciona al operador las funciones de control y supervisión de la planta. El proceso se representa mediante sinópticos gráficos almacenados en el ordenador de proceso y generados desde el editor incorporado en el SCADA o importados desde otra aplicación durante la configuración del paquete. 6 Tomado de http://personal.redestb.es/efigueras/ Diciembre del 2004 IE-0502 • 12 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Módulo de proceso: ejecuta las acciones de mando preprogramadas a partir de los valores actuales de variables leídas. • Gestión y archivo de datos: se encarga del almacenamiento y procesado ordenado de los datos, de forma que otra aplicación o dispositivo pueda tener acceso a ellos. • Comunicaciones: se encarga de la transferencia de información entre la planta y la arquitectura hardware que soporta el SCADA, y entre ésta y el resto de elementos informáticos de gestión. Algunos requisitos importantes sugeridos, sobre las cualidades que debe poseer un programa SCADA son los siguientes: • Deben ser sistemas de arquitectura abierta, capaces de crecer o adaptarse según las necesidades cambiantes de la empresa. • Deben comunicarse con total facilidad y de forma transparente al usuario con el equipo de planta y con el resto de la empresa (redes locales y de gestión). • Deben ser programas sencillos de instalar, sin excesivas exigencias de hardware, y fáciles de utilizar, con interfaces amigables con el usuario. 2.2.2 Funciones de un Sistema SCADA Las principales funciones de un sistema SCADA son las siguientes7: • Visualizar y parametrizar datos del proceso (lectura y/o escritura de variables) • Gestión de alarmas del proceso, con textos de ayuda al operario para la resolución de las mismas • Recopilación de alarmas sucedidas en el tiempo (histórico de alarmas) • Impresión de las citadas alarmas • 8 Ejecución de programas, que modifican la ley de control, o incluso anular o modificar las tareas asociadas al autómata, bajo ciertas condiciones. • Posibilidad de programación numérica, que permite realizar cálculos aritméticos de elevada resolución sobre la CPU del ordenador. 2.2.3 Elementos necesarios para un sistema SCADA 7 8 Información tomada de http://personal.redestb.es/efigueras/ Tomado de http://personal.redestb.es/efigueras/ Diciembre del 2004 IE-0502 13 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Como en el apartado 2.2.1 se refirió a un sistema SCADA solamente en su software, ahora se mencionará un poco de los elementos necesarios para el sistema SCADA como tal, los cuales son los siguientes: • Software SCADA • Tarjeta de comunicación PC-PLC • Driver de comunicación: programa que realiza la traducción entre el sistema SCADA-HMI y el PLC. • PC 2.3 Protocolos de Comunicación 2.3.1 Concepto Un protocolo de comunicación, son las reglas de comunicación que autorizan la transmisión de datos entre diferentes dispositivos que hablan sus propios idiomas. Cuando se requiere establecer comunicación entre dispositivos, se deben establecer algunos puntos elementales entre ellos tales como la sincronización y los procedimientos para el intercambio de datos o Protocolos. 9 Los protocolos son implementados vía procesos (son los programas que se ejecutan en un hardware). • Un proceso se ejecuta en un procesador virtual o lógico. • Un proceso es auto contenido • No se da cuenta (y no le interesa), que un procesador real comparta sus recursos entre varios procesos activos. Los procesos existen en: • Equipos de una red. • Sistema multiprocesador, para controlar interacción de procesos paralelos. • Aplicaciones en tiempo real para el control de dispositivos. La entrada a los procesos ocurre por puertas lógicas de software, por donde el proceso recibe mensajes desde procesos residentes en el mismo o en otro procesador. 9 Tomado de http://inf.udec.cl/~yfarran/web-redes/protocolos/redes03.htm Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 14 Un conjunto de datos privados definen el estado actual de un proceso y determinan la acción a tomar por el receptor de un mensaje. El resultado de la computación ejecutada por el proceso se envía por una puerta lógica de salida. ¿Cómo opera un protocolo como DDE? • Un proceso recibe un mensaje, lo procesa y envía una respuesta, sin que exista relación entre este evento y otro anterior o posterior. • El proceso origen, conocerá la dirección del proceso destino y la incluirá en el mensaje. • Esta dirección, identificará únicamente a un procesador, quien conocerá al proceso destino. • El originador cuando despacha un mensaje, entra a un estado de espera de la respuesta en una de sus puertas. • El proceso destino ejecuta la función especificada en el mensaje, construye la respuesta (con resultados y dirección del origen) y envía el mensaje respuesta por una puerta de salida, (quedando libre para aceptar otro mensaje). • La respuesta llega al originador, quien realiza un chequeo para asegurarse que viene del lugar correcto antes de aceptarla, luego, pasa al estado no espera respuesta en esa puerta de entrada. 2.3.2 Protocolo DDE El protocolo de comunicación DDE (siglas derivadas del inglés Dynamic Data Exchange), es un protocolo de intercambio de datos de Microsoft para aplicaciones Windows. 10 El intercambio de datos dinámico (DDE) permite enviar/recibir datos e instrucciones hacia/desde una a otra aplicación. Esto implementa una relación clienteservidor entre dos aplicaciones en ejecución al mismo tiempo. El uso del servidor proporciona los datos y acepta peticiones de cualquier otra aplicación interesada en sus datos. Las aplicaciones que solicitan se llaman clientes. Algunas aplicaciones tales como Microsoft Excel ® pueden simultáneamente ser cliente y servidor. NetDDE amplía la 10 Traducido del manual de ayuda del OPC Server de la compañía Unitronics Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 15 funcionalidad estándar del DDE de Windows ® para incluir comunicación sobre redes de área local a través de puertos seriales. Las extensiones de red están disponibles para permitir enlaces DDE entre las aplicaciones corriendo en diversas computadoras conectadas vía redes o módems. 11 El protocolo DDE está basado en el sistema de mensajería construido por Windows ®. Así, dos programas de aplicación bajo Windows ® realizan una "conversación DDE" enviándose mensajes entre ellos. Una conversación DDE se inicia con el programa que actúa como cliente. Este transfiere un mensaje a todos los programas que se están ejecutando en ese momento en Windows ®. Dicho mensaje indica una categoría general de datos que el cliente necesita. Un servidor DDE que posee dichos datos puede responder a este mensaje. En este instante comienza la conversación. Un único programa puede ser cliente para un programa, y servidor para otro, pero esto requiere dos conversaciones DDE distintas. Un servidor puede entregar datos a múltiples clientes y un cliente puede obtener datos desde múltiples servidores, pero esto requiere múltiples conversaciones DDE. Un programa implicado en una conversación DDE no necesita codificarse específicamente para trabajar con otro programa DDE. Generalmente el diseñador de un servidor DDE hace público cómo se identifican los datos. Como DDE utiliza el sistema de mensajería incluido en Windows, el programa se integra perfectamente en el entorno Windows. En DDE ambas aplicaciones deben estar ejecutándose y las dos deben dar a Windows una dirección a sus funciones de llamada antes de que la comunicación de DDE pueda comenzar. La función de llamada acepta cualquier mensaje de DDE que Windows ® envía a la aplicación. Un cliente de DDE comienza una conversación con otra aplicación (un servidor de DDE) enviando un mensaje de conexión. Después de establecer una conexión, el cliente puede enviar órdenes o datos al servidor y a cambio puede pedir el valor de datos que el servidor maneja. Cuando la comunicación DDE para una conversación es completada, el cliente envía un mensaje de cerrar la conversación al servidor. 11 Tomado de http://www.ing.ula.ve/~jesusc/labvid.htm Diciembre del 2004 IE-0502 16 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Un cliente estándar DDE soporta cinco operaciones básicas: • Open: Abrir enlace al servidor. • Execute: Enviar comandos para ser ejecutados por el servidor. • Peek (Request): Leer un elemento de datos desde el servidor. • Poke: Enviar un elemento de datos al servidor. • Close: Cerrar el enlace al servidor. Las diferentes aplicaciones clientes pueden tener nombres diferentes para estas funciones, sin embargo, funcionarán igual a como se describieron. Ahora, para poder habilitar el uso de esas cinco funciones, se tiene que conocer algunas cosas acerca de la aplicación Servidora. Por ejemplo, es muy difícil abrir un enlace a la aplicación servidora sin conocer el nombre de la aplicación. Para desarrollar una comunicación DDE o una conversación en términos de DDE, se tiene que ser capaz de identificar el tipo de dato que se desea. Esta operación se realiza con las tres cadenas de caracteres con información acerca de la aplicación Servidora: • Application name /service | Justamente el nombre de la aplicación: servicio • Data topic ! Define el elemento de interés en la aplicación: tema • Data item ! El actual elemento de intercambio: elemento Por tanto, se necesita el nombre de la aplicación o servicio (generalmente es el nombre del archivo ejecutable de la aplicación) que especifica el nombre del servidor de aplicación al cual, el cliente está enlazando; el tópico de datos (a menudo es el nombre de un archivo, pero esta definición puede variar) para abrir el enlace a la aplicación servidora, por último, necesitará el elemento de dato (el cual, es frecuentemente el nombre de una variable). Los Datos y comandos son transferidos en formato texto por convención. El tema es el segundo nivel en las tres cadenas de caracteres y define el objeto de una conversación DDE, y es usualmente significativo tanto para la aplicación servidor y cliente. El elemento identifica el dato o valor que se está pasando durante la conversación DDE entre el servidor y el cliente. De acuerdo con los mensajes utilizados del entorno Windows ® hay tres tipos de conversaciones DDE: enlace frío (cold-link), enlace caliente (hot-link) y enlace templado (warm-link). Diciembre del 2004 IE-0502 17 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 2.4 Enlaces OLE para Windows Las siglas OLE provienen del inglés Object Linking and Embedding, lo que traducido al español sería enlace e inclusión de objetos. 12 Es una especificación de Microsoft creada para trabajar en Windows haciendo posible la integración de objetos entre aplicaciones, lo que permite crear documentos con entidades provenientes de distintas aplicaciones. Los objetos pueden ser casi cualquier tipo de información, incluyendo texto, imágenes de mapa de puntos, gráficos vectoriales e incluso anotaciones de sonido y vídeo. A través de OLE es posible que los programas se comuniquen entre sí e intercambien información sin pérdida de detalle, independientemente de su origen. Pero el proceso no se produce de forma automática, de modo que es preciso conocer su funcionamiento para poder aprovechar sus posibilidades. OLE fue introducido en 1991 como una extensión del protocolo DDE, que fue creado para pasar datos entre aplicaciones, y en especial, desde la hoja de cálculo Excel. Los programas que en la actualidad admiten el uso de OLE, lo hacen conforme a las normas de OLE1 u OLE2, siendo esta última versión más moderna (1993) y eficaz que la primera, permitiendo entre otras cosas el paso de datos mediante la técnica drag and drop (arrastrar y soltar) y la edición in situ de los datos. OLE no es soportado por Windows de forma directa, lo que quiere decir que no todos los programas de este entorno gráfico trabajan en OLE, ya que es preciso que las aplicaciones hayan sido diseñadas para soportar sus funciones. La especificación OLE permite incorporar enlaces entre determinadas partes de los programas, y así, es posible controlar desde una aplicación lo que se está realizando en otra. Una aplicación que trabaja con OLE puede actuar como servidor, como cliente o como las dos cosas. 12 http://personales.unican.es/togoresr/r40p64.htm Diciembre del 2004 IE-0502 18 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Para que se puedan pasar los datos entre aplicaciones, se requiere que existan copias completas de los datos en la memoria, para permitir controlar qué datos van siendo pasados. OLE permite el intercambio de datos de dos formas: enlace e inclusión, también conocidas como vinculación e incrustación, posibilitando la creación de documentos compuestos, o sea, documentos formados por varios objetos de datos provenientes de múltiples aplicaciones. Un objeto incluido está totalmente contenido dentro de la aplicación cliente. Un objeto enlazado tiene una conexión en la aplicación cliente y sólo es accesible a través de la aplicación que contiene los datos originales. En cualquiera de los dos casos, si se pulsa dos veces seguidas sobre el objeto, se activa el programa servidor para permitir la edición de los datos. 13 Podemos considerar que OLE es un subconjunto de la tecnología ActiveX, encargada de la vinculación e incrustación de objetos, y ambas se sustentan sobre COM (Component Object Model). COM proporciona un mecanismo para permitir la comunicación entre los objetos de una aplicación o entre distintos procesos, proporcionando mecanismos para que un objeto pueda mostrar su funcionalidad a través de una interfaz. Por tanto, COM nos proporciona las conexiones y los interfaces que serán utilizadas desde OLE para conseguir la automatización, para que una aplicación pueda ofrecer una interfaz programable. Las aplicaciones que vienen con Microsoft Office (Word, Excel, Access), el propio Microsoft Internet Explorer, entre otros, soportan la automatización OLE. OLE no es soportado por Windows de forma directa, lo que quiere decir que no todos los programas de este entorno gráfico trabajan en OLE, ya que es preciso que las aplicaciones hayan sido diseñadas para soportar sus funciones. La especificación OLE permite incorporar enlaces entre determinadas partes de los programas, y así, es posible controlar desde una aplicación lo que se está realizando en otra. Una aplicación que trabaja con OLE puede actuar como servidor, como cliente o como las dos cosas. 13 Tomado http://www.iespana.es/perl-es/OLE.htm Diciembre del 2004 IE-0502 19 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Para que se puedan pasar los datos entre aplicaciones, se requiere que existan copias completas de los datos en la memoria, para permitir controlar qué datos van siendo pasados. 2.5 Generalidades de un Servidor OPC 14 El OPC (en inglés OLE for Process Control), o en español OLE para control de procesos, es una especificación técnica no propietaria definida por la Entidad OPC Foundation (OPC Foundation es una entidad sin fines de lucro, encargada de administrar la especificación OPC) y consiste básicamente en un Sistema de Interfaces Estándar basado en OLE/COM y DCOM de Microsoft. Con OPC es posible ínter operar dispositivos industriales con sistemas de información o aplicativos de escritorio. En otras palabras, el OPC permite desarrollar de una manera muy práctica y eficiente aplicaciones que pretendan comunicarse con equipos industriales controlados por PLC’s. 15 Desde un punto de vista general muchos aspectos de OPC son similares al DDE, pero la diferencia principal está en la puesta en práctica usando la tecnología de COM de Microsoft (modelo componente del objeto). Permite intercambio rápido con datos de proceso de la automatización y el interfaz abierto de OPC, permite el acceso a los datos del servidor de OPC de la misma manera estándar de los usos del cliente de OPC. 16 OPC es un conjunto de protocolos para interfaces OLE/COM estándar destinados a estimular una mayor interacción entre las aplicaciones de control/automatización, los dispositivos/sistemas de campo y las aplicaciones de ofimática/gestión en la industria de control de procesos. En cooperación con Microsoft, cinco empresas, Intellution, Opto-22, FisherRosemount, Rockwell Software y Intuitiv Software, se unen para crear OPC Foundation en Mayo de 1995. El objetivo del comité conformado fue proporcionar una interfaz de programación de aplicaciones estándar para el intercambio de datos que pudiese simplificar el desarrollo de drivers de I/O y mejorar el rendimiento de los sistemas de interfaz. 14 Tomado de http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art123.asp Traducido del manual de ayuda del OPC Server de la compañía Unitronics 16 Tomado de https://www.software.omron.es/software/cx/pages/cx_comun.jsp?id=6 15 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 20 El OPC eliminó problemas de duplicación de esfuerzo, inconsistencias entre vendedores de drivers, soporte para cambios en características de hardware, conflictos de Acceso, estableciendo una interfaz de comunicación común, lo cual ha beneficiado enormemente el desarrollo de aplicaciones HMI y sistemas SCADA. El OPC ofrece varias ventajas entre las cuales destacan las siguientes: • Los fabricantes de hardware tienen que hacer solamente un conjunto de componentes de software para que los clientes los utilicen en sus aplicaciones. • Los desarrolladores de software no tienen que rescribir drivers debido a cambios en características o adiciones en un hardware. • Los clientes tendrán más opciones con las cuales puedan desarrollar diversos sistemas de aplicación a nivel industrial. Posibilidades con el OPC: • Acceder a datos en línea: La lectura y la escritura eficiente de datos entre una estación central y un dispositivo de control de procesos se puede realizar de forma flexible y eficiente. • Control de alarmas: El OPC provee mecanismos para que sus clientes sean notificados de la ocurrencia de acontecimientos y de condiciones de alarmas especificadas. • Acceso a datos históricos: El OPC permite la lectura, procesamiento y corrección de datos históricos con un eficiente motor de acceso. Con la arquitectura OPC se aprovechan las ventajas de la interfaz COM para ampliar su funcionalidad. La especificación OPC incluye lo siguiente: • Interfaz COM/DCOM para ser usada por clientes Locales o Remotos. • Referencias a la Interfaz de Automatización OLE. Requerimientos de Funcionalidad: • OPC es respaldado completamente por C++, Visual Basic y Delphi. • Cualquier cliente con interfaz OLE. • No respalda el uso con VBScript o JavaScript. Diciembre del 2004 IE-0502 • 21 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. La especificación OPC requiere como Sistema Operativo Windows 95/98 (con DCOM), Windows NT 4.0 o Superior. En todos los casos es recomendable instalar la última versión de Services Pack correspondiente. La Figura siguiente representa el funcionamiento del OPC con las interfaces personalizada y automatizada. Figura N°2.1 Funcionamiento e Interfaces de OPC17 El modelo jerárquico de objetos definido por OPC Foundation se representa en la siguiente figura: Figura N°2.2 Modelo de Objetos del Servidor de Automatización OPC La descripción de cada uno de los objetos del modelo anterior, se presenta en la siguiente tabla: 17 Tomado http://www.iespana.es/perl-es/OLE.htm Diciembre del 2004 IE-0502 22 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Tabla 2.1 Descripción de la colección de objetos de la especificación OPC OBJETO DESCRIPCIÓN Servidor OPC Es una instancia de un servidor OPC. Se debe crear un objeto Servidor OPC antes de poder referenciar los otros objetos. Este contiene la colección Grupos OPC y el objeto Buscador OPC. Grupos OPC Es una colección de los objetos Grupo OPC que el cliente ha creado. Grupo OPC El propósito de este objeto es mantener la información de estado y proveer el mecanismo para ofrecer los servicios de adquisición de datos por la colección de objetos Ítem OPC. Ítems OPC Es una colección que contiene todos los objetos Ítem OPC que el cliente ha creado. Ítem OPC Es un objeto que mantiene la definición de los ítems, sus valores, estados y datos de la última actualización. Buscador OPC Es un objeto que permite buscar nombres de ítems en un servidor configurado. Un servidor de acceso a datos OPC está formado por varios objetos: el servidor, el grupo y el elemento. El servidor de objetos OPC ofrece información sobre el servidor y sirve como un contenedor de grupos de objetos OPC. El grupo de objetos OPC mantiene información acerca de sí mismo y proporciona los mecanismos para contener y organizar lógicamente los elementos OPC; los grupos OPC proporcionan una forma para organizar los datos de los clientes; por ejemplo, el grupo podría representar los elementos en una pantalla particular del operador o a través de un informe; los datos pueden ser leídos y escritos, y las conexiones basadas en excepciones, pueden ser creadas entre el cliente y los elementos en el grupo y pueden ser activadas y desactivadas según sea necesario; un cliente OPC puede configurar el porcentaje de los datos que deben ser cambiados antes de la actualización. Hay dos tipos de grupos, públicos y locales (o privados); los públicos se realizan para ser compartidos entre varios clientes, mientras que los locales son privados para el Diciembre del 2004 IE-0502 23 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. cliente en cuestión. Existen interfaces específicas opcionales para los grupos públicos; dentro de cada grupo, el cliente puede definir uno o más elementos OPC Los elementos OPC representan conexiones a fuentes de datos dentro del servidor; un elemento OPC, no es accesible por el cliente como un objeto. Así pues, no hay una interfaz externa definida para un elemento OPC; todos los accesos al elemento OPC se realizan a través del objeto grupo OPC que contiene el elemento OPC, o simplemente el grupo en el que el elemento ha sido definido. Asociado a cada elemento existe un valor, calidad y valor temporal. Los elementos no son las fuentes de datos, sólo son conexiones a ellas; el elemento OPC debe ser entendido como la dirección de los datos, no como la fuente física actual de los datos a los que la dirección referencia, puesto que la fuente real de los datos es el dispositivo controlador, regularmente un PLC. 2.6 Compilador Gráfico Delphi. 18 Borland Delphi es un ambiente de Desarrollo Rápido de Aplicaciones (RAD: Rapid Application Development) para el lenguaje ObjectPascal en el sistema operativo Windows 95/98/NT/2000 es producto de BORLAND Corporation. Los sistemas RAD están orientados a facilitar la productividad en el desarrollo de software, a las velocidades de procesamiento que brinda actualmente el hardware. Algunas de las características que hacen de Delphi un sistema de alta productividad y excelencia son: • Ambiente visual de desarrollo para aplicaciones controladas por intervenciones o eventos de usuario sobre interfaces gráficas. Fácil integración de informes y gráficos de gestión. • Lenguaje de programación de excelencia en estilo y expresividad: ObjectPascal. ObjectPascal de Delphi es un Pascal Orientado a Objetos (OO), completamente comprometido con el modelado de objetos. • Proporciona una jerarquía muy extensa de Clases de Objetos reusables y extensibles, con recursos de computación visuales y de procesamiento. Diciembre del 2004 IE-0502 • 24 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. En las versiones Professional y Enterprise, Delphi ofrece clases para el desarrollo de aplicaciones en Internet soportadas por TCP/IP, para aplicaciones distribuidas. También con soporte a los modelos de distribución de objetos COM, DCOM y CORBA. • Componentes integrados dentro del lenguaje, lo que reduce considerablemente la utilización de librerías y controles externos, por lo tanto menos problemas para el usuario. • Tratamiento de errores mediante excepciones. • Soporte avanzado de Bases de Datos mediante BDE (Borland Database Engine), ADO (ActiveX Database Objects, tecnología de Microsoft de acceso a Bases de Datos e Internet) , finalmente InterBase Express, acceso nativo a InterBase, para desarrollo Cliente/Servidor off-line. • Componentes compatibles con Microsoft Office. • Facilidad en la distribución de aplicaciones con el InstallShield Express. Básicamente, estas descripciones técnicas, lo que quieren decir para esta aplicación es que esta herramienta (Delphi), permite extraer la información de un servidor OPC que se comunica con PLC con un protocolo determinado y por medio de los enlaces OLE de Windows, realiza una aplicación gráfica de monitoreo estilo SCADA en donde refresca constantemente los datos transmitidos, creando así una interfaz HMI. Los elementos utilizados para este tipo de aplicaciones (las anteriormente citadas), dependen de herramientas tales como OLE y ActiveX Database Objects 19 (nueva tecnología de acceso a datos), tanto como funciones (eventos) drag and drop, entre otros. Este tipo de aplicaciones son una buena muestra de tecnología y hace uso de innumerables elementos, por lo que una plataforma como Delphi es de gran utilidad al poseer todo este tipo de operaciones de avanzada. 18 Tomado de http://afrodita.faces.ula.ve/MartaSananes/Cursos/Delphi/ y http://leo.worldonline.es/acanudas/pdf/dp5intro.pdf 19 Microsoft ActiveX Data Objects (ADO) es una interfaz basada en Automatización para obtener acceso a datos. ADO utiliza la interfaz de OLE DB para tener acceso a un amplio conjunto de orígenes de datos, incluyendo pero no limitándose a los datos proporcionados mediante ODBC. Tomado de http://www.sqlmax.com/ado.asp Diciembre del 2004 IE-0502 25 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. CAPÍTULO 3: Desarrollo de una Interfaz HMI Debido a que todos los PLCs son diferentes tanto en características de Hardware como de Software este capítulo es dedicado al conocimiento y descripción del modelo de PLCs M90, empezando desde una reseña de la compañía desarrolladora de este tipo de controladores, hasta el propósito del proyecto, la implementación de la aplicación SCADA para este PLC. Por lo que se tratarán temas tales como especificaciones técnicas eléctricas en su mayoría, hasta la descripción de los registros internos de este aparato. 3.1 Breve reseña de la compañía Unitronics 20 Unitronics Ltd. es una compañía de tecnología avanzada, cuya especialización particular es en el área de producción de Controladores Lógicos Programables (PLC), cerebros de la computación que hacen posibles las líneas de producción automatizadas. Su personal abarca a cuarenta personas de gran conocimiento, del sector de alta tecnología israelí. Entre los aspectos más destacados es el departamento R y D, esta compañía se ha sostenido en el filo de la investigación técnica y el desarrollo. Desde 1989, Unitronics ha introducido muchos productos innovadores que han revolucionado el acercamiento a la producción de las líneas de automatización. Entre sus productos destacados están el WebPLC™. Este dispositivo basado en Internet transformó el acercamiento de la industria a las comunicaciones de datos. Unitronics entrega sus productos a través de distribuidores en Europa, América del sur, Asia, y su subsidiaria surafricana. Los productos han estado en servicio de plantas de compañías importantes tales como: Coca Cola, Dannone, Elf Lub N.V., Campiña Melkuni Mona, Agfa, ColgatePalmolive, Avena Quaker, Industrias Aeronáuticas de Israel, Granja Frites, Heinz, Las minas de oro de Klooftmine, y Nestlé. 20 Tomado de www.unitronics.com y traducido al español por Alexander Barrantes Muñoz. Diciembre del 2004 IE-0502 26 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 3.1.1 Misión Su misión es hacer la automatización eficiente, comprable, y alcanzable. El principal propósito de la producción de la cadena de automatización es producir mercancías sin la intervención humana. El equipo del R y D crea los nuevos dispositivos de la automatización (PLC) combinando un conocimiento profundo de requisitos industriales y de la maestría técnica con el único objetivo de la utilidad. Los resultados son PLCs que cumplen constantemente el estándar para la industria de la automatización. Los productos de Unitronics se utilizan en petroquímica, automovilismo, procesamiento de alimentos, plásticos y textiles, energía y ambiente, del agua y de aguas residuales, en cualquier campo donde se requieren procesos automatizados. 3.1.2 Historia de sus productos En esta compañía dentro de sus grandes talentos destacan: la capacidad de desarrollar nuevas tecnologías y de utilizarlas para construir dispositivos rentables que ofrecen funcionalidad excepcional. Unitronics irrumpió en el campo de la automatización industrial en 1989 con el revolucionario ADP86. Este dispositivo (PLC) era más rápido que cualquier producto de la competencia. También tenía otras dos características importantes: protocolos de comunicaciones flexibles y habilidades programables de trabajos múltiples. Increíblemente el ADP86 poseía un precio de $5.000, donde los productos de competencia con menor funcionalidad valían $15.000 o más. En 1992, Unitronics hizo una brecha épica en tecnología de la automatización. Se creó el último PLC de uso fácil, el OPLC™. Las series de OPLC™ combinan paneles de operación y PLC’s en un solo dispositivo unificado, fácil de programar y operar. El OPLC™ sobresalió y cambió radicalmente la automatización. Unitronics refinó y desarrolló una gama completa de dispositivos OPLC™, apuntando a un lugar de mercado específico en el mundo de la automatización. El M90, lanzado en 1999, es el pináculo del desarrollo de OPLC™, un paquete minúsculo que incluye grandes características. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 27 El año 2000 trajo el WebPLC™ basado en Internet. WebPLC™ de Unitronics estuvo conducido por la onda del Internet, la revolución de las comunicaciones, en donde el Internet entró en cada faceta de la vida pública y privada. El WebPLC™, en las etapas finales del desarrollo, culmina al integrar lo mejor de la nueva tecnología en los productos. 3.1.3 Breve Organigrama de la compañía Abajo se muestra un pequeño gráfico del organigrama de la compañía Unitronics. Figura N°3.1 Organigrama de la Co. Unitronics 3.1.4 Puntos Claves • La materia prima más importante es la gente. • La llave a la automatización acertada es la comunicación. • El personal trabajador del R y D abarca las disciplinas de la ingeniería, programación, y comunicaciones. 3.1.5 Productos • Creación de PLC’s con interfaz integrado del operador. • Las series del Controlador OPLC™ combinan paneles de operación y PLC’s en un solo dispositivo unificado, fácil de programar y operar. Los paneles de Operación contienen una pantalla y un teclado de visualización. La pantalla de Diciembre del 2004 IE-0502 28 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. visualización se utiliza para exhibir mensajes, de modo que el PLC pueda comunicarse con el operador que supervisa el proceso automatizado. El teclado se utiliza para incorporar la información en el sistema y para iniciar funciones, de modo que el operador pueda comunicarse con el PLC corriendo el proceso automatizado. 3.2 La familia de productos de Unitronics Los dispositivos campo-endurecido son utilizados para condiciones exigentes que existen en industria pesada o ligera. Los productos de Unitronics son para satisfacer cualquier proceso automatizado. • Controladores OPLC™ para los usos que requieren un interfaz del operador. • PLC’s con configuraciones I/O internas. • PLC tradicionales •.Tarjetas de entrada-salida para el proceso de datos, para uso de aplicaciones de automatización. La familia de Controladores Unitronics, poseen los siguientes modelos: Los Controladores con HMI son: • M310 • M216 • M228 • M190 • M218 • M90 • M210 Seguido del M90, Unitronics introduce una nueva serie de controladores, llamada Vision. Hay tres tipos de controladores en esta serie: • Vision 230 • Vision 260 • Vision 280 Abajo se muestran tres de sus modelos. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 29 Figura N°3.2 Familia de PLCs de Unitronics 3.2.1 Características generales de los productos La familia de PLCs Unitronics poseen características generales comunes entre cada modelo, abajo se describen las principales: • R.T.C. Reloj en tiempo real. Este reloj permite funciones específicas del reloj. El RTC tiene un respaldo de la batería de 7 años. • Tamaño del programa de 16K palabras. La cuenta de la palabra se hace según la traducción del programa de STL. • Tiempo de ejecución. El tiempo de la exploración es 0,5 microsegundos por un bit de operación • Teclado. La tecla del modo de información (< i >) se utiliza solamente para mostrar a través de las pantallas, la información de los sistemas de operación. Para el Vision 260 se tienen 33 teclas. • Pantalla. La serie Vision tiene una pantalla gráfica. Se puede crear hasta 100 diferentes exhibiciones que acomodan hasta 60K de datos. Cada exhibición puede contener el texto libre, bmp (mapa de bits) y variables. • En cada exhibición se puede agregar hasta 16 variables. Las variables pueden venir en forma de texto o representado por una imagen del valor del bit del estado, de las listas, Diciembre del 2004 IE-0502 30 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. del tiempo y la fecha, y de los valores de los contadores. • VisiLogic permite al programador: Construir la aplicación del PLC usando elementos y funciones click-and-drop en el VisiLogic. 3.2.1.1 El modo de información • El modo de información (Info.) es una ventana dentro del controlador. • Permite que un operador compruebe y cambie los valores específicos almacenados dentro de un controlador sin la necesidad de una PC o del software U90. • El modo del Info. es seleccionado presionando la tecla < i > por varios segundos. 3.2.1.2 La estructura de memoria de la serie M90 La estructura de memoria de la serie M90 es constituida por 4 elementos: • MB, Bit de Memoria. Puede ser 1 o 0 lógico. • SB, Bit del Sistema. • MI, Enteros de Memoria. Registro de 16 bits (15 + signo) que puede ser cualquier número entero dentro de la gama -32768 a +32767. • SI, Enteros del Sistema. Registro de 15 bits controlado por el sistema que puede ser cualquier número entero dentro de la gama -32768 a +32767. El SI y el SB son una clase de interfaz entre el sistema de operación y el programador (o una aplicación). Toda la memoria de la serie Vision es respaldada por una batería. Otros operandos que participan en la estructura de memoria son: • I, Entradas . • O, Salidas. • T, Temporalizadores. • #, Números directos. • MB y MI - un total de 256 de cada uno. Los primeros 16 MBs y MIs están bajo respaldo de bateria. • Temporalizadores - un total de 64. Diciembre del 2004 IE-0502 31 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. • Entradas y Salidas - según la configuración de hardware. La serie M90 trabaja con memoria flash. La memoria flash es más estable porque no es dependiente en una fuente de alimentación. Un procedimiento de la transferencia directa consiste en: • “Ladder” • HMI • Temporalizadores • Variables • Configuración del Hardware • Configuración del Modem • SMS La serie M90 permite la descarga en marcha . Los procesos de descarga en los controladores de Unitronics ocurren en una memoria RAM y desde ella van al flash mientras que la máquina todavía funciona. Solamente una descarga de un cambio en la configuración del hardware o un bloque de la función conducirá a la parada y al reajuste del controlador. 3.2.1.3 Variables El M90 tiene 50 variables diferentes. Las mismas variables pueden ir en muchas pantallas diferentes y cadenas de caracteres SMS. Las variables binarias permiten que el usuario agregue el texto a la pantalla de la serie M90 según el estado de cierto bit. Este bit puede ser un MB, SB, I, O ó un contador de tiempo. Para evitar problemas de memoria sólo se puede introducir 6 caracteres por cada opción. La variable Entera permite que el usuario pueda leer o escribir el valor de cierto registro desde la memoria del controlador, estos enteros de sólo lectura pueden ser un MI o un SI. Los límites de la linearización y de la entrada son parte del trabajo que el sistema de operación hace para el usuario. Este número entero puede ser cualquier tipo de datos, construido con la ayuda de una contraseña para pantallas que llevan a cabo información sensible. Diciembre del 2004 IE-0502 32 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 3.2.1.4 Comunicación La serie M90 tiene 2 puertos de comunicación posibles: 1 puerto serial RS232 1 CANbus Puerto Serial Se utiliza el puerto serial para descargar aplicaciones en el PLC M90. El puerto serial trabaja con: • RS232 • RS485 + convertidor El M90 es un esclavo en una red de comunicación serial. El puerto serial se comunica con el PLC M90 usando el protocolo Pcom de Unitronics. El Pcom es un protocolo cerrado, lo que significa que no se puede agregar funciones a él. Sin embargo, se da libremente como OCX con toda la documentación de modo que cualquier persona pueda ponerla en ejecución en una aplicación en su PC. Uso del protocolo Pcom Una PC puede hablar con un PLC M90 en una de dos maneras: • Implementando un protocolo en una aplicación en la PC. • Usar una aplicación de un servidor DDE. • Usar una aplicación de un servidor OPC. El M90 no puede inicializar la comunicación en una comunicación serial. El puerto serial es también un puerto de acceso remoto y un dispositivo de conexión. Puerto de CANbus La Serie M90 tiene un puerto CANbus. El Unitronics CANbus corre en la misma capa física que el A.B. DeviceNet pero en un diferente protocolo. El puerto de CANbus se puede utilizar de 3 maneras: • Para conectar 32 unidades con uno de los grandes controladores Unitronics. • Para conectar una red de hasta 63 unidades con una PC. Diciembre del 2004 IE-0502 • 33 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Para conectar una red de hasta 64 unidades entre sí. El puerto CANbus está situado al lado del controlador. 3.3 Características Generales del M90 OPLC™ 21 El M90 Es un PLC compacto con I/Os integrados e interfaz gráfica de operador. La siguiente tabla describe brevemente, la cantidad, simbología y otras características de los registros internos del M90. Tabla 3.1 Descripción de registros internos del M90 Símbolo del tipo de Dato Bits de Memoria (bobinas): 1024 Enteros de Memoria (registros): 256, 16 bit Bits del sistema: 256 Enteros del sistema: 256, 16 bit Símbolo Símbolo del tipo de Dato MB Contadores: 64, 16 bit MI Entradas: 512 SB Salidas: 512 SI Símbolo T I O Los tipos de datos del sistema, mencionados abajo, se ligan a ciertos valores o funciones del controlador y son reservados para uso por el sistema. Algunos de ellos están disponibles. La interfaz RS232 está vía los puertos seriales del tipo RJ-11. La siguiente tabla muestra la distribución de sus pines. Tabla 3.2 Distribución de pines del puerto RS232 Diagrama 21 Número de Pin 1 2 3 4 5 6 Función Desconectado Referencia 0V Señal TxD Señal RxD Referencia 0V Desconectado Traducido de la guía del usuario del OPLC Vision 230 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 34 La conexión PC-PLC se muestra en el siguiente gráfico: Figura N°3.3 Conectando la PC con un Controlador Análogamente, la descripción de conexión para el puerto CANbus, sigue la descripción de la siguiente tabla: Tabla 3.3 Descripción de conexión para el puerto CANbus -V Fuente común de 24V para CANbus L CAN low PE Tierra H CAN high +V Fuente de 24V para CANbus. Con respecto al modo de información, una descripción más detallada de las categorías que se pueden acceder por medio de él, se describe en la siguiente tabla. Diciembre del 2004 IE-0502 35 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Tabla 3.4 Categorías de información que se pueden alcanzar en el modo de Información Categoría Tipos de Datos Tema Entradas Salidas Bits de Memoria Bits del Sistema Contadores Sistema Modelo y Versión O/S Modo de Trabajo Tiempo y Fecha ID de la Unidad Puerto Serial 1 Clave CANbus Baud Rate Ajuste de la Pantalla Sensible al Tacto Nuevo Acciones Posibles • Ver estado de las entradas • Forzar el estado de las entradas a 1 (FR1) o 0 (FR0). Los valores forzados permanecen en efecto hasta que se selecciona el modo normal (NRM), o hasta el controlador se inicializa o reajuste. Los valores forzados de las entradas no afectan su programa. Esto puede ser útil en la prueba del efecto de una condición de la entrada en un estado de la salida • Ver estado de las salidas • Forzar el estado de las salidas a 1 (FR1) o 0 (FR0). Los valores forzados de las salidas no afectan su programa. • Set/Reset el estado de la salida • Ver el estado de los bits. • Cambiar el estado de los bits (Set/Reset). • Entrar el valor del tiempo preestablecido • Ver el valor y el estado actuales del contador de tiempo seleccionando la opción de R.T. • Revisar el número de modelo del controlador y la versión del sistema operativo • Revisar si el controlador está en modo de funcionamiento o de parada • Revisar si el controlador está en modo de funcionamiento o de parada • Reajustar el controlador. Esto reinicia el programa; restaurando valores de encendido y todos los tipos de datos a excepción de esos protegidos por el respaldo de memoria con la batería • Inicializar el controlador. Esto recomienza el programa e inicializa todos los valores, restaurando los valores a 0 a todos los tipos de datos • Ver los ajustes del reloj en tiempo real (RTC). Observe que todos los ajustes del control del RTC están basados en funciones de tiempo. • Cambiar los ajustes del RTC vía el teclado del controlador. El número de ID de la unidad identifica la posición en la red del controlador. • Cambiar el número de ID. El nuevo número de ID será recordado en efecto hasta que el controlador sea reiniciado. • Quemar el número de ID dentro de la memoria FLASH del controlador. Esto es un cambio permanente. • Ver y editar los ajustes de comunicación. • Seleccionar cambiar o quemar los nuevos ajustes. • Cambiar el baud rate del CANbus. • Seguir la instrucciones de la pantalla. • Ajustar una nueva clave 3.3.1 Tipos de datos del sistema Los tipos de datos específicos se ligan a los parámetros fijos y son inalterables por el programa de usuario, tal como Bit de encendido SB 2. Se puede escribir en ciertos tipos de datos. Éstos están marcados con un asterisco (*), por ejemplo el ID de la unidad (SI 8). Todos los SBs y SIs no listados son reservados para uso por el sistema. Las siguientes tablas, muestran los registros del sistema y sus respectivas funciones y han sido divididos por grupos de cada categoría. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 36 Tabla 3.5 La función de los bits del sistema Bits del sistema (SB) 0 1 2 3 4 5 5 7 8 30 31* 32 40-63 200*-215* 236 237* 250 251 Función Siempre 0 Siempre 1 Bit de encendido Pulso de un segundo Divide por cero Salida(s) de corto circuito Teclado activo Pulso de 100ms Batería baja Entradas del teclado numérico HMI completo Refrescar lo mostrado actualmente en la Pantalla LCD Entradas del teclado numérico HMI en progreso Teclas del teclado numérico Operadores de red Error de comunicación de red Red desactivada Entrada del teclado numérico dentro de los límites Entrada del teclado numérico excede los límites Tabla 3.6 Funciones de Bits del Sistema del teclado Bits del Sistema (SB) SB 40 Tecla del Teclado Bits del Sistema (SB) SB 47 SB 41 SB 48 SB 42 SB 49 SB 43 SB 50 SB 44 SB 51 SB 45 SB 52 SB 46 SB 53 Tecla del Teclado Diciembre del 2004 IE-0502 37 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Tabla 3.7 Funciones de los Enteros del Sistema Enteros del Sistema 0 6 7* 8* 9* 30* 31* 32 33 34 80 81 82 83 200*-201* 236 237 Función Tiempo de exploración Tecla actual presionada Contraste del LDC (solo V280) ID de la unidad Intensidad de las luces del LDC Segundos actuales, según RTC Tiempo actual, según RTC Fecha actual, según RTC Año actual, según RTC Día actual, según RTC Estado del Modem: COM1 Código de error del Modem: COM1 Estado del Modem: COM2 Código de error del Modem: COM2 Operadores de red Código de Comunicación de red Red: falla del ID de la unidad 3.3.2 Especificaciones Técnicas • I/Os: integrados, se integran en el sistema vía módulos snap-in. o Entradas Digitales: 10 entradas PNP, voltaje nominal 24VCD con 3mA, impedancia 8.4kΩ, longitud del cable mayor a 100 metros. o Entradas Analógicas: 10 bits, multi-rango de entrada de: 0-5V, 0-10V,0-20mA, 420mA. Método de conversión aproximación sucesiva. Impedancia mayor a 100kΩ a voltaje constante y 250Ω a corriente constante. o Salidas Digitales: 6 salidas de relee a 230VCA/24VCD tipo SPST-NO. Corriente máxima 5A a carga resistiva o 1A a carga inductiva. Frecuencia máxima 10Hz • Dimensiones: 96.5 x 96.5 x 65 mm. • Montaje: Panel montado vía soportes • Fuente de Alimentación: Voltaje de entrada 24VCD. Rango Permitido de 20.4VCD a 28.8VCD con menos de un 10% de rizado. Diciembre del 2004 IE-0502 38 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. • Consumo máximo de corriente 140mA a 24VCD. • Consumo típico de energía: 3.2W • Pantalla Gráfica: LCD, tipo STN, Iluminación por leds, amarilla-verde lámpara trasera. Tamaño de 1 línea de caracteres largos. Tamaño de carácter matriz de 5x7, 3.07 x 5.73mm. • Teclado: 15 teclas, Incluye teclas suaves y teclado alfanumérico. Tecla de metal de tipo domo, selladas por membrana • Programa del PLC: 1024 palabras. Tiempo de ejecución por bit de operación: 12µs por bit de operación, 256 bits, 256 registros de enteros, 64 temporizadores. 80 pantallas para el usuario, 50 variables HMI. • Comunicación: 1 puerto RS485/ RS232 vía convertidor, 1 puerto CANbus. Programa del PLC: 1024 palabras. Tiempo de ejecución por bit de operación: 12µs por bit de operación, 256 bits, 256 registros de enteros, 64 temporizadores. 80 pantallas para el usuario, 50 variables HMI. • Reloj (RTC) para fecha, tiempo y año con respaldo de batería de 7 años. • Peso: 280g (9.8 oz). • Ambiente: dentro de gabinete IP20 / NEMA1, panel montado IP65 / NEMA4X (frente al panel), temperatura de Operación 0 a 50ºC (32 a 122ºF), temperatura de almacenamiento -20 a 60ºC (-4 a 140ºF), humedad relativa (RH) 5% a 95% (no-condensada). • Accesorios: cable de programación, conector de fuente de alimentación y entradas, CD del Software U90Ladder. Diciembre del 2004 IE-0502 39 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Los gráficos del M90 se muestran a continuación. Figura N°3.4 PLC M90 3.3.3 Acceso de datos 22 El servidor OPC de Unitronics es un programa de aplicación de 32 bits de Microsoft Windows, que actúa como servidor del protocolo de comunicación y permite que otros programas de Windows tengan acceso a los datos de los controladores lógicos programables de UNITRONICS (PLCs) siguientes que usan el interfaz de programación (RS232): 22 - M90, - M200, - Vision 230. Traducido del manual de ayuda del OPC Server de la compañía Unitronics Diciembre del 2004 IE-0502 40 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Cualquier programa que sea capaz de actuar como un cliente de OPC o del DDE puede utilizar el servidor de UNITRONICS, es decir el servidor de Microsoft Windows apoya protocolos de OPC y del DDE. Retomando lo expuesto en la sección 2.3.2., el protocolo de comunicación direcciona un elemento de datos en una conversación que utilice a convención de nombramiento de tres partes que incluye el nombre de la aplicación, el nombre del tópico (asunto) y el nombre del Ítem (artículo). Lo que sigue describe brevemente a cada porción de esta convención de nombramiento: • Nombre de la Aplicación Nombre del programa de Windows (servidor) que tendrá acceso al elemento de datos. En el caso de los datos que vienen o que van al PLC Unitronics M90, M200 o Vision 230 vía este servidor, la porción de la aplicación de la dirección es UNITRONICS. • Nombre del Tópico Los nombres significativos se configuran en el servidor para identificar los dispositivos específicos. Estos nombres entonces se utilizan como el nombre del tópico en todas las conversaciones a ese dispositivo. Por ejemplo, Unit1. Se puede definir múltiples nombres del tópico para el mismo dispositivo (PLC) para usar diferentes ítems en diferentes rangos. • Nombre del Item Un elemento de datos específico dentro de un tópico específico. Por ejemplo, al usar este servidor, los ítems pueden ser números enteros individuales de la memoria, entradas, salidas en el PLC. 3.3.3.1 Nombre de los Ítems El servidor Unitronics puede accesar las siguientes tipos de áreas de memoria: Enteros de Memoria (MI), Bits de Memoria (MB), Entradas (INP), Salidas (OUT), Enteros del Sistema (SI), Bits del Sistema (SB), Valor del Temporizador actual (TC), Valor del Temporizador preestablecido (TP), Bit del Temporizador del tiempo de exploración (TS), Reloj de Tiempo Diciembre del 2004 IE-0502 41 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Real, ID de la Unidad y Estado del PLC, entre otras. El tipo de ítems soportados son discretos, Enteros y cadenas de caracteres. La siguiente tabla muestra una descripción de los tipos de ítems del M90. Tabla 3.10 Descripción de los tipos de ítems del M90 Nombre Descripción del Item Tipo de Rango de Valores Rango Tag MBn Bit Discreto 0,1 n = 0 a 1023 MIn Entero (16bits) Entero -32768...32767 n = 0 a 255 INPnn,b Bit Discreto 0,1 n = 00 a 63 b=0a7 OUTnn,b Bit Discreto 0,1 n = 00 a 63 b=0a7 SBn Bit Discreto 0,1 n = 0 a 255 SIn Entero (16bits) Entero -32768...32767 n = 0 a 255 TCn Entero sin Entero 0... 65535 n = 0 a 63 Entero 0... 65535 n = 0 a 63 n = 0 a 63 signo (16bits) TPn Entero sin signo (16bits) TSn Bit Discreto 0,1 PS Entero sin Entero 1, 2, 3, 4, 5 Entero 0…255 Entero 0…255 Entero 1, 2, 3 signo (16bits) SK Entero sin signo (16bits) ID Entero sin signo (16bits) RTC Entero sin signo (16bits) CLOCK C. de Caracteres C. de Caracteres Notas: 1. También las letras minúsculas mi, mb, inp, out, si y sb pueden ser usadas como primeros caracteres de los nombres de ítems. 2. Toda dirección es decimal. Diciembre del 2004 IE-0502 42 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 3. Para los ítems discretos INP y OUT, el último digito (b) representa el bit de posición dentro del byte. EL bit de posición puede estar del 0 al 7. 4. Los ítems Entradas (INPnn,b), Valor del Temporizador Actual (TCn), Valor del Temporizador Preestablecido (TPn), Bit del Tiempo de Exploración (TSn) son de sólo lectura. Los bits del Sistema (SBn), Enteros del Sistema (Sin) son de Lectura y Escritura dependiendo de cómo son usados en el PLC. Los ítems de Tecla de Ajuste (SK), Estado de PLC (PS) y El Reloj de Tiempo Real (RTC) son de sólo escritura. 5. El ítem de Reloj (CLOCK) tiene el siguiente formato: HH:mm:ss ddd DD/MM/AA, donde HH hora (0…23); mm minutos (0…59); ss segundos (0…59); ddd día de la semana (Lun, Mar, Mier, Jue, Vier, Sab, Dom); DD día del mes (1…31); MM mes (1…12); AA 2 últimos dígitos del año. 6. Los ítems RTC y CLOCK no actúan como ítems generales. RTC es un ítem de sólo escritura que provee el control de lectura-escritura de ítem CLOCK. Los siguientes valores del RTC son: 0 Posición neutral; 1 El servidor UNITRONICS lee el reloj del PLC y extrae los valores dentro del ítem CLOCK (el ítem CLOCK puede ser activado); 2 El servidor escribe el contenido del ítem CLOCK al PLC; 3 El servidor escribe del tiempo de la PC al PLC (sincroniza los relojes de la PC y el PLC); 7. Los siguientes valores del ítem de Estado del PLC (PS) son: 0 Posición neutral; 1 Ejecución; 2 Alto ; 3 Inicio de Memoria y Reajuste; 4 Reajuste ; Diciembre del 2004 IE-0502 43 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 5 Switch el BootStrap . Ejemplos de llamadas de Items Los siguientes ejemplos son nombres de ítems válidos: MB0 MB109 mb1104 Bits de Memoria 0, 109 y 1104 MI0 MI9 MI615 Enteros de Memoria 0, 9 y 615 INP00,0 INP03,1 INP21,7 Entradas OUT00,0 OUT10,3 OUT63,7 Salidas SB2 si10 Bit del Sistema 2 y Entero del Sistema 10 TS2 Bits de Tiempo de Exploración 2 TP2 Valor del Temporizador Preestablecido 2 TC5 Valor del Temporizador Actual 2 SK sk Tecla de Ajuste PS ps Estado del PLC RTC ID rtc id CLOCK Item del Control del Reloj de Tiempo Real ID de la Unidad Item de exhibición del Reloj de Tiempo Real Los siguientes ejemplos son nombres de ítems inválidos: MI MB inp8,1 out08 Muy pocos dígitos para Dirección o Posición del Bit MI602400 Dirección fuera del Rango MN22 m001 Tipo de Item Inválido Monitoreo y Control de la Comunicación con el PLC Los siguientes son ítems adicionales ofrecidos por el servidor UNITRONICS para monitorear y controlar la comunicación con el PLC. STATUS Es un ítem discreto built-in, que indica el estado de la comunicación con el PLC. El ítem discreto (STATUS) es ajustado a 0 cuando la comunicación falla y ajustado a 1 cuando la comunicación Diciembre del 2004 IE-0502 44 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. es exitosa. El valor del ESTADO es ajustado a 0 después de 3 intentos fallidos consecutivos de comunicación con el PLC. Desde Excel, el estado de la comunicación puede ser leído entrando la siguiente formula en una celda: =UNITRONICS|tópico!STATUS, donde el tópico es el nombre del tópico configurado para el PLC. UPDATEINTERVAL El ítem UPDATEINTERVAL es un ítem entero tipo Lectura/Escritura usado para accesar el ajuste actual del intervalo a actualizar. Esto indica la petición actual del intervalo a actualizar (en milisegundos). El valor de este ítem puede ser leído por el OPC ó DDE. El cliente puede insertar nuevos valores a este ítem. El rango de valores válidos es desde 10 a 2147483647 milisegundos. El valor cero indica que no hay ítems actualizados en este tópico. Los comandos de escritura son todavía ejecutados (nuevos valores escribiéndose en el PLC) si el valor de UPDATEINTERVAL es 0. Nota: Por un valor de cero inserto al ítem UPDATEINTERVAL, un cliente puede parar todas las actividades de actualización en el tópico correspondiente sin tener ítems desactivos. MAXINTERVAL El ítem MAXINTERVAL es un ítem entero tipo sólo lectura usado para accesar el intervalo actualizado máximo medido (en milisegundos) de todos los ítems del tópico correspondiente para el último ciclo completo del sondeo. El rango de valores válidos es desde 0 a 2147483647 milisegundos. Los ítems UPDATEINTERVAL y MAXINTERVAL pueden ser usados para sintonizar el funcionamiento de comunicación. ITEMCOUNT El ítem ITEMCOUNT es un ítem entero de sólo lectura usado para accesar el número de ítems activos de un tópico correspondiente. El rango de valores válidos es desde 0 a 2147483647. ERRORCOUNT Diciembre del 2004 IE-0502 45 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. El ítem ERRORCOUNT es un ítem entero de sólo lectura usado para accesar el número de ítems activos con errores en un tópico correspondiente. El rango de valores válidos es desde 0 a 2147483647. ERRORITEMS El ítem ERRORITEMS es un ítem entero de sólo lectura y escritura (único por cada tópico) usado para accesar el total de números de ítems con nombre inválidos (estos ítems son reexpulsados por el servidor). El valor de los ERRORITEMS puede ser reajustado por la escritura de 0 a este ítem. El rango de valores válidos es desde 0 a 2147483647. WRITECOUNT El ítem WRITECOUNT es un ítem entero de sólo lectura usado para accesar el número de comandos escritos (mensajes) esperando la ejecución. El rango de valores válidos es desde 0 a 2147483647. Por ejemplo, en la siguiente manera, el ítem WRITECOUNT puede ser usado para evitar el incremento de memoria ocupada por comandos de escritura no ejecutados. activar el hot link con el ítem WRITECOUNT e iniciar a monitorear; activar el nuevo comando de escritura (por la introducción de un nuevo valor) sólo si el valor de WRITECOUNT viene a ser igual a 0, todos los comandos de escritura ejecutados y la memoria ocupada por ellos es liberada. SUSPEND Item discreto especial que puede ser usado para controlar la comunicación con un tópico separado. Si la aplicación cambia el valor de SUSPEND de 0 a 1, entonces la comunicación con el tópico es suspendida. Si el valor de SUSPEND es cambiado de nuevo a 0 la comunicación con el tópico es reasumida. Nota: Si el tópico es suspendido ajustando el valor de SUSPEND a 1, entonces el servidor vuelve a expulsar todo nuevo valor escrito a este tópico; ningún nuevo mensaje escrito es creado después de que SUSPEND ha cambiado de 0 a 1. Diciembre del 2004 IE-0502 46 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 3.4 Desarrollo del programa SCADA para la interfaz HMI Este programa SCADA fue desarrollado en la plataforma de programación Delphi Enterprise 5.0, utilizando leguaje Borland Pascal. Ya se mencionó un poco de las cualidades de esta plataforma en la sección 2.6, por lo que simplemente se discute sólo características propias del programa como tal. Como uno de los primeros problemas que dio la utilización de esta plataforma de programación fue que la versión no es la más actual en el mercado y los softwares de servidores OPC siguen actualizándose de manera no paralela con esta plataforma de programación, por lo que no se garantiza que Delphi importe todas las librerías de enlace dinámico (DLL) que existen. Debido a esta problemática la importación del DLL del servidor OPC de Unitronics no se pudo realizar, cuando mostró el primer intento fallido se optó por utilizar como cliente Excel por medio del protocolo de comunicación DDE, donde sus accesos de datos son muy conocidos y simples. Delphi posee la cualidad de crear aplicaciones Excel por debajo (se refiere a no ser percibido por el usuario), por lo que puede simular una celda, entre muchas otras cosas. Brevemente se da una descripción del programa. Primeramente el programa entra a una pantalla de conexión en donde por medio de objetos llamados TEdits, el usuario puede entrar ó cambiar la dirección en donde se encuentra el ejecutable del Servidor OPC de Unitronics y la unidad o tópico en que está configurado este; cuando el usuario se ha complacido, presiona un botón de OK y carga sus datos. El usuario puede seleccionar las modalidades de Nuevo, Abrir o Salvar que aparecen con los símbolos respectivos, o bien en la barra de herramientas, en Archivo. Un icono de un PLC aparece en rojo si no hay conexión con el PLC y el puerto RS232 por medio del bit de STATUS; en caso contrario, este icono aparecerá en color verde, y una barra de progreso se ejecuta mientras logra abrir Unitronics.exe (programa ejecutable del OPC Server). Un botón con un símbolo de hojas, sirve para crear lo que se conoce como TTabSheet, simplemente es una hoja vacía igual a la de conexión, que se crea dinámicamente, seguidamente aparece una ventana en donde solicita al usuario el nombre del proceso, si no es introducido Diciembre del 2004 IE-0502 47 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. escribe Proceso_# y un número de contador por defecto, esto con el fin de crear varios carpetas con diferentes estructuras emulando los departamentos o secciones de una planta. Después se selecciona un botón con un símbolo ?, el cual hace aparecer una ventana en donde muestra los diferentes nombres de los ítems del M90, que está compuesto por una lista denominada TListBox que contiene las iniciales de los nombres (MB, SI, etc), y un TEdit en donde solicita las direcciones respectivas. Aparece el rango de valores permitidos de cada elemento de la lista, al seleccionar el elemento. Otro TEdit muestra el contenido del registro al presionar el botón de probar y habilita un botón de crear. Otro TEdit es destinado para la etiqueta del registro, que es introducida por el usuario o aparece Registro_# y un número de contador por defecto, esto con el fin de identificar la relación de cada registro con el elemento de la planta. Cuando el usuario ha seleccionado el registro a crear, simplemente presiona el botón de crear y una ventana se abrirá con el mensaje de dar click al lugar donde desea el registro, en ese momento se activa el evento 23 OnMouseClick que ha sido heredado a la TTabSheet seleccionada en este instante, y este evento tiene como función seguir las coordenadas del mouse e introducirlas a variables, cuando el motón de mouse es presionado entra en acción el evento OnMouseDown que tiene como función capturar en las variables la posición en el instante respectivo. Seguidamente se da la creación dinámica de una etiqueta denominada TLabel, en donde su padre es la TTabSheet seleccionada o mejor dicho la que tiene el Foco, con las coordenadas seleccionadas anteriormente. Visualmente no hay nada más allá que lo que se acaba de mencionar, pero internamente el programa posee un procedimiento de un refrescador de datos denominado Timer que está constantemente cargando datos del servidor OPC por medio del DDE en Excel, pues estos datos son de carácter dinámico y ocupan ser actualizados, lo que hace necesitar mucha memoria en la ejecución del programa, que es incrementada con la cantidad de registros creados, por lo que dependiendo de la PC, pueden tener limitaciones con la cantidad de registros a crear. Otro aspecto que cabe mencionar es que por cada registro se necesita simular una celda de Excel. 23 Método de programación gráfica, que se designa como propiedad a algún objeto. Diciembre del 2004 IE-0502 48 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Al no poseer un evento dinámico de selección las etiquetas con el nombre y el contenido del registro, pues es un defecto del evento OnMouseDown, no se puede borrar en tiempo de ejecución, pero para compensar este defecto, se ha agregado un botón de deshacer, que libera la memoria ocupada por el último objeto dinámico creado, que en este caso puede ser una TTabSheet o un TLabel. De hecho el procedimiento de “Nuevo Programa” es iteración de liberación de memoria de todos los objetos dinámicos creados hasta el momento. Un arreglo de registros ha sido creado para almacenar la información, de todos los ítems dinámicos creados durante el programa, donde cada uno posee variables que guardan: el número de página, el nombre de la página en donde se encuentran (TTabSheet), el contenido de la etiqueta del registro, la fórmula en Excel asociada y las coordenadas X y Y de su posición. Con respecto a la función “Salvar”, ejecuta un procedimiento que escribe en un archivo de texto, designado con la extensión *.usd (proveniente de UniScada, el nombre del programa), escribe el contenido de los registros, complementariamente la función de Cargar o Abrir, lee del archivo de texto la información de los registros y empieza a crear dinámicamente TTabSheet y TLabel, asignándole a cada uno la información contenida en el archivo. Un programa por aparte ha sido creado, el cual se ha llamado UniHMI, con el fin de servir únicamente para cargar la información configurada con el programa UniScada. Su propósito es simplemente mostrar una aplicación específica para una planta determinada, por lo que no existe en el procedimiento de “Salvar”, “Nuevo Programa”, “Crear Registros” o “Procedimientos”, “Deshacer”, ni los anteriormente mencionados. A continuación se muestran unos gráficos de las pantallas de cada aplicación. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 49 Figura N°3.5 Pantalla de Conexión de UniScada Figura N°3.6 Pantalla de Conexión de UniHMI Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 50 CAPÍTULO 4: Conclusiones y Recomendaciones 4.1 Conclusiones • Se Desarrolló una Interfaz Humano-Máquina (HMI) para la familia de PLC’s Unitronics con la creación de las aplicaciones UniScada y Uni_HMI. • Se practicó en el desarrollo de aplicaciones en Borland Delphi. La plataforma de programación Delphi Enterprise 5.0, con lenguaje Borlad Pascal, es muy versátil y útil para el desarrollo de aplicaciones HMI. • Se estudió la arquitectura de los PLC’s Unitronics. Son máquinas de alta facilidad de manipulación y acceso de datos en la comunicación PC-PLC, protocolos de comunicaciones flexibles y habilidades programables de trabajos múltiples, pero sobre por tener estructuras abiertas al desarrollo de aplicaciones HMI. Además de sus funciones de amigables de hardware, entre otras. • Se Desarrolló una aplicación de comunicación entre Delphi y el OPC Server de Unitronics. Vía Excel primeramente. • Se Realizó una aplicación de lectura de registros del PLC. • Se Desarrolló la aplicación HMI de despliegue de registros. Diciembre del 2004 IE-0502 51 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 4.2 Recomendaciones • Establecer una comunicación DDE utilizando a Delphi como Cliente y no a Excel. • Establecer una comunicación con los dispositivos de la serie Vision. • Desarrollar una aplicación de escritura a registros. • Crear variables en archivos para procesamientos de históricos. • Crear un manejador de alarmas. • Desarrollar una aplicación de graficación de tendencia de variables. • Implementar gráficos para animación de la aplicación HMI. Diciembre del 2004 IE-0502 52 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. BIBLIOGRAFÍA Páginas web: 1. Grupo Master. “El PLC”. http://www.grupomaser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm. 2. Ubiria, M. “Que es un PLC”. http://www.euskalnet.net/m.ubiria/ARTICULOS.htm#Articulos_2001_01. 3. Figueras, E. “SCADA”. http://personal.redestb.es/efigueras/. 4. Universidad de Concepción. “Protocolos”. http://inf.udec.cl/~yfarran/webredes/protocolos/redes03.htm. 5. Calderón, J. “LABORATORIO VIRTUAL PARA LA ENSEÑANZA DE AUTOMATIZACIÓN E INSTRUMENTACIÓN INDUSTRIAL”. http://www.ing.ula.ve/~jesusc/labvid.htm. 6. Montero, R. “AUTOCAD 13 para Windows soporta OLE”. http://personales.unican.es/togoresr/r40p64.htm. 7. I España. “OLE en Windows”. http://www.iespana.es/perl-es/OLE.htm. 8. Martínez, M. “Cliente OPC realizado en Visual Basic .NET “. http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art123.asp. 9. Omron España. “servidor OPC”. https://www.software.omron.es/software/cx/pages/cx_comun.jsp?id=6. 10. Sananes, M. “Delphi”. http://afrodita.faces.ula.ve/MartaSananes/Cursos/Delphi/.. 11. Aulaware. “Delphi 5”. http://leo.worldonline.es/acanudas/pdf/dp5intro.pdf. 12. SQLMax Connections. “ActiveX”. http://www.sqlmax.com/ado.asp. 13. Unitronics. “Productos Unitronics”. http://www.unitronics.com. Manuales: 14. Unitronics Co. “Vision 230 OPLC User Guide”, 2002. Traducido por Barrantes, A. 15. Unitronics Co. “OPC Server Help”, 2002. Traducido por Barrantes, A. Diciembre del 2004 IE-0502 53 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. ANEXOS UniScada y Uni_HMI Manual del Usuario Elaborado por: Alexander Barrantes Muñoz Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 54 Tabla de Contenidos Introducción...……………...…………………………………….…………………3 Requerimientos Mínimos...………………...……………..………………………..3 Instalación…….………………………..……...………………....…………………4 Descripción del Ambiente Gráfico de UniScada...…………..…..………………...5 Descripción de los iconos de la barra de herramientas………………..…..………………5 Descripción de la pantalla de Conexión……………………..………..…………………..6 Ejecución Offline de UniScada...…...……………………..……………………….7 Ejecución Online de UniScada.……...………….….……………………………..11 Ejecución Uni_HMI………………………………..……………………………..13 Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 55 Introducción Este programa tiene como objetivo servir de interfaz HMI (Humano-maquina), es una aproximación y un ejemplo de los programas que existen en el mercado denominados “SCADA” (software supervisor que realiza la adquisición de datos desde PLC hacia una PC comúnmente). Este software esta dirigido únicamente a los modelos M90 y Vision 230 de la familia de PLC’s (Controladores Lógicos Programables) de la compañía Unitronics. Su funcionamiento se basa en la utilización de enlaces OLE (enlace e inclusión de objetos) de Windows, estableciendo una comunicación entre un servidor OPC (OLE para control de procesos) de la compañía Unitronics y como cliente Excel, que es controlado por debajo por esta aplicación. Por lo que por medio del protocolo de comunicación DDE (intercambio de datos dinámico), es posible que se puedan leer y escribir los registros internos del PLC. Esta clase de programas (HMI) permiten una forma confortable, amigable y gráfica de monitorear los procesos industriales controlados por un PLC, desde la comodidad de su PC, lo que ahorra trabajo, tiempo y dinero. En particular este programa posee una fase de configuración y creación, en donde se determina el modelo de PLC a usar en la aplicación HMI, los registros a visualizar y otros aspectos importantes, y una segunda fase solo de monitorear que tiene como objetivo utilizar online lo creado en la primera fase. Requerimientos Mínimos • • • • • Sistema Operativo: Windows 95 en adelante. Programas Complementarios: o Excel 97 en adelante o Servidor OPC de Unitronics PLCs: M90 o Vision 230 de Unitronics. Puertos de la PC: RS232. Cable de Comunicación: MJ10-22-CS25 de Unitronics. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 56 Instalación Antes de ejecutar el programa, se debe instalar el Servidor OPC de Unitronics, en donde después de colocar el disco y dar un click en “OPC Server Install”, automáticamente se dan los pasos para su instalación. Recuerde definir los términos en el Servidor OPC, tal como se indica en la sección de la ayuda llamada “Configuring the UNITRONICS Server”. Para instalar tanto el programa UniScada, como Uni_HMI, simplemente se copian las carpetas del disco que contienen dichos nombres en un lugar en la PC, seleccionado según su comodidad y se da un click en los iconos UniScada o en Uni_HMI, según se desee, para su ejecución (ver figura Nº 1). Figura Nº 1. Iconos de Aplicaciones UniScada y Uni_HMI. Diciembre del 2004 IE-0502 57 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Descripción del Ambiente Gráfico de UniScada Descripción de los iconos de la barra de herramientas El Programa se inicia en una pantalla de Conexión, el cual posee una barra de herramientas, que esta compuesto por 6 botones, a continuación se hace una descripción pequeña de cada uno de ellos, empezando de izquierda a derecha, algunos son muy familiares a los que comúnmente se utilizan: Icono Descripción “Nuevo Proyecto*”, Inicializa la aplicación, borrando todo lo que ha sido confeccionado hasta el momento, tiene sentido su ejecución cuando ya otra aplicación ha sido creada y se desea empezar otra nueva, o cuando está abierta una aplicación guardada, inicialmente aparece deshabilitado. “Abrir Archivo*”, Abre la información de un proyecto ya creado con la aplicación UniScada, los cuales se guardan en archivos cuyas extensiones son “.usd”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se guardo el archivo en la PC. Solo visualiza los archivos cuyas extensiones son usd. “Guardar Archivo*”, Inicialmente aparece deshabilitado y cambia su estado cuando se crea algún elemento con la aplicación UniScada, su función es la de guardar en un archivo con extensión “.usd”, (“UniHMI_1.usd” por defecto), lo confeccionado con la aplicación UniScada. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se quiere guardar el archivo en la PC. “Nueva Página”, Su función es crear una página en blanco, a modo de carpeta en donde se pueda insertar los registros del PLC, de manera que sea la estructura que los contiene, se pueden crear las que se desee y van a estar identificadas con una cejilla cuyo nombre se relaciona con el conjunto de registros contenidos en ella. En donde su manera de selección es dar click en la cejilla respectiva. Activa una pantalla que le pide al usuario el nombre del proceso (ver figura Nº 4), identificador asignado a la cejilla que se va a crear, en donde si este no es digitado aparecerá por defecto con “Proceso_#”, el signo “#” representa el número de página que han sido creadas hasta el momento. La última página creada se selecciona automáticamente por defecto. “Nuevo Registro”, Su función es seleccionar el registro del PLC a insertar en la página seleccionada. Si no ha sido creada alguna página, ejecuta la función “Nueva Página” y solo servirá hasta que este procedimiento se realice. Activa una pantalla de selección de registro**, seguido a esto activa una pantalla indicando que se haga un click en el lugar dentro de la página seleccionada que se quiere insertar (ver figura Nº 4). La posición en donde se hace click es justificada vertical y horizontalmente en un rango de aproximadamente 1cm2. “Deshacer”, deshace o borra el último elemento que se ha creado, puede ser una página o un registro. Se puede ejecutar cuantas veces se desee pero se limitará hasta que no aparezca ningún elemento creado en el proyecto. *Estos procedimientos también aparecen con sus respectivos nombres en la sección de Archivo en la barra de menú principal (ver figura Nº 2). **Nota: Se especificará con detalle en las secciones Ejecución Offline y Online de UniScada. El programa posee algunas restricciones por seguridad a que este no presente errores en tiempo de ejecución, tales como la deshabilitación de la operación de abrir, si se ha empezado ya a trabajar (si ya hay por lo menos una página creada), entre otras. Diciembre del 2004 IE-0502 58 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Figura Nº 2 Barra de Menú Principal de UniScada Figura Nº 3 Pantallas de Abrir y Guardar de UniScada Figura Nº 4 Pantalla de Nueva Página y de Advertencia de selección de posición de los registros de UniScada Descripción de la pantalla de Conexión La pantalla de conexión aparece en una página igual a las que se crean para la inserción de los registros del PLC, con la diferencia que la cejilla que la identifica viene con la etiqueta “Conexión” (Ver figura Nº 5). Además posee los siguientes elementos que se utilizan para la conexión entre el PLC y el servidor OPC : 1) Dirección del Ejecutable (Servidor OPC de Unitronics): Aquí se selecciona la ubicación en la PC en donde se ha instalado el servidor OPC de Unitronics, la cual trae la dirección que posee el OPC Server por defecto a la hora de instalarse, en caso de que en su instalación se haya modificado esta dirección, se necesita cambiar. No es relevante esta sección si se trabaja en offline. 2) Nombre del Tópico: En esta sección se selecciona el nombre del tópico que establece la conversación DDE, o el que ha sido configurado en la sección “definición del Tópico” (topic definition) en el OPC Server de Unitronics. Aparece la definición del tópico que tiene el OPC Server de Unitronics por defecto (unit1). Esta sección es de mucha importancia para trabajar en offline o en online. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 59 3) Modelo del PLC: En esta sección se escoge el tipo de PLC con que se quiere trabajar, como UniScada esta dirigido a los PLC de Unitronics, M90 y Vision 230, estas son las dos opciones en que se puede utilizar el programa, nótese que se debe dar un click a la opción que se desea, en caso contrario se trabajará con el Vision 230 por defecto. Después de que se eligieron los puntos anteriores, se puede elegir el modo de ejecución del programa de forma simple, si se quiere trabajar online se presiona el botón OK, aceptando las disposiciones seleccionadas y se espera a que UniScada abra el OPC Server de Unitronics, por lo que mientras que este paso se realiza se mostrará gráficamente una barra de progreso que lleva de encabezado lo siguiente “Conectando...”, cuando este paso termina, aparece un icono minimizado del OPC Server y el icono de un PLC que esta en la esquina superior derecha cambiará de color de roja a verde (ver figura Nº 5). Seguidamente se crea una Nueva Página y se comienza la configuración de los diferentes registros, como se explica más adelante. Para trabajar offline se obvian los pasos anteriores y se empiezan a trabajar simplemente dando un click al botón de Nueva Página, al igual que en modo online, se comienza la configuración de los diferentes registros. Para evitar conflictos entre estos modos de operación, cuando se empieza a trabajar offline se deshabilita el botón de conexión (OK) y así no poderse pasar a trabajar online, o de igual manera el programa restringe la operación en offline si se empieza a trabajar online. Figura Nº 5 Pantalla de Conexión de UniScada. Diciembre del 2004 IE-0502 60 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Ejecución Offline de UniScada Los pasos para trabajar en modo offline en un Nuevo Proyecto se citan en forma puntal de forma siguiente: 1) Ejecute la aplicación UniScada (ver figura Nº 1). 2) Digite el nombre del tópico que configuró o quiere configurar en el Servidor OPC de Unitronics. 3) Elija el modelo del PLC Unitronics, dando un click al nombre del PLC que va a utilizar (M90 ó Vision 230). De no hacer esto el programa entenderá que se trabaja con el Vision 230. 4) Seleccione el icono de “Nueva Página” y digite el nombre del Proceso (etiqueta que identifica la cejilla de la subsección del proyecto), generalmente tiene como objetivo identificar el proceso de control asociado con los registros que se desean monitorear en una sección específica, Si no digita ninguna el programa lo identificará como Proceso_1. 5) Seleccione el icono de “Nuevo Registro”. Esto hará aparecer una pantalla de configuración en donde define el registro a monitorear que será insertado en la página seleccionada (La página se selecciona dando un click a la cejilla con una etiqueta asociada, o si no es automáticamente selecciona la última página creada por defecto). Como se muestra en la figura Nº 6 se puede elegir entre una lista diferentes registros dando un click en el nombre del ítem del registro, una vez realizado esta acción aparece el rango de valores permitidos para dicho registro, tenga cuidado de no digitar un valor fuera del rango respectivo, pues causaría errores. Inclusive aún digitando un valor permitido dentro del rango que aparece, podría haber algún error, pues este rango representa los valores posibles pero no los habilitados. Figura Nº 6 Ejemplo #1 de la Pantalla de Configuración de Registros de UniScada. Nótese que según la forma de direccionamiento del Ítem de un registro determinado, habilita o deshabilita los espacios para su direccionamiento correcto. Por ejemplo si se quiere saber el estado de la conexión del PLC, solo es necesario marcar el nombre STATUS sin necesidad de agregar otra indicación. También se da el caso de la habilitación o deshabilitación de estos espacios según si son pertenecientes o carentes del modelo del PLC seleccionado. La Tabla siguiente específica las opciones de los diferentes registros que se pueden elegir, además del modelo del PLC para el que están activos. Diciembre del 2004 IE-0502 61 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Nombre Descripción del Item Modelo de PLC M90 Vision 230 MB Bit de Memoria X X MI Entero de Memoria X X ML Entero Largo de Memoria X MD Entero Doble de Memoria X INP Entrada* X X OUT Salida* X X SB Bit del Sistema X X SI Entero del Sistema X X SL Entero Largo del Sistema X SD Entero Doble del Sistema X TC Temporizador Actual X X TP Temporizador Preestablecido X X TS Bit de Tiempo de exploración X X CC Contador Actual X CP Contador Preestablecido X CS Bit del contador de Exploración X ID ID de la Unidad X X STATUS Estado de la conexión X X UPDATEINTERVAL Ajuste actual del intervalo a actualizar X X MAXINTERVAL Intervalo actualizado máximo medido X X ITEMCOUNT Items activos X X ERRORITEMS Números de ítems con nombre inválidos X X WRITECOUNT Número de comandos escritos esperando la ejecución X X SUSPEND Suspención de la comunicación X X *Para el caso del M90, estos registros se direccionan de manera diferente que con el Vision 230 y todos los demás registros (ver figura Nº 7). Además de lo ya descrito esta pantalla de configuración posee una etiqueta que se le designará al registro seleccionado, si no es digitada el programa seleccionará automáticamente una etiqueta con el nombre “Registro_#”, en donde # es el números de registros creados hasta el momento. Diciembre del 2004 IE-0502 62 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Figura Nº 7 Ejemplo #2 de la Pantalla de Configuración de Registros de UniScada. Finalmente cuando se ha terminado toda la configuración del registro respectivo, se le selecciona el botón de crear aceptando lo anteriormente definido. Seguidamente se indica que esta listo para seleccionar la posición en donde se insertará el registro y se da un click en donde se quiere la misma. 6) Repetir pasos 4) y 5) a su preferencia. Nótese que cada etiqueta de los distintos registros aparecen en las posiciones elegidas (ver figura Nº 8). 7) Para Guardar los cambios creados y el nuevo proyecto realizado seleccione el icono de “Guardar Archvo “, en donde guarda en un archivo con extensión “.usd”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se quiere guardar el archivo en la PC, en donde se digita el nombre que se le quiere dar al archivo (si no es digitado se guarda con el nombre de “UniHMI_1.usd”). 8) Para Inicializar la aplicación, borrando todo lo que ha sido confeccionado hasta el momento, seleccione “Nuevo Proyecto”. 9) Para Abrir un proyecto ya creado, seleccione la opción “Abrir Archivo”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se guardo el archivo en la PC. Solo visualiza los archivos cuyas extensiones son usd. 10) Seleccione la opción de “Salir” del menú principal para salir del programa y cerrar todas las aplicaciones complementarias al mismo. Figura Nº 8 Ejemplo #1 de un Proyecto de UniScada. Diciembre del 2004 IE-0502 63 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. Ejecución Online de UniScada Los pasos para trabajar en modo online en un Nuevo Proyecto se citan en forma puntal de forma siguiente: 1) Ejecute la aplicación UniScada (ver figura Nº 1). 2) Digite la dirección en la PC del ejecutable (OPC Server de Unitronics), o el programa elegirá la que posee el OPC Server por defecto a la hora de instalarse, en caso de que en su instalación se haya modificado esta dirección, se necesita cambiar. 3) Digite el nombre del tópico que configuró o quiere configurar en el Servidor OPC de Unitronics. 4) Elija el modelo del PLC Unitronics, dando un click al nombre del PLC que va a utilizar (M90 ó Vision 230). De no hacer esto el programa entenderá que se trabaja con el Vision 230. 5) Presionar el botón OK de la pantalla de conexión y se espera a que UniScada abra el OPC Server de Unitronics, por lo que mientras que este paso se realiza se mostrará gráficamente una barra de progreso que lleva de encabezado lo siguiente “Conectando...”, cuando este paso termina, aparece un icono minimizado del OPC Server y el icono de un PLC que esta en la esquina superior derecha cambiará de color de roja a verde (ver figura Nº 5). 6) Seleccione el icono de “Nueva Página” y digite el nombre del Proceso (etiqueta que identifica la cejilla de la subsección del proyecto), generalmente tiene como objetivo identificar el proceso de control asociado con los registros que se desean monitorear en una sección específica, Si no digita ninguna el programa lo identificará como Proceso_1. 7) Seleccione el icono de “Nuevo Registro”. Esto hará aparecer una pantalla de configuración en donde define el registro a monitorear que será insertado en la página seleccionada (La página se selecciona dando un click a la cejilla con una etiqueta asociada, o si no es automáticamente selecciona la última página creada por defecto). Como se muestra en la figura Nº 9 se puede elegir entre una lista diferentes registros dando un click en el nombre del ítem del registro, una vez realizado esta acción aparece el rango de valores permitidos para dicho registro, tenga cuidado de no digitar un valor fuera del rango respectivo, pues causaría errores. Inclusive aún digitando un valor permitido dentro del rango que aparece, podría haber algún error, pues este rango representa los valores posibles pero no los habilitados. Figura Nº 9 Ejemplo #3 de la Pantalla de Configuración de Registros de UniScada. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 64 Nótese que según la forma de direccionamiento del Ítem de un registro determinado, habilita o deshabilita los espacios para su direccionamiento correcto. Por ejemplo si se quiere saber el estado de la conexión del PLC, solo es necesario marcar el nombre STATUS sin necesidad de agregar otra indicación. También se da el caso de la habilitación o deshabilitación de estos espacios según si son pertenecientes o carentes del modelo del PLC seleccionado. La Tabla de la sección de Ejecución offline de UniScada específica las opciones de los diferentes registros que se pueden elegir, además del modelo del PLC para el que están activos. También se muestra en la figura Nº 8 un botón con “…”, el cual tiene como función probar los registros antes de insertarlos, no se puede insertar ningún registro si no ha sido antes probado en modo online, pues no se habilita el botón de crear, su contenido se refresca automáticamente en la ventana contigua izquierda, según su selección. Además de lo ya descrito esta pantalla de configuración posee una etiqueta que se le designará al registro seleccionado, si no es digitada el programa seleccionará automáticamente una etiqueta con el nombre “Registro_#”, en donde # es el números de registros creados hasta el momento. Finalmente cuando se ha terminado toda la configuración del registro respectivo, se le selecciona el botón de crear aceptando lo anteriormente definido. Seguidamente se indica que esta listo para seleccionar la posición en donde se insertará el registro y se da un click en donde se quiere la misma. 8) Repetir pasos 4) y 5) a su preferencia. Nótese que cada etiqueta de los distintos registros aparecen con sus respectivos contenidos en las posiciones elegidas. 9) Para Guardar los cambios creados y el nuevo proyecto realizado seleccione el icono de “Guardar Archvo “, en donde guarda en un archivo con extensión “.usd”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se quiere guardar el archivo en la PC, en donde se digita el nombre que se le quiere dar al archivo (si no es digitado se guarda con el nombre de “UniHMI_1.usd”). 10) Para Inicializar la aplicación, borrando todo lo que ha sido confeccionado hasta el momento, seleccione “Nuevo Proyecto”. 11) Para Abrir un proyecto ya creado, seleccione la opción “Abrir Archivo”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se guardo el archivo en la PC. Solo visualiza los archivos cuyas extensiones son usd. 12) Seleccione la opción de “Salir” del menú principal para salir del programa y cerrar todas las aplicaciones complementarias al mismo Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 65 Ejecución de Uni_HMI Los pasos para trabajar con el programa Uni_HMI se citan en forma puntal de forma siguiente: 1) Ejecute la aplicación Uni_HMI (ver figura Nº 1). 2) Digite la dirección en la PC del ejecutable (OPC Server de Unitronics), o el programa elegirá la que posee el OPC Server por defecto a la hora de instalarse, en caso de que en su instalación se haya modificado esta dirección, se necesita cambiar. 3) Digite el nombre del tópico que configuró o quiere configurar en el Servidor OPC de Unitronics. 4) Presionar el botón OK de la pantalla de conexión y se espera a que Uni_HMI abra el OPC Server de Unitronics, por lo que mientras que este paso se realiza se mostrará gráficamente una barra de progreso que lleva de encabezado lo siguiente “Conectando...”, cuando este paso termina, aparece un icono minimizado del OPC Server y el icono de un PLC que esta en la esquina superior derecha cambiará de color de roja a verde (ver figura Nº 10). Solamente finalizado este paso podrá seleccionarse la opción de “Abrir Archivo”. 5) Para Abrir un proyecto ya creado, presione el botón de “Abrir”. Activa una pantalla buscadora (ver figura Nº 3) para poder seleccionar la carpeta en donde se guardo el archivo en la PC. Solo visualiza los archivos cuyas extensiones son usd. 6) Seleccione la opción de “Salir” dando un click en el botón de salir en la esquina superior derecha de la pantalla para salir del programa y cerrar todas las aplicaciones complementarias al mismo Figura Nº 10 Pantalla de Conexión de Uni_HMI. Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. 66 CODIGO FUENTE ToolButton5: TToolButton; SaveDialog: TSaveDialog; N_Pag: TToolButton; interface ToolButton6: TToolButton; procedure FileNew1Execute(Sender: TObject); uses Windows, SysUtils, Classes, Graphics, Forms, procedure FileOpen1Execute(Sender: TObject); Controls, Menus, procedure HelpAbout1Execute(Sender: TObject); StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, procedure FileExit1Execute(Sender: TObject); ComCtrls, StdActns, procedure Nueva_PaginaClick(Sender: TObject); ActnList, ToolWin, ImgList, isapiapp; procedure N_PagClick(Sender: TObject); procedure DeshacerClick(Sender: TObject); type procedure Registros_GralClick(Sender: TObject); TMainForm = class(TForm) procedure abilitar(modificado :boolean); MainMenu1: TMainMenu; procedure FileSaveItemClick(Sender: TObject); File1: TMenuItem; procedure ToolButton2Click(Sender: TObject); FileNewItem: TMenuItem; procedure FormCreate(Sender: TObject); FileOpenItem: TMenuItem; private Help1: TMenuItem; { Private declarations } N1: TMenuItem; public FileExitItem: TMenuItem; { Public declarations } HelpAboutItem: TMenuItem; end; OpenDialog: TOpenDialog; FileSaveItem: TMenuItem; var StatusBar: TStatusBar; MainForm: TMainForm; ActionList1: TActionList; Contaetiq, contnew : integer; EditCut1: TEditCut; EditCopy1: TEditCopy; implementation EditPaste1: TEditPaste; FileNew1: TAction; {$R *.DFM} FileSave1: TAction; FileExit1: TAction; uses ChildWin, About, vpal, configuracion, procesos; FileOpen1: TAction; { FileSaveAs1: TAction; WindowCascade1: TWindowCascade; } WindowTileHorizontal1: TWindowTileHorizontal; procedure TMainForm.FileNew1Execute(Sender: WindowArrangeAll1: TWindowArrange; TObject); WindowMinimizeAll1: TWindowMinimizeAll; var HelpAbout1: TAction; i : integer; FileClose1: TWindowClose; WindowTileVertical1: TWindowTileVertical; begin ToolBar2: TToolBar; for i:= (V_Ppal.ComponentCount - 1) downto 15 ToolButton1: TToolButton; do ToolButton2: TToolButton; begin ToolButton3: TToolButton; DeshacerClick(Sender); ToolButton9: TToolButton; end; ToolButton7: TToolButton; abilitar(false); ImageList1: TImageList; ToolButton1.Enabled := true; Deshacer: TToolButton; FileOpenItem.Enabled := true; Registros_Gral: TToolButton; unit Main; Diciembre del 2004 IE-0502 ToolButton9.Enabled := false; FileNewItem.Enabled := false; contnew := 0; end; { } procedure TMainForm.FileOpen1Execute(Sender: TObject); var Arch : TextFile; temp, auxi : integer; begin OpenDialog.Execute; AssignFile(Arch,(Opendialog.FileName)); Reset(Arch); temp := 1; while (not(EOF(Arch))) do begin Readln(Arch,reg[temp].numpag); Readln(Arch,reg[temp].pagina); Readln(Arch,reg[temp].nombre); Readln(Arch,reg[temp].Contenido); Readln(Arch,reg[temp].posx); Readln(Arch,reg[temp].posy); Readln(Arch); if (reg[temp].numpag > auxi) then begin auxi := reg[temp].numpag; V_ppal.CargarNuevaPag(reg[temp].pagina); end; V_ppal.CargarNuevoElemento(reg[temp].posx,reg[te mp].posy,reg[temp].nombre); if (vpal.activado = true) then vpal.WorkSt.Cells.Item[temp,reg[temp].numpag +1] := reg[temp].contenido; temp := temp +1; end; closefile(Arch); ToolButton1.Enabled := false; FileOpenItem.Enabled := false; ToolButton9.Enabled := true; FileNewItem.Enabled := true; end; { } 67 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. procedure TMainForm.HelpAbout1Execute(Sender: TObject); begin AboutBox.ShowModal; end; { } procedure TMainForm.FileExit1Execute(Sender: TObject); var cerrar:integer; begin cerrar:=FindWindow(nil,'UNITRONICS'); if (cerrar = 0) then else SendMessage(cerrar,WM_CLOSE,0,0); if (Vpal.activado = true) then V_Ppal.EA1.Disconnect; Close; end; { } procedure TMainForm.Nueva_PaginaClick(Sender: TObject); begin V_Ppal.show; end; { } procedure TMainForm.N_PagClick(Sender: TObject); begin if (contnew = 0) then begin ToolButton1.Enabled := false; FileOpenItem.Enabled := false; end; contnew := contnew + 1; {Crear una nueva Página} if (vpal.activado = false) then V_Ppal.OK.Enabled := false; V_Ppal.NuevaPgina1Click(self); ToolButton9.Enabled := true; FileNewItem.Enabled := true; end; { Diciembre del 2004 IE-0502 68 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. } procedure TMainForm.DeshacerClick(Sender: TObject); var i : integer; objeto : TObject; begin {Proceso para Undo} if ((V_Ppal.ComponentCount - 1) > 15) then begin i:= V_Ppal.ComponentCount-1; {Detección de tipo de elemento a borrar} {Si es un Hoja} if ((V_Ppal.Components[i] is TTabSheet) and (vpal.numpag > 0)) then vpal.numpag := vpal.numpag -1 else {Si es un Label} if ((V_Ppal.Components[i] is TLabel) and (vpal.contreg > 0)) then begin vpal.reg[contreg].numpag := 0; vpal.contreg := vpal.contreg - 1; end; {Eliminar el elemento} objeto := (V_Ppal.Components[i] as Tobject); objeto.Free; end; end; { Reliza: Llama a el dialogo de Configuración Recibe: ninguno Evia: ninguno } procedure TMainForm.Registros_GralClick(Sender: TObject); begin if (vpal.activado = false) then V_Ppal.OK.Enabled := false; Config.Show; end; procedure TMainForm.abilitar(modificado : boolean); begin if (modificado = true) then begin FileSave1.Enabled := true; FileSaveItem.Enabled := true; ToolButton2.Enabled := true; end else begin FileSave1.Enabled := false; FileSaveItem.Enabled := false; ToolButton2.Enabled := false; end; end; {Fin del programa} procedure TMainForm.FileSaveItemClick(Sender: TObject); var Arch : TextFile; temp : integer; begin SaveDialog.Execute; assignfile(Arch,(SaveDialog.FileName)+'.usd'); rewrite(Arch); for temp := 1 to vpal.contreg do begin writeln(Arch,vpal.reg[temp].numpag); writeln(Arch,vpal.reg[temp].pagina); writeln(Arch,vpal.reg[temp].nombre); writeln(Arch,vpal.reg[temp].contenido); writeln(Arch,vpal.reg[temp].posx); writeln(Arch,vpal.reg[temp].posy); writeln(Arch); end; closefile(Arch); end; procedure TMainForm.ToolButton2Click(Sender: TObject); begin FileSaveItemClick(Sender); end; procedure TMainForm.FormCreate(Sender: TObject); begin contnew := 0; end; end. Diciembre del 2004 IE-0502 69 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. unit vpal; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, Excel97, ComCtrls, StdCtrls, OleServer, ShellApi, ExtCtrls, jpeg, syncobjs; type TV_ppal = class(TForm) PageCPpal: TPageControl; Conexion: TTabSheet; OK: TButton; Direccion: TEdit; Unidad: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; EA1: TExcelApplication; GroupBox1: TGroupBox; PBar: TProgressBar; Image2: TImage; Temporizador: TTimer; ListBox: TListBox; ImagenDes: TImage; ImagenCon: TImage; LModelo: TLabel; Modelo: TListBox; procedure Salir1Click(Sender: TObject); procedure OKClick(Sender: TObject); procedure CancelClick(Sender: TObject); procedure TemporizadorTimer(Sender: TObject); procedure NuevaPgina1Click(Sender: TObject); procedure CrearNuevaPag(); procedure Press_Clic(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Procedure CargarNuevaPag(nombre : string); Procedure CargarNuevoElemento(X,Y :integer; Nom : string); Function NuevaCorde(cord :integer): integer; private { Private declarations } public { Public declarations } end; type registro = record numpag : integer; {Contiene el numero de página} pagina : string; {Contiene el nombre de la pagina} nombre : string; {lleva el nombre del item} contenido : string; {lleva la funcion para conexion} posx, posy : integer; {coordenadas del item} end; var V_ppal: TV_ppal; {Conexion} WorkBk : _WorkBook; WorkSt : _WorkSheet; IIndex : OleVariant; {Datos de Usuario} Direc : Pchar; { Dirección Física del Archivo} Unid, nombrepag, nomlabel, formula : String; { Unidad a la cual se va a conectar} cont, Suspencion, Estado : integer; { Estado de la conecxion} est, activo, activado: boolean; {estados del reloj para OPC Server} numpag: Integer; {almacena el numero de pagina} reg : array [1..100] of registro; {} nuevo, contreg : integer; posx, posy : integer; implementation uses procesos, main; {$R *.DFM} procedure TV_ppal.Salir1Click(Sender: TObject); begin V_ppal.Close; {Cerrar el sistema} end; procedure TV_ppal.OKClick(Sender: TObject); var buscar : Integer; Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. begin numpag := 1; Direc := Addr(Direccion.Text[1]); { Cargar el nombre de la apliucación} Unid := Unidad.text; { Cargar la unidad a ejecutar} ShellExecute(V_ppal.Handle,'open',Direc,nil,nil,SW_ SHOWMINIMIZED); { Ejecutar el metodo de conexión} While (activo = false) do begin { Metodo para optener los datos del PLC} buscar:=FindWindow(nil,'UNITRONICS'); if (activo <> true) then begin if ((cont mod 10000) = 0) then PBar.StepIT; cont := cont + 1; end; If (buscar<>0) then begin activo := true; cont := 0; contreg := 0; EA1.Connect; EA1.Workbooks.Add(xlWBatWorkSheet,0); WorkBk := EA1.Workbooks.Item[1]; WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; end; end; { Si esta desconectado muesta desconectado, pero si lo esta muesta Conectado} end; procedure TV_ppal.CancelClick(Sender: TObject); begin V_ppal.Close; end; procedure TV_ppal.TemporizadorTimer(Sender: TObject); var pag, I, aux, contador : integer; Selec : TLabel; begin 70 if (activo = true) then begin if (activado = true) then begin WorkSt.Cells.Item[1,1] := '=Unitronics|'+Unid+'!STATUS'; if (est = True) then begin Estado := integer(WorkSt.Cells.Item[1,1]); if (Estado = 0) then begin ImagenDes.Visible := True; ImagenCon.Visible := False; end else begin ImagenDes.Visible := False; ImagenCon.Visible := True; end; {Parte del timer para jalar la info de los Labels} aux := 1; Listbox.Items.Clear; for I := V_Ppal.ComponentCount-1 downto 15 do begin if (V_Ppal.Components[I] is TLabel) then ListBox.Items.InsertObject(0, V_Ppal.Components[I].Name, V_Ppal.Components[I] as TObject); end; pag := PageCPpal.ActivePageIndex; for contador := 0 to ListBox.Items.Count - 1 do begin if (ListBox.Items.Objects[contador] is TLabel) then begin Selec := (ListBox.Items.Objects[contador] as TLabel); Selec.Caption := reg[aux].nombre+#13+string(WorkSt.Cells.Item[aux, pag+1]); Selec.Alignment :=tacenter; aux := aux + 1; end; end; end else est := true; Diciembre del 2004 IE-0502 71 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. end else activado := true; end; end; procedure TV_ppal.NuevaPgina1Click(Sender: TObject); begin // Crear una página nueva Nombre_proceso.Show; end; Procedure TV_ppal.CrearNuevaPag(); begin main.MainForm.abilitar(true); with PageCPpal do with TTabSheet.Create(Self) do begin PageControl := PageCPpal; Name := 'Proceso_' + IntToStr(Pages[numpag].PageIndex); Caption := nombrepag; numpag := numpag + 1; OnMouseDown := Press_Clic; end; if (activo = true) then PageCPpal.ActivePageIndex:= (PageCPpal.Pages[numpag-1].PageIndex) else PageCPpal.ActivePageIndex:= (PageCPpal.Pages[numpag].PageIndex) end; Procedure TV_ppal.CargarNuevaPag(nombre : string); begin main.MainForm.abilitar(true); with PageCPpal do with TTabSheet.Create(Self) do begin PageControl := PageCPpal; Name := 'Proceso_' + IntToStr(Pages[numpag].PageIndex); Caption := nombre; OnMouseDown := Press_Clic; end; PageCPpal.ActivePageIndex:= (PageCPpal.Pages[numpag].PageIndex); numpag := numpag + 1; end; { Realiza: Captura los datos de la coordenadas del mouse en el lugar en que se dio el clic, muestra un mensage de la localizacion del puntero del muose. Envia: nada. Recibe: Un objeto, el boton precionado, las coordenadas X Y y el estado. } procedure TV_ppal.Press_Clic(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var hoja : TTabSheet; begin posy := Y; posx := X; if (nuevo = 1) then begin nuevo := 0; contreg := contreg + 1; reg[contreg].nombre := nomlabel; Self.Name := 'Label_'+IntToStr(cont); with TLabel.Create(Self) do begin Caption := nomlabel; hoja := TTabSheet(PageCPpal.ActivePage); Parent:= hoja; with hoja do begin reg[contreg].pagina := Caption; end; reg[contreg].numpag := PageCPpal.ActivePageIndex; Left:=NuevaCorde(posx); reg[contreg].posx := Left; Top:=NuevaCorde(posy); reg[contreg].posy := Top; Autosize := True; reg[contreg].contenido := formula; end; Diciembre del 2004 IE-0502 72 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. end. ListBox.Items.InsertObject(0,Self.Name,Self as TObject); end; end; unit configuracion; Procedure TV_ppal.CargarNuevoElemento(X,Y :integer; Nom : string); var hoja : TTabSheet; uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, OleServer, Excel97, StdCtrls, Comctrls; begin contreg := contreg + 1; Self.Name := 'Label_'+IntToStr(contreg); with TLabel.Create(Self) do begin PageCPpal.ActivePageindex := PageCPpal.PageCount -1; hoja := TTabSheet(PageCPpal.ActivePage); Parent:= hoja; Left:= X; Top:= Y; Autosize := True; Caption := Nom; end; ListBox.Items.InsertObject(0,Self.Name,Self as TObject); end; type TConfig = class(TForm) LBRegistro: TListBox; AEvaluar: TEdit; Rango2: TEdit; Valor: TEdit; Probar: TButton; Crear: TButton; Rango: TLabel; LRang: TLabel; EA1: TExcelApplication; Timer1: TTimer; Label1: TLabel; Etiqueta: TEdit; procedure LBRegistroClick(Sender: TObject); procedure ProbarClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure CrearClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure Formula(); private { Private declarations } public { Public declarations } end; Function TV_PPAL.NuevaCorde(cord : integer):integer; begin while (cord mod 20 <> 0) do cord := cord - 1; NuevaCorde := cord; end; end. // Fin de programa program PFinal; uses Forms, VPal in 'D:\Proyecto\VPal.pas' {V_ppal}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TV_ppal, V_ppal); Application.Run; interface var Config: TConfig; activac, activado: boolean; Selec, Unid : String; WorkBk : _WorkBook; WorkSt : _WorkSheet; IIndex : OleVariant; modelo, a, contaetiq : integer; implementation Diciembre del 2004 IE-0502 73 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. {$R *.DFM} uses vpal, Main; Procedure TConfig.Formula(); var val, val2 : string; begin if V_ppal.Modelo.Selected[0]then modelo := 0 else modelo := 1; if (Selec = 'STATUS') then begin {Jale el dato tipo estatus} vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!STATU S'; end; {Si el dato es tipo ID} if (Selec = 'ID') then begin {Jale el dato tipo ID} vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!ID'; end; {Si el dato es tipo Suspend} if (Selec = 'SUSPEND') then begin {Jale el dato tipo suspend} vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!SUSPE ND'; end; if ((Selec = 'INP')and(modelo = 0)) then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!'+#39+'I NP0'+val+','+val2+#39; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!'+#39+'I NP'+val+','+val2+#39; end else if ((Selec = 'OUT')and(modelo = 0)) then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!'+#39+' OUT0'+val+','+val2+#39; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!'+#39+' OUT'+val+','+val2+#39; end else begin val := string(Aevaluar.text); vpal.formula := '=Unitronics|'+string(V_ppal.Unidad.Text)+'!'+Selec +val; end; end; procedure TConfig.LBRegistroClick(Sender: TObject); var i : integer; begin if V_ppal.Modelo.Selected[0]then modelo := 0 else modelo := 1; { Poner en invisible las edits Rango2 y Aevaluar, y el label LRang} Rango2.Visible := False; LRang. Visible := False; AEvaluar.Visible := True; { Obtiene el objeto selecionado en el list box} Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. for i := 0 to (LBRegistro.Items.Count - 1) do begin if LBRegistro.Selected[i] then Selec := LBRegistro.Items[i] end; {si se selecciona MB} if (modelo = 0) then begin if ((Selec = 'ML') or (Selec = 'MD')or (Selec = 'SL')or (Selec = 'SD')or (Selec = 'CC')or (Selec = 'CP')or (Selec = 'CS')) then begin Rango.Caption := 'No Disponible'; AEvaluar.Visible := false; end; if (Selec = 'MB') then begin Rango.Caption := '(0 - 1023)'; {Delimitrar el rango} AEvaluar.SetFocus; {Envirle el foco al edit} end; {Si se selecciona MI, SI, SB} if ((Selec = 'MI') or (Selec = 'SI') or (Selec = 'SB')) then begin Rango.Caption := '(0 - 255)'; {Rango} AEvaluar.SetFocus; {Foco} end; { Si se selecciona INP, OUT} if ((Selec = 'INP') or (Selec = 'OUT')) then begin Rango.Caption := '(00 - 63)'; {Rango inicial} AEvaluar.SetFocus; {Foco} { Alteraciones en stado de las cosas} Rango2.Visible := True; LRang. Visible := True; end; { Si se selecciona TC, TP, TS} if ((Selec = 'TC') or (Selec = 'TP') or (Selec = 'TS')) then begin Rango.Caption := '(0 - 63)'; {Rango} AEvaluar.SetFocus; {Foco} end end else begin 74 if (modelo = 1) then begin if ((Selec = 'MB') or (Selec = 'MI')) then begin Rango.Caption := '(0 - 1023)'; {Delimitrar el rango} AEvaluar.SetFocus; {Envirle el foco al edit} end; {Si se selecciona MI, SI, SB} if (Selec = 'ML') then begin Rango.Caption := '(0 - 255)'; {Rango} AEvaluar.SetFocus; {Foco} end; if ((Selec = 'MD') or (Selec = 'SL') or (Selec = 'SD')) then begin Rango.Caption := '(0 - 63)'; {Delimitrar el rango} AEvaluar.SetFocus; {Envirle el foco al edit} end; { Si se selecciona INP, OUT} if ((Selec = 'INP') or (Selec = 'OUT')) then begin Rango.Caption := '(00 - 543)'; {Rango inicial} AEvaluar.SetFocus; {Foco} end; if ((Selec = 'SB') or (Selec = 'SI')) then begin Rango.Caption := '(0 - 511)'; {Delimitrar el rango} AEvaluar.SetFocus; {Envirle el foco al edit} end; { Si se selecciona TC, TP, TS} if ((Selec = 'TC') or (Selec = 'TP') or (Selec = 'TS')) then begin Rango.Caption := '(0 - 127)'; {Rango} AEvaluar.SetFocus; {Foco} end; if ((Selec = 'CC') or (Selec = 'CP') or (Selec = 'CS')) then begin Rango.Caption := '(0 - 31)'; {Rango} AEvaluar.SetFocus; {Foco} Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. end; end; end; {Si se selecciona Status, Suspend, ID} if ((Selec = 'STATUS') or (Selec = 'SUSPEND') or (Selec = 'ID')) then begin Rango.Visible := False; AEvaluar.Visible := False; {desactivar la visibilidad ya que son 1 ó 0} end; {Si se selecciona Updateinterval} if (Selec = 'UPDATEINTERVAL') then begin Rango.Caption := '(10 - 2147983647)'; {Rango} AEvaluar.SetFocus; {foco} end; {Si se selecciona Maxinterval, itemcount, errorcount, erroitems, writecount} if ((Selec = 'MAXINTERVAL') or (Selec = 'INTEMCOUNT') or (Selec = 'ERRORCOUNT')or (Selec = 'ERRORITEMS') or (Selec = 'WRITECOUNT')) then begin Rango.Caption := '(0 - 2147983647)'; {rango} AEvaluar.SetFocus; {foco} end; end; procedure TConfig.ProbarClick(Sender: TObject); var val, val2 : string; begin {Generacion del workbook} WorkBk := EA1.Workbooks.Item[1]; {Generación del worksheet} WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; {Si el campo es tipo estatus} if (Selec = 'STATUS') then begin {Jale el dato tipo estatus} WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!STATUS'; vpal.formula := '=Unitronics|'+vpal.Unid+'!STATUS'; end; {Si el dato es tipo ID} if (Selec = 'ID') then 75 begin {Jale el dato tipo ID} WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!ID'; vpal.formula := '=Unitronics|'+vpal.Unid+'!ID'; end; {Si el dato es tipo Suspend} if (Selec = 'SUSPEND') then begin {Jale el dato tipo suspend} WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!SUSPEND'; vpal.formula := '=Unitronics|'+vpal.Unid+'!SUSPEND'; end; if ((Selec = 'INP') and (modelo = 0)) then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!'+#39+'INP0'+val+','+val2 +#39; vpal.formula := '=Unitronics|'+vpal.Unid+'!'+#39+'INP0'+val+','+val2 +#39; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!'+#39+'INP'+val+','+val2+ #39; vpal.formula := '=Unitronics|'+vpal.Unid+'!'+#39+'INP'+val+','+val2+ #39; end else if ((Selec = 'OUT') and (modelo = 0)) then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!'+#39+'OUT0'+val+','+val 2+#39; Diciembre del 2004 IE-0502 vpal.formula := '=Unitronics|'+vpal.Unid+'!'+#39+'OUT0'+val+','+val 2+#39; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!'+#39+'OUT'+val+','+val2 +#39; vpal.formula := '=Unitronics|'+vpal.Unid+'!'+#39+'OUT'+val+','+val2 +#39; end else begin val := string(Aevaluar.text); WorkSt.Cells.Item[2,1] := '=Unitronics|'+vpal.Unid+'!'+Selec+val; vpal.formula := '=Unitronics|'+vpal.Unid+'!'+Selec+val; end; activado := true; activac := true; a := 1; end; procedure TConfig.Timer1Timer(Sender: TObject); begin if (activac = true) then activac := false else if (activado = true) then begin WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; Valor.Text := WorkSt.Cells.Item[2,1]; Crear.Enabled := True; end; end; procedure TConfig.FormCreate(Sender: TObject); var buffer : string; cont : integer; begin with V_Ppal do 76 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. begin buffer := Unid; end; Unid := buffer; EA1.Connect; EA1.Workbooks.Add(xlWBatWorkSheet,0); WorkBk := EA1.Workbooks.Item[1]; contaetiq := 1; end; procedure TConfig.CrearClick(Sender: TObject); var fila, columna : integer; begin if (vpal.V_ppal.PageCPpal.ActivePageIndex = 0) then begin if (Application.messagebox( 'Favor Crear una Página','Error',MB_OK + MB_DEFBUTTON1)) = IDOK then Config.Close; end else begin if (vpal.V_ppal.PageCPpal.ActivePageIndex = 0) then begin V_Ppal.NuevaPgina1Click(self); end; nuevo := 1; columna := vpal.V_ppal.PageCPpal.ActivePageIndex; fila := vpal.contreg; vpal.nomlabel := Etiqueta.Text; if Vpal.activado = true then WorkSt.Cells.Item[fila+1,columna+1] := vpal.formula else Formula(); contaetiq := contaetiq + 1; Application.MessageBox('Favor dar clic en donde quiera que esté el objeto', 'Atención!!',MB_OK + MB_DEFBUTTON1); Close; end; end; procedure TConfig.FormShow(Sender: TObject); Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. begin AEvaluar.Text := ''; Valor.Text := ''; Etiqueta.Text := 'Registro_'+inttostr(contaetiq); if vpal.activado = true then begin Crear.Enabled := False; Probar.Visible := True; Valor.Visible := True; end else begin Crear.Enabled := True; Probar.Visible := False; Valor.Visible := False; end; activado := false; end; end. // Fin del programa unit cionfiguracion; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, OleServer, Excel97, StdCtrls; type TForm1 = class(TForm) LBRegistro: TListBox; AEvaluar: TEdit; Rango2: TEdit; Valor: TEdit; Probar: TButton; Button1: TButton; Rango: TLabel; Label1: TLabel; EA1: TExcelApplication; Timer1: TTimer; procedure LBRegistroClick(Sender: TObject); procedure ProbarClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; 77 var Form1: TForm1; activado: integer; implementation {$R *.DFM} procedure TForm1.LBRegistroClick(Sender: TObject); begin { Poner en invisible las edits Rango2 y Aevaluar, y el label LRang} Rango2.Visible := False; LRang. Visible := False; AEvaluar.Visible := True; { Obtiene el objeto selecionado en el list box} for i := 0 to (LBRegistro.Items.Count - 1) do begin if LBRegistro.Selected[i] then Selec := LBRegistro.Items[i] end; {si se selecciona MB} if (Selec = 'MB') then begin Rango.Caption := '(0 - 1023)'; {Delimitrar el rango} AEvaluar.SetFocus; {Envirle el foco al edit} end; {Si se selecciona MI, SI, SB} if ((Selec = 'MI') or (Selec = 'SI') or (Selec = 'SB')) then begin Rango.Caption := '(0 - 225)'; {Rango} AEvaluar.SetFocus; {Foco} end; { Si se selecciona INP, OUT} if ((Selec = 'INP') or (Selec = 'OUT')) then begin Rango.Caption := '(00 - 63)'; {Rango inicial} AEvaluar.SetFocus; {Foco} { Alteraciones en stado de las cosas} Rango2.Visible := True; LRang. Visible := True; end; { Si se selecciona TC, TP, TS} if ((Selec = 'TC') or (Selec = 'TP') or (Selec = 'TS')) then Diciembre del 2004 IE-0502 78 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. begin Rango.Caption := '(0 - 63)'; {Rango} AEvaluar.SetFocus; {Foco} end; {Si se selecciona Status, Suspend, ID} if ((Selec = 'STATUS') or (Selec = 'SUSPEND') or (Selec = 'ID')) then begin AEvaluar.Visible := False; {desactivar la visibilidad ya que son 1 ó 0} end; {Si se selecciona Updateinterval} if (Selec = 'UPDATEINTERVAL') then begin Rango.Caption := '(10 - 2147983647)'; {Rango} AEvaluar.SetFocus; {foco} end; {Si se selecciona Maxinterval, itemcount, errorcount, erroitems, writecount} if ((Selec = 'MAXINTERVAL') or (Selec = 'INTEMCOUNT') or (Selec = 'ERRORCOUNT')or (Selec = 'ERRORITEMS') or (Selec = 'WRITECOUNT')) then begin Rango.Caption := '(0 - 2147983647)'; {rango} AEvaluar.SetFocus; {foco} end; end; procedure TForm1.ProbarClick(Sender: TObject); var val, val2 : string; begin {Generacion del workbook} WorkBk := EA1.Workbooks.Item[1]; {Generación del worksheet} WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; {Si el campo es tipo estatus} if (Selec = 'STATUS') then begin {Jale el dato tipo estatus} WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!STATUS'; end; {Si el dato es tipo ID} if (Selec = 'ID') then begin {Jale el dato tipo ID} WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!ID'; end; {Si el dato es tipo Suspend} if (Selec = 'SUSPEND') then begin {Jale el dato tipo suspend} WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!SUSPEND'; end; if (Selec = 'INP') then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!INP0'+val+','+val2; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!INP'+val+','+val2; end; if (Selec = 'OUT') then if ((integer(AEvaluar.text) > 0) and (integer(AEvaluar.text) < 10 )) then begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!OUT0'+val+','+val2; end else begin val2 := string(Rango2.text); val := string(Aevaluar.text); WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!OUT'+val+','+val2; end else begin val := string(Aevaluar.text); WorkSt.Cells.Item[1,2] := '=Unitronics|'+Unid+'!'+Selec+val; end; activado := true; Diciembre del 2004 IE-0502 79 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. end; procedure TForm1.Timer1Timer(Sender: TObject); begin if (activado = true) then begin WorkBk := EA1.Workbooks.Item[1]; WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; Valor.Text := WorkSt.Cells.Item[1,2]; //Valor.Text := 'OUT RANGE!!'; //activado := False; end; end; end. unit procesos; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TNombre_Proceso = class(TForm) Label1: TLabel; Nombre: TEdit; OK: TButton; procedure OKClick(Sender: TObject); private { Private declarations } public { Public declarations } end; if (Nombre.text = '') then Nombre.Text := 'Proceso_'+ inttostr(V_ppal.PageCPpal.ActivePageIndex+1); vpal.nombrepag := Nombre.text; V_Ppal.CrearNuevaPag(); Close; end; end. unit Childwin; interface uses Windows, Classes, Graphics, Forms, Controls, StdCtrls; type TMDIChild = class(TForm) Memo1: TMemo; procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; implementation {$R *.DFM} procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; var Nombre_Proceso: TNombre_Proceso; end. implementation interface uses vpal; uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, Excel97, ComCtrls, StdCtrls, OleServer, ShellApi, ExtCtrls, jpeg, syncobjs; {$R *.DFM} procedure TNombre_Proceso.OKClick(Sender: TObject); begin nit UniHMI; Diciembre del 2004 IE-0502 80 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. end; type TV_ppal = class(TForm) PageCPpal: TPageControl; Conexion: TTabSheet; OK: TButton; Direccion: TEdit; Unidad: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; EA1: TExcelApplication; GroupBox1: TGroupBox; PBar: TProgressBar; Image2: TImage; Temporizador: TTimer; ListBox: TListBox; ImagenDes: TImage; ImagenCon: TImage; Abrir: TButton; OpenDialog: TOpenDialog; procedure Salir1Click(Sender: TObject); procedure OKClick(Sender: TObject); procedure CancelClick(Sender: TObject); procedure TemporizadorTimer(Sender: TObject); procedure NuevaPgina1Click(Sender: TObject); procedure CrearNuevaPag(); procedure Press_Clic(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Procedure CargarNuevaPag(nombre : string); Procedure CargarNuevoElemento(X,Y :integer); procedure AbrirClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; type registro = record numpag : integer; {Contiene el numero de página} pagina : string; {Contiene el nombre de la pagina} nombre : string; {lleva el nombre del item} contenido : string; {lleva la funcion para conexion} posx, posy : integer; {coordenadas del item} var V_ppal: TV_ppal; {Conexion} WorkBk : _WorkBook; WorkSt : _WorkSheet; IIndex : OleVariant; {Datos de Usuario} Direc : Pchar; { Dirección Física del Archivo} Unid, nombrepag, nomlabel, formula : String; { Unidad a la cual se va a conectar} cont, Suspencion, Estado : integer; { Estado de la conecxion} est, activo, activado: boolean; {estados del reloj para OPC Server} numpag: Integer; {almacena el numero de pagina} reg : array [1..100] of registro; {} nuevo, contreg : integer; posx, posy : integer; implementation {$R *.DFM} procedure TV_ppal.Salir1Click(Sender: TObject); begin V_ppal.Close; {Cerrar el sistema} end; procedure TV_ppal.OKClick(Sender: TObject); var buscar : Integer; begin numpag := 1; Direc := Addr(Direccion.Text[1]); { Cargar el nombre de la apliucación} Unid := Unidad.text; { Cargar la unidad a ejecutar} ShellExecute(V_ppal.Handle,'open',Direc,nil,nil,SW_ SHOWMINIMIZED); { Ejecutar el metodo de conexión} While (activo = false) do Diciembre del 2004 IE-0502 81 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. begin { Metodo para optener los datos del PLC} buscar:=FindWindow(nil,'UNITRONICS'); if (activo <> true) then begin if ((cont mod 10000) = 0) then PBar.StepIT; cont := cont + 1; end; If (buscar<>0) then begin activo := true; cont := 0; contreg := 0; EA1.Connect; EA1.Workbooks.Add(xlWBatWorkSheet,0); WorkBk := EA1.Workbooks.Item[1]; WorkSt := WorkBk.WorkSheets.Get_Item(1) as _Worksheet; end; end; { Si esta desconectado muesta desconectado, pero si lo esta muesta Conectado} end; procedure TV_ppal.CancelClick(Sender: TObject); begin V_ppal.Close; end; procedure TV_ppal.TemporizadorTimer(Sender: TObject); var pag, I, aux, contador : integer; Selec : TLabel; begin if (activo = true) then begin if (activado = true) then begin WorkSt.Cells.Item[1,1] := '=Unitronics|'+Unid+'!STATUS'; if (est = true) then begin Estado := integer(WorkSt.Cells.Item[1,1]); if (Estado = 0) then begin ImagenDes.Visible := True; ImagenCon.Visible := False; end else begin ImagenDes.Visible := False; ImagenCon.Visible := True; end; {Parte del timer para jalar la info de los Labels} aux := 1; Listbox.Items.Clear; for I := V_Ppal.ComponentCount-1 downto 15 do begin if (V_Ppal.Components[I] is TLabel) then ListBox.Items.InsertObject(0, V_Ppal.Components[I].Name, V_Ppal.Components[I] as TObject); end; pag := PageCPpal.ActivePageIndex; for contador := 0 to ListBox.Items.Count - 1 do begin if (ListBox.Items.Objects[contador] is TLabel) then begin Selec := (ListBox.Items.Objects[contador] as TLabel); Selec.Caption := reg[aux].nombre+#13+string(WorkSt.Cells.Item[aux, pag+1]); Selec.Alignment :=tacenter; aux := aux + 1; end; end; end else est := true; end else activado := true; end; end; procedure TV_ppal.NuevaPgina1Click(Sender: TObject); begin // Crear una página nueva Diciembre del 2004 IE-0502 end; Procedure TV_ppal.CrearNuevaPag(); begin with PageCPpal do with TTabSheet.Create(Self) do begin PageControl := PageCPpal; Name := 'Proceso_' + IntToStr(Pages[numpag].PageIndex); Caption := nombrepag; numpag := numpag + 1; OnMouseDown := Press_Clic; end; PageCPpal.ActivePageIndex:= (PageCPpal.Pages[numpag - 1].PageIndex) end; Procedure TV_ppal.CargarNuevaPag(nombre : string); begin with PageCPpal do with TTabSheet.Create(Self) do begin PageControl := PageCPpal; Name := 'Proceso_' + IntToStr(Pages[numpag].PageIndex); Caption := nombre; OnMouseDown := Press_Clic; end; PageCPpal.ActivePageIndex:= (PageCPpal.Pages[numpag].PageIndex); numpag := numpag + 1; end; { Realiza: Captura los datos de la coordenadas del mouse en el lugar en que se dio el clic, muestra un mensage de la localizacion del puntero del muose. Envia: nada. Recibe: Un objeto, el boton precionado, las coordenadas X Y y el estado. } procedure TV_ppal.Press_Clic(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var 82 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. hoja : TTabSheet; begin posy := Y; posx := X; if (nuevo = 1) then begin nuevo := 0; contreg := contreg + 1; reg[contreg].nombre := nomlabel; Self.Name := 'Label_'+IntToStr(cont); with TLabel.Create(Self) do begin hoja := TTabSheet(PageCPpal.ActivePage); Parent:= hoja; with hoja do begin reg[contreg].pagina := Caption; end; reg[contreg].numpag := PageCPpal.ActivePageIndex; Left:=posx; reg[contreg].posx := posx; Top:=posy; reg[contreg].posy := posy; Autosize := True; reg[contreg].contenido := formula; end; ListBox.Items.InsertObject(0,Self.Name,Self as TObject); end; end; Procedure TV_ppal.CargarNuevoElemento(X,Y :integer); var hoja : TTabSheet; begin contreg := contreg + 1; Self.Name := 'Label_'+IntToStr(contreg); with TLabel.Create(Self) do begin hoja := TTabSheet(PageCPpal.ActivePage); Parent:= hoja; Left:=X; Top:=Y; Autosize := True; end; Diciembre del 2004 IE-0502 Interfaz Humano-Máquina para la familia de PLC’s Unitronics. ListBox.Items.InsertObject(0,Self.Name,Self as TObject); end; procedure TV_ppal.AbrirClick(Sender: TObject); var Arch : TextFile; temp, auxi : integer; begin if (activado = true) then begin OpenDialog.Execute; AssignFile(Arch,(Opendialog.FileName)); Reset(Arch); temp := 1; while (not(EOF(Arch))) do begin Readln(Arch,reg[temp].numpag); Readln(Arch,reg[temp].pagina); Readln(Arch,reg[temp].nombre); Readln(Arch,reg[temp].Contenido); Readln(Arch,reg[temp].posx); Readln(Arch,reg[temp].posy); Readln(Arch); if (reg[temp].numpag > auxi) then begin auxi := reg[temp].numpag; CargarNuevaPag(reg[temp].pagina); end; 83 CargarNuevoElemento(reg[temp].posx,reg[temp].pos y); WorkSt.Cells.Item[temp,reg[temp].numpag +1] := reg[temp].contenido; temp := temp +1; end; closefile(Arch); abrir.Enabled := false; end else ShowMessage('Favor conectarse Primero'); end; procedure TV_ppal.FormClose(Sender: TObject; var Action: TCloseAction); var cerrar:integer; begin cerrar:=FindWindow(nil,'UNITRONICS'); if (cerrar = 0) then ShowMessage('No encuentro el servidor Unitronics Ejecutandose') else SendMessage(cerrar,WM_CLOSE,0,0); EA1.Workbooks.Close(0); EA1.Disconnect; end; end. // Fin de programa Diciembre del 2004