Escolar Documentos
Profissional Documentos
Cultura Documentos
Facultad de Ingeniera
Escuela de Ingeniera Elctrica
Por:
Alexnder Barrantes Muoz
Por:
Alexnder Barrantes Muoz
___________________
M.Sc. Geovanny Delgado Cascante
Profesor Gua
___________________ __________________
Ing. Roberto Rodrguez Rodrguez Dr. Jorge Arturo Romero Chacn
Profesor Lector Profesor Lector
DEDICATORIA
RECONOCIMIENTOS
NDICE GENERAL
NDICE DE FIGURAS
Figura N2.1 Funcionamiento e Interfaces de OPC ................................................................. 21
Figura N2.2 Modelo de Objetos del Servidor de Automatizacin OPC ................................. 21
Figura N3.1 Organigrama de la Co. Unitronics ...................................................................... 27
Figura N3.2 Familia de PLCs de Unitronics ........................................................................... 29
Figura N3.3 Conectando la PC con un Controlador................................................................ 34
Figura N3.4 PLC M90............................................................................................................. 39
Figura N3.5 Pantalla de Conexin de UniScada ..................................................................... 49
Figura N3.6 Pantalla de Conexin de UniHMI....................................................................... 49
NDICE DE TABLAS
Tabla 2.1 Descripcin de la coleccin de objetos de la especificacin OPC ........................... 22
Tabla 3.1 Descripcin de registros internos del M90 ............................................................... 33
Tabla 3.2 Distribucin de pines del puerto RS232 ................................................................... 33
Tabla 3.3 Descripcin de conexin para el puerto CANbus.................................................... 34
Tabla 3.4 Categoras de informacin que se pueden alcanzar en el modo de Informacin...... 35
Tabla 3.5 La funcin 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 Descripcin de los tipos de tems del M90 ............................................................. 41
NOMENCLATURA
ActiveX Tecnologa de Acceso a Datos
ADO Objetos de Base de Datos ActiveX
Baud rate Tasa de transmisin de datos en bps
BDE Motor de Base de Datos de Borland
CCFL Lmpara fluorescente
COM Modelo Componente del Objeto
CORBA Arquitectura Comn del Corredor de la Peticin del Objeto
CPU Unidad Central de Proceso
DCOM Distribucin COM
DDE Protocolo de Intercambio de datos dinmico
DLL Librera de Enlace Dinmico
DSR Entrada Datos preparados, listo para iniciar dilogo
DTR Patilla de terminal de listo datos del puerto RS232
HMI Interfaz Humano-Mquina
ID Identificacin
NetDDE Red de DDE
Ladder Programa de configuracin de PLCs en lenguaje escalera
LCD Pantalla de cristal lquido
OCX Librera de programacin
OLE Enlace e inclusin 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 Lgico Programable
PWM Modulacin de Anchura de Pulso
RESUMEN
El objetivo principal es una aplicacin HMI, Interfaz Humano Mquina, para el modelo
de PLCs de Unitronics M90, por medio de la implementacin de un programa SCADA en la
plataforma de programacin Delphi Enterprise 5.0, con lenguaje Borland Pascal. Se empez por
estudiar dicha plataforma, que utiliza programacin orientada a objetos. Despus se estudi la
estructura interna del PLC M90, se estableci comunicacin con el PLC en pequeas pruebas de
manipulacin de registros internos en Excel por medio del protocolo de comunicacin DDE.
Seguidamente se trasladaron estas pruebas a desarrollos con Delphi y poco a poco se fueron
solventando problemas que aparecan en el transcurso de la implementacin. Las fuentes de
informacin 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 diseadas especialmente
para la creacin de sistemas SCADA.
Los resultados fueron: Se Desarroll una Interfaz Humano-Mquina (HMI) para la
familia de PLCs Unitronics con la creacin de las aplicaciones UniScada y Uni_HMI, Se
practic en el desarrollo de aplicaciones en Borland Delphi, Se estudi la arquitectura de los
PLCs Unitronics, Se Desarroll una aplicacin de comunicacin entre Delphi y el OPC Server
de Unitronics, Se Realiz una aplicacin de lectura de registros del PLC, Se Desarroll la
aplicacin HMI de despliegue de registros, pues se obtuvo un prototipo de lo que hoy en da es
materia de mercado, asimismo, se elimin el desconocimiento en dicho tema, haciendo ms
familiar futuras experiencias con programas SCADA comerciales en el campo laboral.
CAPTULO 1: Introduccin
Lo que se pretendi en este trabajo fue la creacin de un programa bsico de
monitoreo estilo SCADA, como es mencionado comercialmente, implementndolo en
una plataforma de programacin grfica, Delphi 5.0, en donde se estableci una
comunicacin entre un PLC y la PC, de manera que el usuario pueda tener una cmoda
interaccin con el dispositivo.
Se seleccion el controlador lgico programable de la familia de Unitronics,
enfatizando en el modelo M90, a pesar de que toda la lnea de PLCs de dicha familia
(Unitronics) posee caractersticas extremadamente similares, en donde es posible que sus
diferencias significativas no sean ms que sus capacidades de memoria, pero su
estructura interna es muy parecida y para efectos de este proyecto la comunicacin y
manipulacin de datos son idnticas, pues hasta los registros internos poseen los mismos
nombres.
Este dispositivo (M90) fue seleccionado por su simple estructura interna y su fcil
manipulacin, como ms adelante se mencionar. La plataforma de programacin
Borland Pascal de Delphi fue seleccionada por sus caractersticas grficas 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 da, con el objetivo de
actualizar al estudiante con materia de mercado en el rea de control automtico. Un
objetivo futurista de este trabajo pretende utilizar las bases creadas para la realizacin 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 creacin de este tipo de
softwares.
1.2 Metodologa
automtico solamente hasta simple programacin, por lo que la base terica obtenida fue
compuesta por informacin de fuentes diversas.
DDE que posee Windows , pues con este protocolo se pudo comunicar Excel con el
OPC Server.
Se prosigui con una pequea implementacin de comunicacin en la plataforma
Delphi. Este objetivo puede que fuese el ms difcil 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 versin del Delphi Enterprise (5.0). Todava se desconoce si de verdad esta fue la
razn 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 creacin 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 aplicacin HMI de forma grfica. Este
objetivo necesit mucha creatividad e informacin, pues es aqu donde se empez a
desarrollar la interfaz grfica. Se trabaj con archivos, entre muchos elementos de
programacin, lo cual implic gran cantidad de consultas acerca de informacin sobre la
implementacin de determinados elementos, realizadas en Internet.
2.1.1 Concepto
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 produccin peridicamente cambiante
Procesos secunciales
Maquinaria de procesos variables
Instalaciones de procesos complejos y amplios
Chequeo de programacin centralizada de las partes del proceso.
2.1.2 Funciones
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.
realiza por una red industrial o por medio de una conexin por el puerto serie del
ordenador.
Control de procesos continuos: Adems de dedicarse al control de sistemas de
eventos discretos los autmatas llevan integradas funciones que permiten el control de
procesos continuos. Disponen de mdulos de entrada y salida analgicas y la posibilidad
de ejecutar reguladores PID que estn programados en el autmata.
Entradas- Salidas distribuidas: Los mdulos de entrada salida pueden estar
distribuidos por la instalacin y se comunican con la unidad central del autmata
mediante un cable de red.
Buses de campo: Mediante un solo cable de comunicacin se pueden conectar al
bus de entradas y salidas, reemplazando al cableado tradicional. El autmata consulta
cclicamente el estado de las entradas y actualiza el estado de las salidas.
2.1.3 Componentes
3
Informacin tomada de:
http://www.euskalnet.net/m.ubiria/ARTICULOS.htm#Articulos_2001_01
Tarjetas de regulacin.
2.1.4 Aplicaciones
Entre las aplicaciones ms comunes que puede tener un PLC podemos mencionar
algunos ejemplos tales como4:
Maniobra de mquinas
Maquinaria industrial de plstico
Maquinaria de embalajes
Maniobra de instalaciones:
Instalacin de aire acondicionado, calefaccin, etc.
Instalaciones de seguridad
Sealizacin y control:
Chequeo de programas
Sealizacin del estado de procesos
2.1.5 Fortalezas y Debilidades
4
Ejemplos tomados de:
http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm.
5
Informacin tomada de:
2.2.1 Concepto
Las siglas HMI son provenientes del ingls Human Machine Interface, lo que en
espaol es Interfaz Humano Mquina. 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 comunicacin y transmisin de datos con el PLC.
Antes de seguir refirindose 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 inters. Las siglas
SCADA provienen del ingls: Supervisory Control and Data Adquisition, lo que
traducido al espaol y de forma ms explcita, es un software supervisor que realiza la
adquisicin de datos desde PLC hacia una PC comnmente, y el envo de datos en
sentido contrario. El carcter 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, grfico y amigable
http://www.grupo-maser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA%20PRINCIPAL/PLC/plc.htm
simule los procesos que se realizan en una planta (como control de calidad, supervisin,
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 tambin, que enve
instrucciones que acten directamente sobre los diferentes dispositivos, de tal manera que
sea tan cmodo como el presionar una tecla del computador.
De una manera ms personal, agregando a la definicin anterior, un programa
SCADA es un software creador de aplicaciones programadas especficas de un proceso
determinado.
Un ejemplo es el de monitorear alarmas de un Banco. Los procesos que se
realizan son: recoger la informacin de los censores en las entradas de un PLC y
visualizar las entradas en la PC (el PLC ya posee una programacin que realizar con
una entrada especfica 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 ms que esta aplicacin en el programa de monitoreo. Pero si es el vendedor de
PLCs y cada cliente necesita una aplicacin distinta o actualizar la que ya tiene, ocupa
tener un programa que cree los distintos softwares para cada aplicacin, a este programa
padre o creador le denomino SCADA.
Continuando con las caractersticas generales de las HMI, cada uno tiene su
software propio y la comunicacin generalmente se da a travs del puerto serial RS232.
Una descripcin general propuesta de cmo deben ser los mdulos que componen
un software SCADA es la siguiente6:
Configuracin: permite al usuario definir el entorno de trabajo de su SCADA,
adaptndolo a la aplicacin particular que se desea desarrollar.
Interfaz grfico del operador: proporciona al operador las funciones de control y
supervisin de la planta. El proceso se representa mediante sinpticos grficos
almacenados en el ordenador de proceso y generados desde el editor incorporado
en el SCADA o importados desde otra aplicacin durante la configuracin del
paquete.
6
Tomado de http://personal.redestb.es/efigueras/
7
Informacin tomada de http://personal.redestb.es/efigueras/
8
Tomado de http://personal.redestb.es/efigueras/
2.3.1 Concepto
9
Tomado de http://inf.udec.cl/~yfarran/web-redes/protocolos/redes03.htm
10
Traducido del manual de ayuda del OPC Server de la compaa Unitronics
funcionalidad estndar del DDE de Windows para incluir comunicacin sobre redes de
rea local a travs de puertos seriales. Las extensiones de red estn disponibles para
permitir enlaces DDE entre las aplicaciones corriendo en diversas computadoras
conectadas va redes o mdems.
11
El protocolo DDE est basado en el sistema de mensajera construido por
Windows . As, dos programas de aplicacin bajo Windows realizan una
"conversacin DDE" envindose mensajes entre ellos.
Una conversacin DDE se inicia con el programa que acta como cliente. Este
transfiere un mensaje a todos los programas que se estn ejecutando en ese momento en
Windows . Dicho mensaje indica una categora general de datos que el cliente necesita.
Un servidor DDE que posee dichos datos puede responder a este mensaje. En este
instante comienza la conversacin. 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 mltiples clientes y un cliente puede obtener datos desde
mltiples servidores, pero esto requiere mltiples conversaciones DDE.
Un programa implicado en una conversacin DDE no necesita codificarse
especficamente para trabajar con otro programa DDE. Generalmente el diseador de un
servidor DDE hace pblico cmo se identifican los datos. Como DDE utiliza el sistema
de mensajera incluido en Windows, el programa se integra perfectamente en el entorno
Windows.
En DDE ambas aplicaciones deben estar ejecutndose y las dos deben dar a
Windows una direccin a sus funciones de llamada antes de que la comunicacin de DDE
pueda comenzar. La funcin de llamada acepta cualquier mensaje de DDE que Windows
enva a la aplicacin.
Un cliente de DDE comienza una conversacin con otra aplicacin (un servidor
de DDE) enviando un mensaje de conexin. Despus de establecer una conexin, el
cliente puede enviar rdenes o datos al servidor y a cambio puede pedir el valor de datos
que el servidor maneja.
Cuando la comunicacin DDE para una conversacin es completada, el cliente
enva un mensaje de cerrar la conversacin al servidor.
11
Tomado de http://www.ing.ula.ve/~jesusc/labvid.htm
Las siglas OLE provienen del ingls Object Linking and Embedding, lo que
12
traducido al espaol sera enlace e inclusin de objetos. Es una especificacin de
Microsoft creada para trabajar en Windows haciendo posible la integracin de objetos
entre aplicaciones, lo que permite crear documentos con entidades provenientes de
distintas aplicaciones.
Los objetos pueden ser casi cualquier tipo de informacin, incluyendo texto,
imgenes de mapa de puntos, grficos vectoriales e incluso anotaciones de sonido y
vdeo.
A travs de OLE es posible que los programas se comuniquen entre s e
intercambien informacin sin prdida de detalle, independientemente de su origen. Pero
el proceso no se produce de forma automtica, de modo que es preciso conocer su
funcionamiento para poder aprovechar sus posibilidades.
OLE fue introducido en 1991 como una extensin del protocolo DDE, que fue
creado para pasar datos entre aplicaciones, y en especial, desde la hoja de clculo 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 versin ms moderna (1993) y eficaz que la
primera, permitiendo entre otras cosas el paso de datos mediante la tcnica drag and drop
(arrastrar y soltar) y la edicin 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 grfico trabajan en OLE, ya que es preciso que las
aplicaciones hayan sido diseadas para soportar sus funciones.
La especificacin OLE permite incorporar enlaces entre determinadas partes de
los programas, y as, es posible controlar desde una aplicacin lo que se est realizando
en otra.
Una aplicacin que trabaja con OLE puede actuar como servidor, como cliente o como
las dos cosas.
12
http://personales.unican.es/togoresr/r40p64.htm
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 inclusin, tambin
conocidas como vinculacin e incrustacin, posibilitando la creacin de documentos
compuestos, o sea, documentos formados por varios objetos de datos provenientes de
mltiples aplicaciones. Un objeto incluido est totalmente contenido dentro de la
aplicacin cliente. Un objeto enlazado tiene una conexin en la aplicacin cliente y slo
es accesible a travs de la aplicacin 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 edicin de los datos.
13
Podemos considerar que OLE es un subconjunto de la tecnologa ActiveX,
encargada de la vinculacin e incrustacin de objetos, y ambas se sustentan sobre COM
(Component Object Model). COM proporciona un mecanismo para permitir la
comunicacin entre los objetos de una aplicacin o entre distintos procesos,
proporcionando mecanismos para que un objeto pueda mostrar su funcionalidad a travs
de una interfaz.
Por tanto, COM nos proporciona las conexiones y los interfaces que sern
utilizadas desde OLE para conseguir la automatizacin, para que una aplicacin pueda
ofrecer una interfaz programable.
Las aplicaciones que vienen con Microsoft Office (Word, Excel, Access), el
propio Microsoft Internet Explorer, entre otros, soportan la automatizacin OLE.
OLE no es soportado por Windows de forma directa, lo que quiere decir que no
todos los programas de este entorno grfico trabajan en OLE, ya que es preciso que las
aplicaciones hayan sido diseadas para soportar sus funciones.
La especificacin OLE permite incorporar enlaces entre determinadas partes de
los programas, y as, es posible controlar desde una aplicacin lo que se est realizando
en otra.
Una aplicacin 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
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 ingls OLE for Process Control), o en espaol OLE para control de
procesos, es una especificacin tcnica no propietaria definida por la Entidad OPC
Foundation (OPC Foundation es una entidad sin fines de lucro, encargada de administrar
la especificacin OPC) y consiste bsicamente en un Sistema de Interfaces Estndar
basado en OLE/COM y DCOM de Microsoft. Con OPC es posible nter operar
dispositivos industriales con sistemas de informacin o aplicativos de escritorio. En otras
palabras, el OPC permite desarrollar de una manera muy prctica y eficiente aplicaciones
que pretendan comunicarse con equipos industriales controlados por PLCs.
15
Desde un punto de vista general muchos aspectos de OPC son similares al
DDE, pero la diferencia principal est en la puesta en prctica usando la tecnologa de
COM de Microsoft (modelo componente del objeto). Permite intercambio rpido con
datos de proceso de la automatizacin y el interfaz abierto de OPC, permite el acceso a
los datos del servidor de OPC de la misma manera estndar de los usos del cliente de
OPC.
16
OPC es un conjunto de protocolos para interfaces OLE/COM estndar
destinados a estimular una mayor interaccin entre las aplicaciones de
control/automatizacin, los dispositivos/sistemas de campo y las aplicaciones de
ofimtica/gestin en la industria de control de procesos.
En cooperacin con Microsoft, cinco empresas, Intellution, Opto-22, Fisher-
Rosemount, 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
programacin de aplicaciones estndar 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
15
Traducido del manual de ayuda del OPC Server de la compaa Unitronics
16
Tomado de https://www.software.omron.es/software/cx/pages/cx_comun.jsp?id=6
17
Tomado http://www.iespana.es/perl-es/OLE.htm
OBJETO DESCRIPCIN
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
coleccin Grupos OPC y el objeto Buscador OPC.
Grupos OPC Es una coleccin de los objetos Grupo OPC que el cliente ha creado.
Grupo OPC El propsito de este objeto es mantener la informacin de estado y
proveer el mecanismo para ofrecer los servicios de adquisicin de datos
por la coleccin de objetos tem OPC.
tems OPC Es una coleccin que contiene todos los objetos tem OPC que el cliente
ha creado.
tem OPC Es un objeto que mantiene la definicin de los tems, sus valores, estados
y datos de la ltima actualizacin.
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 informacin sobre el
servidor y sirve como un contenedor de grupos de objetos OPC. El grupo de objetos
OPC mantiene informacin acerca de s mismo y proporciona los mecanismos para
contener y organizar lgicamente los elementos OPC; los grupos OPC proporcionan
una forma para organizar los datos de los clientes; por ejemplo, el grupo podra
representar los elementos en una pantalla particular del operador o a travs de un
informe; los datos pueden ser ledos 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 segn sea necesario; un cliente OPC puede configurar el porcentaje de los
datos que deben ser cambiados antes de la actualizacin.
Hay dos tipos de grupos, pblicos y locales (o privados); los pblicos se realizan
para ser compartidos entre varios clientes, mientras que los locales son privados para el
cliente en cuestin. Existen interfaces especficas opcionales para los grupos pblicos;
dentro de cada grupo, el cliente puede definir uno o ms 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 travs 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, slo son conexiones a ellas; el elemento OPC debe
ser entendido como la direccin de los datos, no como la fuente fsica actual de los datos
a los que la direccin referencia, puesto que la fuente real de los datos es el dispositivo
controlador, regularmente un PLC.
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 Automatizacin para obtener acceso a
datos. ADO utiliza la interfaz de OLE DB para tener acceso a un amplio conjunto de orgenes de datos,
incluyendo pero no limitndose a los datos proporcionados mediante ODBC. Tomado de
http://www.sqlmax.com/ado.asp
20
Tomado de www.unitronics.com y traducido al espaol por Alexander Barrantes Muoz.
3.1.1 Misin
3.2.1.4 Comunicacin
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 comunicacin 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 documentacin de modo que cualquier
persona pueda ponerla en ejecucin en una aplicacin 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 aplicacin en la PC.
Usar una aplicacin de un servidor DDE.
Usar una aplicacin de un servidor OPC.
El M90 no puede inicializar la comunicacin en una comunicacin serial. El puerto serial es
tambin un puerto de acceso remoto y un dispositivo de conexin.
Puerto de CANbus
La Serie M90 tiene un puerto CANbus.
El Unitronics CANbus corre en la misma capa fsica 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.
Smbolo del tipo de Dato Smbolo Smbolo del tipo de Dato Smbolo
Bits de Memoria MB Contadores: T
(bobinas): 1024 64, 16 bit
Enteros de Memoria MI Entradas: I
(registros): 256, 16 bit 512
Bits del sistema: SB Salidas: O
256 512
Enteros del sistema: SI
256, 16 bit
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 estn disponibles.
La interfaz RS232 est va los puertos seriales del tipo RJ-11. La siguiente tabla muestra
la distribucin de sus pines.
Tabla 3.2 Distribucin de pines del puerto RS232
21
Traducido de la gua del usuario del OPLC Vision 230
Los tipos de datos especficos se ligan a los parmetros 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 estn 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 categora.
- M90,
- M200,
- Vision 230.
22
Traducido del manual de ayuda del OPC Server de la compaa 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 seccin 2.3.2., el protocolo de
comunicacin direcciona un elemento de datos en una conversacin que utilice a convencin de
nombramiento de tres partes que incluye el nombre de la aplicacin, el nombre del tpico
(asunto) y el nombre del tem (artculo). Lo que sigue describe brevemente a cada porcin de
esta convencin de nombramiento:
Nombre de la Aplicacin
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 va este
servidor, la porcin de la aplicacin de la direccin es UNITRONICS.
Un elemento de datos especfico dentro de un tpico especfico. Por ejemplo, al usar este
servidor, los tems pueden ser nmeros enteros individuales de la memoria, entradas, salidas en
el PLC.
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 exploracin (TS), Reloj de Tiempo
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 descripcin de los tipos de tems del M90.
Notas:
1. Tambin las letras minsculas mi, mb, inp, out, si y sb pueden ser usadas como primeros
caracteres de los nombres de tems.
2. Toda direccin es decimal.
3. Para los tems discretos INP y OUT, el ltimo digito (b) representa el bit de posicin dentro
del byte. EL bit de posicin 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 Exploracin (TSn) son de slo lectura. Los bits del
Sistema (SBn), Enteros del Sistema (Sin) son de Lectura y Escritura dependiendo de cmo 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 slo escritura.
5. El tem de Reloj (CLOCK) tiene el siguiente formato:
HH:mm:ss ddd DD/MM/AA, donde
HH hora (023);
mm minutos (059);
ss segundos (059);
ddd da de la semana (Lun, Mar, Mier, Jue, Vier, Sab, Dom);
DD da del mes (131);
MM mes (112);
AA 2 ltimos dgitos del ao.
6. Los tems RTC y CLOCK no actan como tems generales. RTC es un tem de slo escritura
que provee el control de lectura-escritura de tem CLOCK. Los siguientes valores del RTC son:
0 Posicin 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 Posicin neutral;
1 Ejecucin;
2 Alto ;
3 Inicio de Memoria y Reajuste;
4 Reajuste ;
5 Switch el BootStrap .
El tem ERRORCOUNT es un tem entero de slo lectura usado para accesar el nmero de tems
activos con errores en un tpico correspondiente. El rango de valores vlidos es desde 0 a
2147483647.
ERRORITEMS
El tem ERRORITEMS es un tem entero de slo lectura y escritura (nico por cada tpico)
usado para accesar el total de nmeros de tems con nombre invlidos (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 vlidos es desde 0 a 2147483647.
WRITECOUNT
El tem WRITECOUNT es un tem entero de slo lectura usado para accesar el nmero de
comandos escritos (mensajes) esperando la ejecucin. El rango de valores vlidos 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 introduccin de un nuevo valor) slo 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 comunicacin con un tpico
separado. Si la aplicacin cambia el valor de SUSPEND de 0 a 1, entonces la comunicacin con
el tpico es suspendida. Si el valor de SUSPEND es cambiado de nuevo a 0 la comunicacin con
el tpico es reasumida.
Nota: Si el tpico es suspendido ajustando el valor de SUSPEND a 1, entonces el servidor vuelve
a expulsar todo nuevo valor escrito a este tpico; ningn nuevo mensaje escrito es creado
despus de que SUSPEND ha cambiado de 0 a 1.
escribe Proceso_# y un nmero de contador por defecto, esto con el fin de crear varios carpetas
con diferentes estructuras emulando los departamentos o secciones de una planta.
Despus se selecciona un botn con un smbolo ?, 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 botn de probar y habilita un botn de crear. Otro TEdit es destinado para la etiqueta
del registro, que es introducida por el usuario o aparece Registro_# y un nmero de contador por
defecto, esto con el fin de identificar la relacin de cada registro con el elemento de la planta.
Cuando el usuario ha seleccionado el registro a crear, simplemente presiona el botn 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 funcin seguir las coordenadas del mouse
e introducirlas a variables, cuando el motn de mouse es presionado entra en accin el evento
OnMouseDown que tiene como funcin capturar en las variables la posicin en el instante
respectivo. Seguidamente se da la creacin dinmica 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 ms 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 carcter dinmico y ocupan ser actualizados, lo que hace necesitar mucha memoria en la
ejecucin 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
Mtodo de programacin grfica, que se designa como propiedad a algn objeto.
4.2 Recomendaciones
BIBLIOGRAFA
Pginas web:
1. Grupo Master. El PLC. http://www.grupo-
maser.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 Concepcin. Protocolos. http://inf.udec.cl/~yfarran/web-
redes/protocolos/redes03.htm.
5. Caldern, J. LABORATORIO VIRTUAL PARA LA ENSEANZA DE
AUTOMATIZACIN E INSTRUMENTACIN 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 Espaa. OLE en Windows. http://www.iespana.es/perl-es/OLE.htm.
8. Martnez, M. Cliente OPC realizado en Visual Basic .NET .
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art123.asp.
9. Omron Espaa. 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.
ANEXOS
UniScada y
Uni_HMI
Manual del
Usuario
Elaborado por:
Alexander Barrantes Muoz
Tabla de Contenidos
Introduccin.......3
Requerimientos Mnimos..........3
Instalacin..........4
Descripcin del Ambiente Grfico de UniScada..........5
Descripcin de los iconos de la barra de herramientas....5
Descripcin de la pantalla de Conexin......6
Ejecucin Offline de UniScada.........7
Ejecucin Online de UniScada........11
Ejecucin Uni_HMI....13
Introduccin
Este programa tiene como objetivo servir de interfaz HMI (Humano-maquina), es una
aproximacin y un ejemplo de los programas que existen en el mercado denominados SCADA
(software supervisor que realiza la adquisicin de datos desde PLC hacia una PC comnmente).
Este software esta dirigido nicamente a los modelos M90 y Vision 230 de la familia de
PLCs (Controladores Lgicos Programables) de la compaa Unitronics.
Su funcionamiento se basa en la utilizacin de enlaces OLE (enlace e inclusin de
objetos) de Windows, estableciendo una comunicacin entre un servidor OPC (OLE para control
de procesos) de la compaa Unitronics y como cliente Excel, que es controlado por debajo por
esta aplicacin. Por lo que por medio del protocolo de comunicacin DDE (intercambio de datos
dinmico), es posible que se puedan leer y escribir los registros internos del PLC.
Esta clase de programas (HMI) permiten una forma confortable, amigable y grfica 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 configuracin
y creacin, en donde se determina el modelo de PLC a usar en la aplicacin 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 Mnimos
Instalacin
Antes de ejecutar el programa, se debe instalar el Servidor OPC de Unitronics, en donde
despus de colocar el disco y dar un click en OPC Server Install, automticamente se dan
los pasos para su instalacin. Recuerde definir los trminos en el Servidor OPC, tal como se
indica en la seccin 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 segn su
comodidad y se da un click en los iconos UniScada o en Uni_HMI, segn se desee, para su
ejecucin (ver figura N 1).
*Estos procedimientos tambin aparecen con sus respectivos nombres en la seccin de Archivo en la barra de
men principal (ver figura N 2).
**Nota: Se especificar con detalle en las secciones Ejecucin Offline y Online de UniScada.
El programa posee algunas restricciones por seguridad a que este no presente errores en
tiempo de ejecucin, tales como la deshabilitacin de la operacin de abrir, si se ha empezado ya
a trabajar (si ya hay por lo menos una pgina creada), entre otras.
Figura N 4 Pantalla de Nueva Pgina y de Advertencia de seleccin de posicin de los registros de UniScada
3) Modelo del PLC: En esta seccin 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, ntese que se debe dar un click a la opcin
que se desea, en caso contrario se trabajar con el Vision 230 por defecto.
Despus de que se eligieron los puntos anteriores, se puede elegir el modo de ejecucin del
programa de forma simple, si se quiere trabajar online se presiona el botn 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 grficamente 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 Pgina y se
comienza la configuracin de los diferentes registros, como se explica ms adelante.
Para trabajar offline se obvian los pasos anteriores y se empiezan a trabajar simplemente
dando un click al botn de Nueva Pgina, al igual que en modo online, se comienza la
configuracin de los diferentes registros.
Para evitar conflictos entre estos modos de operacin, cuando se empieza a trabajar offline se
deshabilita el botn de conexin (OK) y as no poderse pasar a trabajar online, o de igual manera
el programa restringe la operacin en offline si se empieza a trabajar online.
Los pasos para trabajar en modo online en un Nuevo Proyecto se citan en forma puntal de
forma siguiente:
1) Ejecute la aplicacin UniScada (ver figura N 1).
2) Digite la direccin 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 instalacin se haya modificado esta direccin, se necesita cambiar.
3) Digite el nombre del tpico 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 botn OK de la pantalla de conexin y se espera a que UniScada abra el OPC
Server de Unitronics, por lo que mientras que este paso se realiza se mostrar
grficamente 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 Pgina y digite el nombre del Proceso (etiqueta que
identifica la cejilla de la subseccin del proyecto), generalmente tiene como objetivo
identificar el proceso de control asociado con los registros que se desean monitorear en
una seccin especfica, Si no digita ninguna el programa lo identificar como Proceso_1.
7) Seleccione el icono de Nuevo Registro. Esto har aparecer una pantalla de
configuracin en donde define el registro a monitorear que ser insertado en la pgina
seleccionada (La pgina se selecciona dando un click a la cejilla con una etiqueta
asociada, o si no es automticamente selecciona la ltima pgina 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 accin aparece
el rango de valores permitidos para dicho registro, tenga cuidado de no digitar un valor
fuera del rango respectivo, pues causara errores. Inclusive an digitando un valor
permitido dentro del rango que aparece, podra haber algn error, pues este rango
representa los valores posibles pero no los habilitados.
Ejecucin de Uni_HMI
Los pasos para trabajar con el programa Uni_HMI se citan en forma puntal de forma
siguiente:
1) Ejecute la aplicacin Uni_HMI (ver figura N 1).
2) Digite la direccin 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 instalacin se haya modificado esta direccin, se necesita cambiar.
3) Digite el nombre del tpico que configur o quiere configurar en el Servidor OPC de
Unitronics.
4) Presionar el botn OK de la pantalla de conexin y se espera a que Uni_HMI abra el
OPC Server de Unitronics, por lo que mientras que este paso se realiza se mostrar
grficamente 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 opcin de Abrir Archivo.
5) Para Abrir un proyecto ya creado, presione el botn 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 opcin de Salir dando un click en el botn de salir en la esquina superior
derecha de la pantalla para salir del programa y cerrar todas las aplicaciones
complementarias al mismo
CODIGO FUENTE
unit Main; ToolButton5: TToolButton;
SaveDialog: TSaveDialog;
interface N_Pag: TToolButton;
ToolButton6: TToolButton;
uses Windows, SysUtils, Classes, Graphics, Forms, procedure FileNew1Execute(Sender: TObject);
Controls, Menus, procedure FileOpen1Execute(Sender: TObject);
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, procedure HelpAbout1Execute(Sender: TObject);
ComCtrls, StdActns, procedure FileExit1Execute(Sender: TObject);
ActnList, ToolWin, ImgList, isapiapp; procedure Nueva_PaginaClick(Sender: TObject);
procedure N_PagClick(Sender: TObject);
type procedure DeshacerClick(Sender: TObject);
TMainForm = class(TForm) procedure Registros_GralClick(Sender: TObject);
MainMenu1: TMainMenu; procedure abilitar(modificado :boolean);
File1: TMenuItem; procedure FileSaveItemClick(Sender: TObject);
FileNewItem: TMenuItem; procedure ToolButton2Click(Sender: TObject);
FileOpenItem: TMenuItem; procedure FormCreate(Sender: TObject);
Help1: TMenuItem; private
N1: TMenuItem; { Private declarations }
FileExitItem: TMenuItem; public
HelpAboutItem: TMenuItem; { Public declarations }
OpenDialog: TOpenDialog; end;
FileSaveItem: TMenuItem;
StatusBar: TStatusBar; var
ActionList1: TActionList; MainForm: TMainForm;
EditCut1: TEditCut; Contaetiq, contnew : integer;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste; implementation
FileNew1: TAction;
FileSave1: TAction; {$R *.DFM}
FileExit1: TAction;
FileOpen1: TAction; uses ChildWin, About, vpal, configuracion, procesos;
FileSaveAs1: TAction; {
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal; }
WindowArrangeAll1: TWindowArrange; procedure TMainForm.FileNew1Execute(Sender:
WindowMinimizeAll1: TWindowMinimizeAll; TObject);
HelpAbout1: TAction; var
FileClose1: TWindowClose; i : integer;
WindowTileVertical1: TWindowTileVertical;
ToolBar2: TToolBar; begin
ToolButton1: TToolButton; for i:= (V_Ppal.ComponentCount - 1) downto 15
ToolButton2: TToolButton; do
ToolButton3: TToolButton; begin
ToolButton9: TToolButton; DeshacerClick(Sender);
ToolButton7: TToolButton; end;
ImageList1: TImageList; abilitar(false);
Deshacer: TToolButton; ToolButton1.Enabled := true;
Registros_Gral: TToolButton; FileOpenItem.Enabled := true;
FileSave1.Enabled := true;
} FileSaveItem.Enabled := true;
procedure TMainForm.DeshacerClick(Sender: ToolButton2.Enabled := true;
TObject); end
var else
i : integer; begin
objeto : TObject; FileSave1.Enabled := false;
begin FileSaveItem.Enabled := false;
{Proceso para Undo} ToolButton2.Enabled := false;
if ((V_Ppal.ComponentCount - 1) > 15) then end;
begin end;
i:= V_Ppal.ComponentCount-1; {Fin del programa}
{Deteccin de tipo de elemento a borrar} procedure TMainForm.FileSaveItemClick(Sender:
{Si es un Hoja} TObject);
if ((V_Ppal.Components[i] is TTabSheet) and var
(vpal.numpag > 0)) then Arch : TextFile;
vpal.numpag := vpal.numpag -1 temp : integer;
else
{Si es un Label} begin
if ((V_Ppal.Components[i] is TLabel) and SaveDialog.Execute;
(vpal.contreg > 0)) then assignfile(Arch,(SaveDialog.FileName)+'.usd');
begin rewrite(Arch);
vpal.reg[contreg].numpag := 0; for temp := 1 to vpal.contreg do
vpal.contreg := vpal.contreg - 1; begin
end; writeln(Arch,vpal.reg[temp].numpag);
{Eliminar el elemento} writeln(Arch,vpal.reg[temp].pagina);
objeto := (V_Ppal.Components[i] as Tobject); writeln(Arch,vpal.reg[temp].nombre);
objeto.Free; writeln(Arch,vpal.reg[temp].contenido);
end; writeln(Arch,vpal.reg[temp].posx);
end; writeln(Arch,vpal.reg[temp].posy);
{ writeln(Arch);
Reliza: Llama a el dialogo de Configuracin end;
Recibe: ninguno closefile(Arch);
Evia: ninguno end;
}
procedure TMainForm.Registros_GralClick(Sender: procedure TMainForm.ToolButton2Click(Sender:
TObject); TObject);
begin begin
if (vpal.activado = false) then FileSaveItemClick(Sender);
V_Ppal.OK.Enabled := false; end;
Config.Show;
end; procedure TMainForm.FormCreate(Sender:
TObject);
begin
procedure TMainForm.abilitar(modificado : contnew := 0;
boolean); end;
begin
if (modificado = true) then end.
begin
unit vpal;
type
interface registro = record
numpag : integer; {Contiene el numero de pgina}
uses pagina : string; {Contiene el nombre de la pagina}
Windows, Messages, SysUtils, Classes, Graphics, nombre : string; {lleva el nombre del item}
Controls, Forms, Dialogs, contenido : string; {lleva la funcion para
Menus, Excel97, ComCtrls, StdCtrls, OleServer, conexion}
ShellApi, ExtCtrls, jpeg, posx, posy : integer; {coordenadas del item}
syncobjs; end;
type
TV_ppal = class(TForm) var
PageCPpal: TPageControl; V_ppal: TV_ppal;
Conexion: TTabSheet;
OK: TButton; {Conexion}
Direccion: TEdit; WorkBk : _WorkBook;
Unidad: TEdit; WorkSt : _WorkSheet;
Label1: TLabel; IIndex : OleVariant;
Label2: TLabel;
Label3: TLabel; {Datos de Usuario}
EA1: TExcelApplication; Direc : Pchar; { Direccin Fsica del Archivo}
GroupBox1: TGroupBox; Unid, nombrepag, nomlabel, formula : String; {
PBar: TProgressBar; Unidad a la cual se va a conectar}
Image2: TImage; cont, Suspencion, Estado : integer; { Estado de la
Temporizador: TTimer; conecxion}
ListBox: TListBox; est, activo, activado: boolean; {estados del reloj para
ImagenDes: TImage; OPC Server}
ImagenCon: TImage; numpag: Integer; {almacena el numero de pagina}
LModelo: TLabel; reg : array [1..100] of registro; {}
Modelo: TListBox; nuevo, contreg : integer;
procedure Salir1Click(Sender: TObject); posx, posy : integer;
procedure OKClick(Sender: TObject);
procedure CancelClick(Sender: TObject);
procedure TemporizadorTimer(Sender: TObject);
procedure NuevaPgina1Click(Sender: TObject); implementation
procedure CrearNuevaPag();
procedure Press_Clic(Sender: TObject; Button: uses procesos, main;
TMouseButton;
Shift: TShiftState; X, Y: Integer); {$R *.DFM}
Procedure CargarNuevaPag(nombre : string);
Procedure CargarNuevoElemento(X,Y :integer; procedure TV_ppal.Salir1Click(Sender: TObject);
Nom : string); begin
Function NuevaCorde(cord :integer): integer; V_ppal.Close; {Cerrar el sistema}
private end;
{ Private declarations }
public procedure TV_ppal.OKClick(Sender: TObject);
{ Public declarations } var
end; buscar : Integer;
end PageCPpal.ActivePageIndex:=
else (PageCPpal.Pages[numpag].PageIndex);
activado := true; numpag := numpag + 1;
end; end;
end; {
Realiza: Captura los datos de la coordenadas del
mouse en
procedure TV_ppal.NuevaPgina1Click(Sender: el lugar en que se dio el clic, muestra un
TObject); mensage
begin de la localizacion del puntero del muose.
// Crear una pgina nueva Envia: nada.
Nombre_proceso.Show; Recibe: Un objeto, el boton precionado, las
end; coordenadas X Y y el estado.
}
Procedure TV_ppal.CrearNuevaPag(); procedure TV_ppal.Press_Clic(Sender: TObject;
begin Button: TMouseButton;
main.MainForm.abilitar(true); Shift: TShiftState; X, Y: Integer);
with PageCPpal do
with TTabSheet.Create(Self) do var
begin hoja : TTabSheet;
PageControl := PageCPpal;
Name := 'Proceso_' + begin
IntToStr(Pages[numpag].PageIndex); posy := Y;
Caption := nombrepag; posx := X;
numpag := numpag + 1; if (nuevo = 1) then
OnMouseDown := Press_Clic; begin
end; nuevo := 0;
if (activo = true) then contreg := contreg + 1;
PageCPpal.ActivePageIndex:= reg[contreg].nombre := nomlabel;
(PageCPpal.Pages[numpag-1].PageIndex) Self.Name := 'Label_'+IntToStr(cont);
else with TLabel.Create(Self) do
PageCPpal.ActivePageIndex:= begin
(PageCPpal.Pages[numpag].PageIndex) Caption := nomlabel;
end; hoja := TTabSheet(PageCPpal.ActivePage);
Parent:= hoja;
Procedure TV_ppal.CargarNuevaPag(nombre : with hoja do
string); begin
begin reg[contreg].pagina := Caption;
main.MainForm.abilitar(true); end;
with PageCPpal do reg[contreg].numpag :=
with TTabSheet.Create(Self) do PageCPpal.ActivePageIndex;
begin Left:=NuevaCorde(posx);
PageControl := PageCPpal; reg[contreg].posx := Left;
Name := 'Proceso_' + Top:=NuevaCorde(posy);
IntToStr(Pages[numpag].PageIndex); reg[contreg].posy := Top;
Caption := nombre; Autosize := True;
OnMouseDown := Press_Clic; reg[contreg].contenido := formula;
end; end;
ListBox.Items.InsertObject(0,Self.Name,Self as end.
TObject); unit configuracion;
end;
end; interface
Procedure TV_ppal.CargarNuevoElemento(X,Y uses
:integer; Nom : string); Windows, Messages, SysUtils, Classes, Graphics,
var Controls, Forms, Dialogs,
hoja : TTabSheet; ExtCtrls, OleServer, Excel97, StdCtrls, Comctrls;
begin type
contreg := contreg + 1; TConfig = class(TForm)
Self.Name := 'Label_'+IntToStr(contreg); LBRegistro: TListBox;
with TLabel.Create(Self) do AEvaluar: TEdit;
begin Rango2: TEdit;
PageCPpal.ActivePageindex := Valor: TEdit;
PageCPpal.PageCount -1; Probar: TButton;
hoja := TTabSheet(PageCPpal.ActivePage); Crear: TButton;
Parent:= hoja; Rango: TLabel;
Left:= X; LRang: TLabel;
Top:= Y; EA1: TExcelApplication;
Autosize := True; Timer1: TTimer;
Caption := Nom; Label1: TLabel;
end; Etiqueta: TEdit;
ListBox.Items.InsertObject(0,Self.Name,Self as procedure LBRegistroClick(Sender: TObject);
TObject); procedure ProbarClick(Sender: TObject);
end; procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
Function TV_PPAL.NuevaCorde(cord : procedure CrearClick(Sender: TObject);
integer):integer; procedure FormShow(Sender: TObject);
begin procedure Formula();
while (cord mod 20 <> 0) do private
cord := cord - 1; { Private declarations }
NuevaCorde := cord; public
end; { Public declarations }
end;
end. // Fin de programa
program PFinal; var
Config: TConfig;
uses activac, activado: boolean;
Forms, Selec, Unid : String;
VPal in 'D:\Proyecto\VPal.pas' {V_ppal}; WorkBk : _WorkBook;
WorkSt : _WorkSheet;
{$R *.RES} IIndex : OleVariant;
modelo, a, contaetiq : integer;
begin
Application.Initialize;
Application.CreateForm(TV_ppal, V_ppal); implementation
Application.Run;
end; begin
end; {Jale el dato tipo ID}
end; WorkSt.Cells.Item[2,1] :=
{Si se selecciona Status, Suspend, ID} '=Unitronics|'+vpal.Unid+'!ID';
if ((Selec = 'STATUS') or (Selec = 'SUSPEND') or vpal.formula := '=Unitronics|'+vpal.Unid+'!ID';
(Selec = 'ID')) then end;
begin {Si el dato es tipo Suspend}
Rango.Visible := False; if (Selec = 'SUSPEND') then
AEvaluar.Visible := False; {desactivar la begin
visibilidad ya que son 1 0} {Jale el dato tipo suspend}
end; WorkSt.Cells.Item[2,1] :=
{Si se selecciona Updateinterval} '=Unitronics|'+vpal.Unid+'!SUSPEND';
if (Selec = 'UPDATEINTERVAL') then vpal.formula :=
begin '=Unitronics|'+vpal.Unid+'!SUSPEND';
Rango.Caption := '(10 - 2147983647)'; {Rango} end;
AEvaluar.SetFocus; {foco} if ((Selec = 'INP') and (modelo = 0)) then
end; if ((integer(AEvaluar.text) > 0) and
{Si se selecciona Maxinterval, itemcount, (integer(AEvaluar.text) < 10 )) then
errorcount, erroitems, writecount} begin
if ((Selec = 'MAXINTERVAL') or (Selec = val2 := string(Rango2.text);
'INTEMCOUNT') or (Selec = 'ERRORCOUNT')or val := string(Aevaluar.text);
(Selec = 'ERRORITEMS') or (Selec = WorkSt.Cells.Item[2,1] :=
'WRITECOUNT')) then '=Unitronics|'+vpal.Unid+'!'+#39+'INP0'+val+','+val2
begin +#39;
Rango.Caption := '(0 - 2147983647)'; {rango} vpal.formula :=
AEvaluar.SetFocus; {foco} '=Unitronics|'+vpal.Unid+'!'+#39+'INP0'+val+','+val2
end; +#39;
end; end
else
procedure TConfig.ProbarClick(Sender: TObject); begin
var val2 := string(Rango2.text);
val, val2 : string; val := string(Aevaluar.text);
begin WorkSt.Cells.Item[2,1] :=
{Generacion del workbook} '=Unitronics|'+vpal.Unid+'!'+#39+'INP'+val+','+val2+
WorkBk := EA1.Workbooks.Item[1]; #39;
{Generacin del worksheet} vpal.formula :=
WorkSt := WorkBk.WorkSheets.Get_Item(1) as '=Unitronics|'+vpal.Unid+'!'+#39+'INP'+val+','+val2+
_Worksheet; #39;
{Si el campo es tipo estatus} end
if (Selec = 'STATUS') then else
begin if ((Selec = 'OUT') and (modelo = 0)) then
{Jale el dato tipo estatus} if ((integer(AEvaluar.text) > 0) and
WorkSt.Cells.Item[2,1] := (integer(AEvaluar.text) < 10 )) then
'=Unitronics|'+vpal.Unid+'!STATUS'; begin
vpal.formula := val2 := string(Rango2.text);
'=Unitronics|'+vpal.Unid+'!STATUS'; val := string(Aevaluar.text);
end; WorkSt.Cells.Item[2,1] :=
{Si el dato es tipo ID} '=Unitronics|'+vpal.Unid+'!'+#39+'OUT0'+val+','+val
if (Selec = 'ID') then 2+#39;
vpal.formula := begin
'=Unitronics|'+vpal.Unid+'!'+#39+'OUT0'+val+','+val buffer := Unid;
2+#39; end;
end Unid := buffer;
else EA1.Connect;
begin EA1.Workbooks.Add(xlWBatWorkSheet,0);
val2 := string(Rango2.text); WorkBk := EA1.Workbooks.Item[1];
val := string(Aevaluar.text); contaetiq := 1;
WorkSt.Cells.Item[2,1] := end;
'=Unitronics|'+vpal.Unid+'!'+#39+'OUT'+val+','+val2
+#39; procedure TConfig.CrearClick(Sender: TObject);
vpal.formula := var
'=Unitronics|'+vpal.Unid+'!'+#39+'OUT'+val+','+val2 fila, columna : integer;
+#39;
end begin
else if (vpal.V_ppal.PageCPpal.ActivePageIndex = 0)
begin then
val := string(Aevaluar.text); begin
WorkSt.Cells.Item[2,1] := if (Application.messagebox( 'Favor Crear una
'=Unitronics|'+vpal.Unid+'!'+Selec+val; Pgina','Error',MB_OK + MB_DEFBUTTON1)) =
vpal.formula := IDOK then
'=Unitronics|'+vpal.Unid+'!'+Selec+val; Config.Close;
end; end
activado := true; else
activac := true; begin
a := 1; if (vpal.V_ppal.PageCPpal.ActivePageIndex = 0)
end; then
begin
procedure TConfig.Timer1Timer(Sender: TObject); V_Ppal.NuevaPgina1Click(self);
begin end;
if (activac = true) then nuevo := 1;
activac := false columna :=
else vpal.V_ppal.PageCPpal.ActivePageIndex;
if (activado = true) then fila := vpal.contreg;
begin vpal.nomlabel := Etiqueta.Text;
WorkSt := WorkBk.WorkSheets.Get_Item(1) if Vpal.activado = true then
as _Worksheet; WorkSt.Cells.Item[fila+1,columna+1] :=
Valor.Text := WorkSt.Cells.Item[2,1]; vpal.formula
Crear.Enabled := True; else
end; Formula();
end; contaetiq := contaetiq + 1;
Application.MessageBox('Favor dar clic en donde
procedure TConfig.FormCreate(Sender: TObject); quiera que est el objeto',
var 'Atencin!!',MB_OK + MB_DEFBUTTON1);
buffer : string; Close;
cont : integer; end;
end;
begin
with V_Ppal do procedure TConfig.FormShow(Sender: TObject);
begin
AEvaluar.Text := ''; var
Valor.Text := ''; Form1: TForm1;
Etiqueta.Text := 'Registro_'+inttostr(contaetiq); activado: integer;
if vpal.activado = true then
begin implementation
Crear.Enabled := False;
Probar.Visible := True; {$R *.DFM}
Valor.Visible := True;
end procedure TForm1.LBRegistroClick(Sender:
else TObject);
begin begin
Crear.Enabled := True; { Poner en invisible las edits Rango2 y Aevaluar, y
Probar.Visible := False; el label LRang}
Valor.Visible := False; Rango2.Visible := False;
end; LRang. Visible := False;
activado := false; AEvaluar.Visible := True;
end; { Obtiene el objeto selecionado en el list box}
for i := 0 to (LBRegistro.Items.Count - 1) do
end. // Fin del programa begin
unit cionfiguracion; if LBRegistro.Selected[i] then
Selec := LBRegistro.Items[i]
interface end;
{si se selecciona MB}
uses if (Selec = 'MB') then
Windows, Messages, SysUtils, Classes, Graphics, begin
Controls, Forms, Dialogs, Rango.Caption := '(0 - 1023)'; {Delimitrar el
ExtCtrls, OleServer, Excel97, StdCtrls; rango}
AEvaluar.SetFocus; {Envirle el foco al edit}
type end;
TForm1 = class(TForm) {Si se selecciona MI, SI, SB}
LBRegistro: TListBox; if ((Selec = 'MI') or (Selec = 'SI') or (Selec = 'SB'))
AEvaluar: TEdit; then
Rango2: TEdit; begin
Valor: TEdit; Rango.Caption := '(0 - 225)'; {Rango}
Probar: TButton; AEvaluar.SetFocus; {Foco}
Button1: TButton; end;
Rango: TLabel; { Si se selecciona INP, OUT}
Label1: TLabel; if ((Selec = 'INP') or (Selec = 'OUT')) then
EA1: TExcelApplication; begin
Timer1: TTimer; Rango.Caption := '(00 - 63)'; {Rango inicial}
procedure LBRegistroClick(Sender: TObject); AEvaluar.SetFocus; {Foco}
procedure ProbarClick(Sender: TObject); { Alteraciones en stado de las cosas}
procedure Timer1Timer(Sender: TObject); Rango2.Visible := True;
private LRang. Visible := True;
{ Private declarations } end;
public { Si se selecciona TC, TP, TS}
{ Public declarations } if ((Selec = 'TC') or (Selec = 'TP') or (Selec = 'TS'))
end; then
begin WorkSt.Cells.Item[1,2] :=
Rango.Caption := '(0 - 63)'; {Rango} '=Unitronics|'+Unid+'!ID';
AEvaluar.SetFocus; {Foco} end;
end; {Si el dato es tipo Suspend}
{Si se selecciona Status, Suspend, ID} if (Selec = 'SUSPEND') then
if ((Selec = 'STATUS') or (Selec = 'SUSPEND') or begin
(Selec = 'ID')) then {Jale el dato tipo suspend}
begin WorkSt.Cells.Item[1,2] :=
AEvaluar.Visible := False; {desactivar la '=Unitronics|'+Unid+'!SUSPEND';
visibilidad ya que son 1 0} end;
end; if (Selec = 'INP') then
{Si se selecciona Updateinterval} if ((integer(AEvaluar.text) > 0) and
if (Selec = 'UPDATEINTERVAL') then (integer(AEvaluar.text) < 10 )) then
begin begin
Rango.Caption := '(10 - 2147983647)'; {Rango} val2 := string(Rango2.text);
AEvaluar.SetFocus; {foco} val := string(Aevaluar.text);
end; WorkSt.Cells.Item[1,2] :=
{Si se selecciona Maxinterval, itemcount, '=Unitronics|'+Unid+'!INP0'+val+','+val2;
errorcount, erroitems, writecount} end
if ((Selec = 'MAXINTERVAL') or (Selec = else
'INTEMCOUNT') or (Selec = 'ERRORCOUNT')or begin
(Selec = 'ERRORITEMS') or (Selec = val2 := string(Rango2.text);
'WRITECOUNT')) then val := string(Aevaluar.text);
begin WorkSt.Cells.Item[1,2] :=
Rango.Caption := '(0 - 2147983647)'; {rango} '=Unitronics|'+Unid+'!INP'+val+','+val2;
AEvaluar.SetFocus; {foco} end;
end; if (Selec = 'OUT') then
end; if ((integer(AEvaluar.text) > 0) and
(integer(AEvaluar.text) < 10 )) then
procedure TForm1.ProbarClick(Sender: TObject); begin
var val2 := string(Rango2.text);
val, val2 : string; val := string(Aevaluar.text);
begin WorkSt.Cells.Item[1,2] :=
{Generacion del workbook} '=Unitronics|'+Unid+'!OUT0'+val+','+val2;
WorkBk := EA1.Workbooks.Item[1]; end
{Generacin del worksheet} else
WorkSt := WorkBk.WorkSheets.Get_Item(1) as begin
_Worksheet; val2 := string(Rango2.text);
{Si el campo es tipo estatus} val := string(Aevaluar.text);
if (Selec = 'STATUS') then WorkSt.Cells.Item[1,2] :=
begin '=Unitronics|'+Unid+'!OUT'+val+','+val2;
{Jale el dato tipo estatus} end
WorkSt.Cells.Item[1,2] := else
'=Unitronics|'+Unid+'!STATUS'; begin
end; val := string(Aevaluar.text);
{Si el dato es tipo ID} WorkSt.Cells.Item[1,2] :=
if (Selec = 'ID') then '=Unitronics|'+Unid+'!'+Selec+val;
begin end;
{Jale el dato tipo ID} activado := true;
var end.
Nombre_Proceso: TNombre_Proceso; nit UniHMI;
implementation interface
uses vpal; uses
Windows, Messages, SysUtils, Classes, Graphics,
{$R *.DFM} Controls, Forms, Dialogs,
Menus, Excel97, ComCtrls, StdCtrls, OleServer,
procedure TNombre_Proceso.OKClick(Sender: ShellApi, ExtCtrls, jpeg,
TObject); syncobjs;
begin
end;
type
TV_ppal = class(TForm)
PageCPpal: TPageControl; var
Conexion: TTabSheet; V_ppal: TV_ppal;
OK: TButton;
Direccion: TEdit; {Conexion}
Unidad: TEdit; WorkBk : _WorkBook;
Label1: TLabel; WorkSt : _WorkSheet;
Label2: TLabel; IIndex : OleVariant;
Label3: TLabel;
EA1: TExcelApplication; {Datos de Usuario}
GroupBox1: TGroupBox; Direc : Pchar; { Direccin Fsica del Archivo}
PBar: TProgressBar; Unid, nombrepag, nomlabel, formula : String; {
Image2: TImage; Unidad a la cual se va a conectar}
Temporizador: TTimer; cont, Suspencion, Estado : integer; { Estado de la
ListBox: TListBox; conecxion}
ImagenDes: TImage; est, activo, activado: boolean; {estados del reloj para
ImagenCon: TImage; OPC Server}
Abrir: TButton; numpag: Integer; {almacena el numero de pagina}
OpenDialog: TOpenDialog; reg : array [1..100] of registro; {}
procedure Salir1Click(Sender: TObject); nuevo, contreg : integer;
procedure OKClick(Sender: TObject); posx, posy : integer;
procedure CancelClick(Sender: TObject);
procedure TemporizadorTimer(Sender: TObject);
procedure NuevaPgina1Click(Sender: TObject);
procedure CrearNuevaPag(); implementation
procedure Press_Clic(Sender: TObject; Button:
TMouseButton; {$R *.DFM}
Shift: TShiftState; X, Y: Integer);
Procedure CargarNuevaPag(nombre : string); procedure TV_ppal.Salir1Click(Sender: TObject);
Procedure CargarNuevoElemento(X,Y :integer); begin
procedure AbrirClick(Sender: TObject); V_ppal.Close; {Cerrar el sistema}
procedure FormClose(Sender: TObject; var end;
Action: TCloseAction);
private procedure TV_ppal.OKClick(Sender: TObject);
{ Private declarations } var
public buscar : Integer;
{ Public declarations } begin
end; numpag := 1;
Direc := Addr(Direccion.Text[1]); { Cargar el
type nombre de la apliucacin}
registro = record Unid := Unidad.text; { Cargar la unidad a ejecutar}
numpag : integer; {Contiene el numero de pgina}
pagina : string; {Contiene el nombre de la pagina} ShellExecute(V_ppal.Handle,'open',Direc,nil,nil,SW_
nombre : string; {lleva el nombre del item} SHOWMINIMIZED);
contenido : string; {lleva la funcion para { Ejecutar el metodo de conexin}
conexion}
posx, posy : integer; {coordenadas del item} While (activo = false) do
ListBox.Items.InsertObject(0,Self.Name,Self as
TObject); CargarNuevoElemento(reg[temp].posx,reg[temp].pos
end; y);
WorkSt.Cells.Item[temp,reg[temp].numpag +1] :=
procedure TV_ppal.AbrirClick(Sender: TObject); reg[temp].contenido;
var temp := temp +1;
Arch : TextFile; end;
temp, auxi : integer; closefile(Arch);
abrir.Enabled := false;
begin end
if (activado = true) then else
begin ShowMessage('Favor conectarse Primero');
OpenDialog.Execute; end;
AssignFile(Arch,(Opendialog.FileName));
Reset(Arch); procedure TV_ppal.FormClose(Sender: TObject; var
temp := 1; Action: TCloseAction);
while (not(EOF(Arch))) do var
begin cerrar:integer;
Readln(Arch,reg[temp].numpag); begin
Readln(Arch,reg[temp].pagina); cerrar:=FindWindow(nil,'UNITRONICS');
Readln(Arch,reg[temp].nombre); if (cerrar = 0) then
Readln(Arch,reg[temp].Contenido); ShowMessage('No encuentro el servidor
Readln(Arch,reg[temp].posx); Unitronics Ejecutandose')
Readln(Arch,reg[temp].posy); else
Readln(Arch); SendMessage(cerrar,WM_CLOSE,0,0);
if (reg[temp].numpag > auxi) then EA1.Workbooks.Close(0);
begin EA1.Disconnect;
auxi := reg[temp].numpag; end;
CargarNuevaPag(reg[temp].pagina);
end; end. // Fin de programa