OPCAutomation
OPCAutomation
de OPC (clásica)
Rogelio Mazaeda
Eusebio de la Fuente
Objetivo
Brinda procedimientos y
herramientas estándares para
acceder a los datos desde
diferentes fuentes procedentes de
distintos fabricantes, sustituyendo
la situación previa en la que una
proliferación de protocolos y
tecnologías propietarias
incompatibles hacía muy difícil la
necesaria integración.
Introducción Ventajas de OPC:
Desarrollo histórico
Conviven el OPC clásico (con una gran base instalada industrial) con el OPC-UA, mucho
más poderoso pero más complejo. Una cierta inercia para hacer la transición aunque en los
últimos años el proceso se acelera. Existen métodos para convertir OPC clásico en UA con
unas mínimas funcionalidades
Introducción
Principales estándares OPC
Denominación Funcionalidad
OPC DA* Acceso a datos actuales codificados en binario
OPC AE Tratamiento de alarmas y Eventos
OPC HDA Acceso a datos históricos (series temporales)
OPC BATCH Tiene en cuenta peculiaridades de procesos por
lotes
OPC Security Diferentes niveles y políticas de cíber-seguridad
OPC DX Intercambio directo de datos entre servidores
OPC XML-DA Acceso a datos formato texto XML (a diferencia del
original formato binario)
OPC UA* Arquitectura Unificado: intención de integrar y
superar los estándares previos
*No todos han tendido igual repercusión. OPC DA (clásico) y OPC UA ha sido las más
importantes.
OPC. Modelo Cliente-Servidor
Varias aplicaciones clientes se conectan a uno o varios servidores OPC, que pueden
estar en el mismo u otro dispositivo de cómputo accesible mediante red informática,
para obtener los datos que estos últimos brindan.
OPC. Modelo Cliente-Servidor
En el caso más elemental el servidor obtiene los datos desde los dispositivos físicos
(ej: a través de interface propietaria) o pueden ser datos generados por el propio
servidor (un cálculo a partir de medidas físicas) o el servidor a su vez puede ser un
cliente de otro servidor OPC, creado jerarquía complejas, que refleja por ejemplo la
estructura de la pirámide de ISA-95.
OPC. Modelo Cliente-Servidor
Modelo cliente-servidor, tiene determinadas características generales (compara por ejemplo, con el
conocido modelos servidores web/navegadores internet (clientes)):
• El servidor expone el acceso un conjunto de datos y se pone de los requerimientos
del(los) cliente(s) (pasivo).
• El cliente tiene un papel activo, establece su “interés” sobre un conjunto de datos y toma la
iniciativa para leer o escribir sobre ellos, enviando las peticione necesarias al (los)
servidor(es)
OPC. Modelo Cliente-Servidor
Modelo cliente-servidor
Servidor OPC
Cliente 1 Item 1
Item 2
Dispositivos Físicos
Item 3
Item 4
Item 5
Item 6
…
Cliente m
Item n
Cache
El estándar OPC (tanto el clásico, como OPC UA) cumple estos requerimientos del modelo
cliente/servidor. Algunas particularidades:
• Los datos expuestos por el servidor (numéricos, cadenas de caracteres, arrays, etc) están
organizados de forma típicamente jerárquica (espacio de nombres: namespace) que en
muchos casos puede ser interrogado, sobre la marcha, por el cliente.
• El cliente puede exhibir diferentes requerimientos sobre la frecuencia y la forma de
acceder a esos datos, organizándolos en grupos con atributos diferentes.
• Aunque es cierto que el cliente tiene la iniciativa, para leer y escribir (de manera síncrona o
asíncrona) sobre las fuentes de datos individuales, también puede establecer su interés en
ser notificado (por el servidor) cuando existan cambios de suficiente consideración en
algunos datos de interés.
OPC. Mecanismo de interoperabilidad entre
aplicaciones. OPC no es un estándar de comunicación informática.
Frontera puede indicar: Tanto el cliente y el servidor pueden estar en el mismo
1) Diferente hardware digital unidos medio de cómputo (típicamente en procesos separados). Si
mediante red informática. estuvieran en ordenadores separados, utilizaría estándares
2) Diferentes procesos en un mismo de comunicación para establecer la interacción: OPC (sólo
ordenador (espacio de direcciones en este caso) pudiera considerarse como una aplicación
diferentes). (en la correspondiente capa) del modelo OSI de
3) Servidor y cliente comparten el mismo comunicación subyacente.
espacio direcciones (dll).
Modelo cliente-servidor
Servidor OPC
Cliente 1 Item 1
Item 2
Dispositivos Físicos
Item 3
Item 4
Item 5
Item 6
…
Cliente m
Item n
Cache
OPC clásico. Fundamentos
OPC debe muchas de sus características a la forma en que se desarrollo originalmente,
es por ello y por el hecho de su todavía amplia base desplegada industrialmente, que
partiremos de la descripción del OPC clásico, para finalmente destacar las diferencias
con el nuevo OPC UA.
Un cliente que acceda (mediante servicios COM) a el puntero de la interfaz podría invocar
los métodos que exporta la interfaz custom: CalculaSalida, Sintoniza y ModificaPar.
Nótese que como corresponde al modelo cliente-servidor, el cliente es el que toma la
iniciativa y hace las llamadas a los métodos correspondientes como si fueran simples
llamadas a funciones. (D)COM se encarga de “esconder” la complejidad subyacente.
El modo de actuar anterior es muy cómodo para aquella aplicaciones clientes realizadas
en C/C++, que son lenguajes dotados de la capacidad de trabajar fácilmente con
punteros.
OPC clásico. Fundamentos
Componentes:
IConnectionPointContainer::FinConnectionPoint
(Obtiene Interfaz IConnectionPoint que busca)
IConnectionPointContainer
IConnectionPoint::Advise IConnectionPoint
(Pasa dirección del sumidero)
Sumidero
(sink) Servidor llama sumidero hasta que
cuando se produzcan los eventos Objecto Conectable
hasta que el cliente llame
Cliente IConnectionPoint::UnAdvise Servidor
OPCsever
Leyenda
OPCGroups
OPCBrowser
Colecciones
OPCGroup
Objeto
Individual
OPCItems
OPCItem
OPC Automation. Jerarquía
Jerarquía de Objetos de OPC
OPCsever
OPCServer:
OPCItem
OPC Automation. Jerarquía
OPCBrowser:
Jerarquía de Objetos de OPC
Objeto opcional. Permite
recorrer el espacio de nombres
OPCsever
que ofrece un servidor OPC
específico.
OPCGroups
OPCBrowser El espacio de nombres es el
“inventario” de los nombres (o
tags) de las posibles fuentes de
OPCGroup datos que brinda determinado
servidor OPC
OPCItems
OPCItem
OPC Automation. Jerarquía
OPCGroups:
Jerarquía de Objetos de OPC
Objeto Colección que agrupa a
todos los objetos OPCGroup
OPCsever
que determinado cliente ha
registrado con un servidor OPC
específico. Implementa
OPCGroups
OPCBrowser interfaces de tipo colección o de
enumeración.
OPCGroup
OPCItems
OPCItem
OPC Automation. Jerarquía
OPCGroup:
Jerarquía de Objetos de OPC Representa un Grupo de elementos de
datos o items (uno o más) que la
aplicación cliente ha considerado
OPCsever
conveniente registrar en un mismo grupo.
Elemento fundamental de la Jerarquía
OPC.
OPCGroups
OPCBrowser Los criterios para crear los grupos son
decididos por las necesidades de la
aplicación cliente.
OPCGroup Un item puede formar parte
simultáneamente de varios grupos.
OPCItems
OPCItem
OPC Automation. Jerarquía
OPCsever
OPCItems:
OPCGroups
Un objeto colección que
OPCBrowser contiene los items de
determinado Grupo.
OPCGroup
OPCItems
OPCItem
OPC Automation. Jerarquía
Jerarquía de Objetos de OPC
OPCsever
OPCGroups
OPCBrowser
OPCGroup
OPCItem:
OPCGroup
Ambos Grupos contienen una referencia al
mismo sensor físico.
OPCItems Pero objetos OPCItem son distintos
OPCItem
OPC Automation. Esquema General
Esquema de Servidor OPC
Servidor OPC
Cliente 1 Item 1
Item 2
Item 3
Dispositivos Físicos
Item 4
Item 5
Cliente Item 6
m
OPCItem Item n
OPCGroup
OPCServer Cache
OPC Automation. OPCSever Descripción Detallada
•PublicGroupNames
• OPCGroups
OPC Automation. OPCSever Descripción Detallada
OPCserver.GetOPCServer. Devuelve matriz de
OPCServer cadenas de caracteres con el nombre de todos los
servidores OPC registrados en el sistema. Para
ejecutar este método no es necesario que la variable
Métodos:
OPCServer esté conectado a un servidor concreto.
•GetOPCServers
•Connect GetOPCServers(Optional Nodo As Variant) As
•Disconnect Variant
•CreateBrowser
UNC (“Server”)
Nombres DNS (“Server.com”)
Direcciones TCP\IP: “180.23.32.01”
OPC Automation. OPCSever Descripción Detallada
OPCserver.Connect. Conecta el objeto OPCServer a
OPCServe determinado servidor concreto registrado en el sistema
r
Connect(ProgID as string, Optional Nodo As Variant) As
Métodos:
Variant
•GetOPCServers Ej:
•Connect Dim miOPCServer as OPCServer
•Disconnect
•CreateBrowser Set miOPCServer=OPCServer.Connect(“ServidorConcreto”)
Disconnect
Métodos:
•GetOPCServers Ej:
•Connect Dim miOPCServer as OPCServer
•Disconnect
•CreateBrowser miOPCServer.Disconnect
OPCItems
OPCItem
OPC Automation. OPCGroups. Descripción detallada
Propiedades
•Count
•DefaultGroupDeadBand
•DefaultGroupIsActive
•DefaultGroupUpdateRate
OPCGroups
Métodos
•Item
Eventos •Add
•GlobalDataChange •Remove
•RemoveAll
•ConnectPublicGroup
•RemovePublicGroup
•GetOPCGroup
OPC Automation. OPCGroups.
Count: (Long) Propiedad típica de las colecciones. La
OPCGroups
cantidad de grupos OPC existentes.
Ej
Propiedades For i=1 to MisGrupos.Count
‘Hacer algo con cada grupo
•Count Next i
•DefaultGroupDeadBand
•DefaultGroupIsActive DefaultXXX: Hay un grupo de propiedades que especifican
•DefaultGroupUpdateRate los valores que por defecto tomarán determinadas
propiedades del los grupos que se creen.
Agrupa los items que el cliente (por algún criterio) haya decido
agrupar para tratarlos como una unidad.
Servidor Proceso
Cliente
sp
PID_1
Grup_pantalla_1 ... pv
Grup_pantalla_n
V-2
OPCServer Ti
Grupo_parámetros
caudal I-1
Grupo_Alarmas
ap V-2
Cache
Cada grupo tendrá •Activo (si hay que actualizar o no)
necesidades •Periodicidad.
diferentes de •Frecuencia (si es periódica).
lectura/escritura de
sus items. Servidor Proceso
sp
PID_1
Grup_pantalla_1 ... pv
Grup_pantalla_n
V-2
OPCServer Ti
Grupo_parámetros
caudal I-1
Grupo_Alarmas
ap V-2
Cliente Cache
Cada grupo tendrá
necesidades •Hay que intentar “ahorrar” ancho de
diferentes de banda: no exigir frecuencias de
lectura/escritura de actualización innecesariamente altas.
sus items. Servidor Proceso
sp
PID_1
Grup_pantalla_1 ... pv
Grup_pantalla_n
V-2
OPCServer Ti
Grupo_parámetros
caudal I-1
Grupo_Alarmas
ap V-2
Cliente Cache
Se trata de leer/escribir datos. OPC describe varias alternativas.
¿Quién inicia el intercambio?
Servidor
Cliente El servidor notifica o “decide” enviar
•Lectura/Escritura síncrona. datos al cliente cuando cambian los
•Lectura/Escritura asíncrona. datos. Lo hace mediante los eventos del
OPCGroup.
El cliente decide cuando quiere Pero antes el cliente ha tenido que
leer/escribir: ejecuta los métodos
declarar (a través de Propiedades del
apropiados del grupo en cuestión.
grupo) que desea ser informado por el
servidor: ha tenido que suscribir el
grupo para que reciba notificaciones.
Servidor Proceso
V-2
OPCServer MiGrupo
I-1
Cliente
Cache
Se trata de leer/escribir datos. OPC describe varias alternativas.
Diferencia entre síncrono y asíncrono.
Cliente Servidor
•Lectura/Escritura síncrona: cliente ejecuta
método de OPCGroup (llamada a función)
y en la línea siguiente de código ya tiene el
resultado de la lectura/escritura: Se espera
hasta que la operación se complete
Mucho más fácil. Ineficiente para el cliente
que tiene que esperar a que la operación termine y para
el servidor que tiene que ocuparse de “servir” datos en
ese instante preciso.
Servidor Proceso
V-2
OPCServer MiGrupo
I-1
Cliente
Cache
Se trata de leer/escribir datos. OPC describe varias alternativas.
Diferencia entre síncrono y asíncrono.
Cliente Servidor
•Lectura/Escritura asíncrona: cliente El servidor recibe la orden de la
ejecuta método de OPCGroup (llamada operación y cuando la haya procesado,
a función) dando la orden de la envía un evento del OPCGroup para
operación. En la línea siguiente de entregar los resultados.
código no se tiene el resultado de la
lectura/escritura. Compleja de programar. Eficiente: el cliente
puede realizar otras tareas, el servidor puede
servir datos cuando “mejor le convenga”
Servidor Proceso
V-2
OPCServer MiGrupo
I-1
Cliente
Cache
Se trata de leer/escribir datos. OPC describe varias alternativas.
¿A qué valor se accede?
•A la variable física: más lento pero se tiene la garantía de leer el valor
actual o de que el valor escrito vaya directamente al dispositivo.
Servidor Proceso
V-2
OPCServer MiGrupo
I-1
Cliente
Cache
OPC Automation. OPCGroup.
Propiedades
•Name
•ServerHandle
•ClientHandle
•IsPublic OPCGroup
•IsActive
•DeadBand
•UpdateRate
•IsSubscribed
•OPCItems
Métodos
•SyncRead
•SyncWrite
•AsyncRead
Eventos •AsyncWrite
•DataChange •AsynRefresh
•AsyncReadComplete •AsynCancel
•AsyncWriteComplete
•AsyncCancelComplete
OPC Automation. OPCGroup.
OPCGroup
Name (String) Escritura-Lectura: Un
nombre (arbitrario ) que el cliente puede
Propiedades dar al Grupo.
•Name ClientHandle (Long) Escritura-Lectura: Un
•ServerHandle número de identificación del grupo que el
•ClientHandle cliente escoge.
•IsPublic ServerHandle (long) Lectura: Número de
identificación de Grupo escogido por el
•IsActive servidor.
•DeadBand IsPublic (Boolean) Lectura. Retorna True
•UpdateRate si el grupo es Público.
•IsSubscribed
•OPCItems
OPC Automation. OPCGroup.
OPCGroup
IsActive (Boolean) Escritura-Lectura. Controla si el
grupo está activo. A un grupo inactivo, el servidor no
Propiedades envía notificaciones de Cambio de datos (Evento
•Name DataChange). De todas formas si admite
•ServerHandle Lecturas/escrituras que el cliente solicite.
•ClientHandle
•IsPublic IsSubscribed (Boolean) Escritura-Lectura:
Determina si el cliente requiere que el servidor le
•IsActive notifique de los posibles cambios en los valores de
•UpdateRate los items que contiene el Grupos.
•IsSubscribed
•DeadBand UpdateRate (Long) Escritura-Lectura: Un número en
milisegundos mediante el cual el cliente solicita la
•OPCItems frecuencia a la que el cliente desea que el servidor le
informe de posibles cambios de datos. Esta
propiedad es una petición. El servidor puede cumplir
o no con esa petición. En cualquier caso no habrán
notificaciones a una frecuencia mayor que la
especificada en esta propiedad.
OPC Automation. OPCGroup.
OPCGroup
DeadBand (Single) Escritura-Lectura. Especifica que cambio
de dato se considera suficiente como para generar un evento
Propiedades DataChange. Para que esta propiedad sea útil, al menos
•Name algunos de los items del Grupo debe tener definida las
•ServerHandle propiedades (opcionales) EUType y EUInfo. Además EUType
•ClientHandle debe ser “1” o sea analógica. Cómo se verá más adelante
•IsPublic EUInfo define valores máximos y mínimos de la variable.
•IsActive Ocurriría una notificación si se cumple:
•UpdateRate
•IsSubscribed (|ValorCache-ValorDispositivoFísico| > RangoItem*DeadBand
•DeadBand
•OPCItems
OPC Automation. OPCGroup.
OPCGroup
OPCItems Lectura: Accede al objeto colección
OPCitems que contiene los items definidos en el
Propiedades grupo.
•Name Dim MisItems as OPCItems
•ServerHandle
•ClientHandle Set MisItems = MiGrupo.OPCItems
•IsPublic
•IsActive
•DeadBand
•UpdateRate
•IsSubscribed
•OPCItems
OPC Automation. OPCGroup.
OPCGroup
Lectura y Escritura síncronas de los datos
representados por los items del grupo.
Métodos
•SyncRead Lectura: El cliente ejecuta el método SyncRead y
•SyncWrite cuando la sentencia se ejecuta, ya tiene los
resultados de los valores leídos.
•AsyncRead
•AsyncWrite Escritura: Cuando el cliente ejecuta SyncWrite tiene
•AsynRefresh la seguridad que los datos han sido escritos en el
•AsynCancel dispositivo físico.
OPC Automation. OPCGroup.
OPCGroup
Lectura, Escritura y Refrescamiento asíncronos de
los datos representados por los items del grupo.
Métodos
•SyncRead El cliente solicita la operación y puede
•SyncWrite inmediatamente pasar a ejecutar otras sentencias sin
obtener los resultados de la operación.
•AsyncRead
•AsyncWrite Cuando los resultados estén listos el servidor lo
•AsynRefresh comunicará mediante el evento correspondiente.
•AsynCancel
AsynCancel: Mediante la ejecución de este método
el cliente puede cancelar una operación pendiente:
que ya se haya solicitado (mediante AsynRead,
AsynWrite o AsynsRefresh) y que todavía no haya
sido ejecutada por el servidor.
OPC Automation. OPCGroup.
OPCGroup
Evento que es invocado por el servidor para notificar
al cliente de los valores de los items del grupo. Para
que el evento se dispare el grupo deberá estar activo
Eventos y suscrito al servicio (Propiedades IsActive y
IsSubscribed activadas), alguno de los datos habrán
cambiado (el cambio será mayor que lo especificado
•DataChange en DeadBand) y habrá transcurrido, al menos, la
cantidad de milisegundos especificados en
UpdateRate.
•AsyncReadComplete
•AsyncWriteComplete
•AsyncCancelComplete
OPC Automation. OPCGroup.
OPCGroup
Eventos invocados por el servidor para indicar al
cliente que las operaciones correspondientes
(lectura, escritura o cancelación) que ha solicitado
Eventos previamente (mediante las llamadas a los métodos
AsyncRead, AsyncWrite y AsyncCancel) han sido
ejecutadas por el servidor.
•DataChange
•AsyncReadComplete
•AsyncWriteComplete
•AsyncCancelComplete
OPC Automation. OPCItems.
OPCItem
....
Set MisItems = MiGrupo.OPCItems
OPC Automation. OPCItems.
Métodos
•Item
OPCItems •GetOPCItem
Propiedades •AddItem
•. Remove
•DefaultRequestedDataType •SetActive
•DefaulAccesPath •SetClientHandles
•DefaultIsActive •SetDataTypes
•Count
OPCItems
OPCItem
OPC Automation. OPCItems.
Cuando se añade un item al grupo el cliente debe:
OPCItems
Cuando el cliente haya agregado con éxito el item
a la colección:
OPCItem
•Le asignará al item un número de identificación
(ServerHandle) que deberá a partir de ese instante ser
presentado por el cliente al servidor para identificar el
dicho item.
OPC Automation. OPCItems.
¿Pero, al final, cómo se agrega un item a un Grupo?
OPCItems
OPCItem
OPC Automation. OPCItems.
¿Cómo se agrega un item a un Grupo?
Agregándolo a la colección OPCItems
Detalle Jerarquía de OPC
de ese grupo, (mediante su método
AddItems):
Set MisItems=MiGrupo.OPCItems
OPCItem Set UnItem =MisItems.AddItem(“Calderas.Pcol_pv”,1)
UnServerHandle=UnItem.ServerHandle
OPC Automation. OPCItem. Descripción detallada
Propiedades
•IsActive
•Value OPCItem
•TimeStamp
•Quality
• ClientHandle
•ServerHandle
•AccessRights
Métodos
•RequestedDataType •Read
•CanonicalDataType •Write
•EUType
•EUInfo
“Wrapper”
•ServerHandle
OPC
•AccessRights VB
(C++)
•CanonicalDataType
•RequestedDataType Si el cliente “se El servidor
empeña” en Traslada hacia puede definir
solicitar un tipo el tipo de un item
•EUType de datos para el datos más con un tipo de
•EUInfo que no hay aproximado
datos
conversión el sin perder
OPCItem no es que no sea
exactitud
creado. soportado por
VB\Automation
OPC Automation. OPCItem. Descripción detallada
OPCItem EUType (Integer) Lectura : Propiedad opcional. Indica el tipo de
información de unidades de Ingeniería (si existe):
0: No existe
Propiedades
1:Analógica
•IsActive
2: Enumerada (discreta)
•Value
•TimeStamp
EUInfo (Variant) : El tipo de datos definido por el servidor.
•Quality
• ClientHandle
•Si EUType es 1: Matriz de 2 elementos (double) que
•ServerHandle
contiene los valores Mínimo y Máximo del rango del item.
•AccessRights
•Si EUType es 2: Matriz de cadena de caracteres que
•CanonicalDataType
contiene una lista de etiquetas que corresponden a cada
•RequestedDataType
uno de los valores discretos que puede tener el item
•EUType
•EUInfo
OPC Automation.
Lectura/Escritura Síncronas
Lectura Síncrona.
Método de OPCGroup.
SyncRead: Realiza una lectura síncrona de los items indicados
(no necesariamente todos los del grupo). La aplicación cliente
queda bloqueada hasta que el método retorna.
SyncRead(Fuente as Integer, NumeroItems as Long, ServerHandles()
as Long, ByRef Valores() as Variant, ByRef Errores() as Long,
Optional ByRef as Calidades() as Variant, Optional ByRef
TimeStamps() as Date)
Fuente:
•OPC_DS_Cache: Lee desde el almacenamiento secundario
•OPC_DS_Device: Lee desde el dispositvo físico.
ServerHandles() Matriz de los identificadores de Item que hemos obtenido durante la creación
de cada uno.
Lectura Síncrona.
Método de OPCGroup.
SyncRead(Fuente as Integer, NumeroItems as Long,
ServerHandles() as Long, ByRef Valores() as Variant, ByRef
Errores() as Long, Optional ByRef as Calidades() as
Variant, Optional ByRef TimeStamps() as Date)
errores(): vector que indica si se produjo algún error a la hora de leer cada item individual. OPC
define una serie de errores descritos en la librería de tipos por las constantes:
• OPCBadRights
• OPCBadType
• OPCInvalidHandle
• OPCInvalidItemID, etc
Escritura Síncrona.
Método de OPCGroup:
SyncWrite: Realiza una escritura síncrona de los items indicados
(no necesariamente todos los del grupo). La aplicación cliente
queda bloqueada hasta que el método retorna.
cont_handles(2)=ContGroup.OPCItems.Add(“var2”,2).ServerHandle
AsyncCancel(CancelID As Long)