# OPC

El OPC (OLE for Process Control) es un estándar de comunicación en el campo del control y supervisión de procesos industriales, basado en una tecnología Microsoft, que ofrece una interfaz común para comunicación que permite que componentes de software individuales interactúen y compartan datos. La comunicación OPC se realiza a través de una arquitectura Cliente-servidor. El servidor OPC es la fuente de datos (como un dispositivo hardware a nivel de planta) y cualquier aplicación basada en OPC puede acceder a dicho servidor para leer/escribir cualquier variable que ofrezca el servidor. Es una solución abierta y flexible al clásico problema de los drivers propietarios. Prácticamente todos los mayores fabricantes de sistemas de control, instrumentación y de procesos han incluido OPC en sus productos.
Las aplicaciones necesitan una manera común de acceder a los datos de cualquier fuente, como un dispositivo o una base de datos.

## Ventajas

* Los fabricantes de hardware sólo tienen que hacer un conjunto de componentes de programa para que los clientes los utilicen en sus aplicaciones.
* Los fabricantes de software no tienen que adaptar los drivers ante cambios de hardware.

## Situación

Con OPC, la integración de sistemas en un entorno heterogéneo se tornará simple.

## Bases de OPC
### Objetos e interfaces

Un cliente OPC se puede conectar a servidores OPC proporcionados por más de un "proveedor".
Esto le puede ser útil para conectarse a más de dos OPC sin necesidad de seguir el mismo protocolo.

### Acceso de Datos OPC

Compuesto por varios elementos:

#### El servidor (server)

    Mantiene información sobre el servidor
    Sirve como container para objetos del grupo OPC

#### El grupo (group)

    Mantiene información sobre sí mismo
    Provee mecanismos para contener/organizar lógicamente items

#### El elemento (item)

    Representan conexiones a fuentes de datos dentro de un servidor

### Gestión de Alarmas y Eventos
#### Alarma

    Es una condición anormal; caso especial de condición.
    Una condición es un estado concreto del Servidor de Eventos OPC o de uno de los objetos contenidos por dicho servidor, que puede resultar de interés para sus clientes.

#### Evento

    Es un suceso detectable que es significativo para un servidor OPC, para el aparato al que representa y para sus Clientes OPC
    Puede estar o no asociado a una condición

### Acceso a Datos Históricos

Distintos tipos de servidores históricos:

#### Servidores de datos simples

    ofrecen solo capacidad de almacenar datos

#### Servidores de análisis y compresión de datos complejos

    ofrecen capacidad de compresión y almacenaje de datos
    ofrecen funciones de análisis de datos
    pueden actualizar datos y tener un resumen de actualizaciones

## Aplicaciones OPC

* Diseñado principalmente para acceder a datos de un servidor en red.
* Distintas aplicaciones:
    - nivel más bajo pueden coger datos de aparatos físicos y llevarlo a SCADA o DCS, o de un servidor SCADA o DCS a una aplicación.

## Arquitectura General y Componentes

* Dos tipos de interfaces
   * Interfaces Custom (obligatorio, C/C++)
   * Interfaces de Automatización (opcional, VB)
OPC especifica la interfaz COM, como: “Lo que la interfaz es y su aplicación y no su implementación”. Especifica el comportamiento esperado que proporciona la interfaz ante el uso y/o aplicaciones del cliente.
* Implementación de funciones de interfaces
   * Obligatorio: Funcionalidades indispensables
   * Opcional : Funcionalidades añadidas
La arquitectura OPC es un modelo Cliente-Servidor donde el Servidor OPC proporciona una interfaz al objeto OPC y lo controla. Una aplicación cliente OPC se comunica a un servidor OPC a través de un cliente OPC específico por medio de una interfaz de automatización. El servidor OPC lleva a cabo la interfaz cliente, y opcionalmente lleva a cabo la interfaz de automatización

### Servidores locales y remotos

* Dos alternativas:
   * Los clientes se deben conectar siempre a un servidor local que hará uso de un esquema de red existente.
   * El cliente se puede conectar al servidor local/remoto que desee.
Una aplicación cliente OPC, puede conectarse por medio de una red, a varios servidores OPC proporcionados por uno o más fabricantes. De esta forma no existe restricción por cuanto a tener un Software Cliente para un Software Servidor, lo que es un problema de interoperabilidad que hoy en día se aprecia con sistemas del tipo propietario. Sistemas de control supervisorio como lo son SCADA o DCS pueden comunicarse con un Servidor OPC y proveer a este, información de los dispositivos de campo asociados. De esta forma, aplicaciones cliente OPC de otros fabricantes tendrán acceso a estos datos por medio del servidor.

#### Servidor de Acceso a Datos OPC (OPC DA)

* A un alto nivel, está compuesto por los objetos:
   * Servidor: Mantiene la información sobre sí mismo, y unifica los Datos dentro de un Grupo.
   * Grupo: Dota de un mecanismo que contiene en forma lógica los ítemes. Se clasifican en público o Local.
   * Ítem: Es un valor, una condición y permanece o varía en el tiempo. Es una dirección específica de los datos y no la fuente de datos.

#### Servidor de Alarmas, Condiciones y Eventos OPC (OPC AE)

* Provee de Interfaces, donde Clientes OPC son notificados de Sucesos. Estos mecanismos se definen como:
   * Alarma: Condición anormal de un sistema, por lo que es un caso especial de esta.
   * Condición: Estado nombrado evento por contener condiciones asociadas a una etiqueta como HighAlarm, Normal, LowAlarm.
   * Evento: Ocurrencia perceptible, de importancia al servidor OPC, de los dispositivos que representa o de sus dispositivos OPC.
Transmisión de paso a paso.

#### Servidor de Acceso a Datos Históricos OPC (OPC HDA)

Provee de una interfaz Cliente OPC de Acceso a Datos Históricos, que facilita el uso de aplicaciones de acceso a datos. Características: Arquitectura de comunicación abierta y eficaz, concentrada en el acceso a datos y no en los tipos de datos. Propósito: Permite que aplicaciones (MS Office, Objetos WWW) accedan a datos de un dispositivo o un banco de datos “In process”. Facilita el desarrollo de aplicaciones sin sacrificar la funcionalidad de la Interfaz Cliente.

### Intercambio de Datos OPC (OPC DX)

Define un conjunto de interfaces que permiten el intercambio de datos, así como la comunicación "server to server" entre dispositivos y controladores conectados a Ethernet, que utilizan distintos protocolos. OPC-DX permite a los servidores OPC-DA intercambiar directamente datos sin la exigencia de un cliente OPC intermedio. La mejor manera de pensar en un servidor OPC-DX es como un servidor OPC-DA que se puede configurar para intercambiar datos con otros servidores OPC-DA. Como es el caso de otros servidores OPC, el cliente aún se utiliza para configurar, controlar y vigilar este intercambio de datos.

### Acceso de Datos XML (OPC XML DA)

Se está convirtiendo en el método estándar para el intercambio de datos entre las aplicaciones de empresa y son cada vez más un proceso de control de entornos. OPC XML-DA salió a la luz en 2003 tras varios años de desarrollo, y ofrece una interfaz Simple Object Application Protocol (SOAP) para los objetos OPC DA 2.0/3.0. Esto permite a las aplicaciones cliente ser escritas en Java, Perl, Python, y otros idiomas que soporta SOAP. SOAP y XML Web Services utiliza Protocolo de transferencia de hipertexto (HTTP) y los mecanismos de transporte y, además, proporciona una plataforma neutral más adecuado para el tráfico con base en Internet, en comparación con tecnologías como DCOM. Sin embargo, debido a las limitaciones de rendimiento posible, OPC XML-DA es poco probable que se utilice para aplicaciones en tiempo real, a pesar de que normalmente se usa de puente entre la empresa y la red de control.

### Arquitectura Unificada OPC (OPC UA)

Refleja el objetivo de Microsoft de retirar DCOM en favor de .NET y arquitecturas orientadas a servicio. OPC UA integra la funcionalidad de las anteriores especificaciones (OPC DA, OPC-HDA, OPC A & E, OPC-DX, etc). OPC UA abandona COM / DCOM en favor de dos transportes: SOAP / HTTP (S) y un mensaje binario codificado en la parte superior de TCP. Es prematuro evaluar la seguridad de OPC UA en relación con DCOM, ya que la API OPC UA de seguridad aún está en desarrollo. Sin embargo, dado que ahora existe una mayor conciencia en la OPC Foundation, proveedores OPC, y Microsoft para la necesidad de seguridad, hay poca duda de que .NET proporcionará una base más segura que COM / DCOM. También hacen mucho más sencillo el desarrollo de clientes y servidores OPC en plataformas que no sean de Microsoft.

### Seguridad

* Existen tres niveles de seguridad OPC:
   * Seguridad Inválida: Libre acceso entre Cliente/Servidor.
   * Seguridad DCOM: Clientes seleccionados tienen acceso limitado a servidores OPC. No hay un control total sobre sistemas operativos como Linux, Unix.
   * Seguridad OPC: El Servidor OPC sirve como un regulador de control de acceso a fabricantes de sistemas operativos como Linux y Unix sobre objetos específicos de acceso restringido que son expuestos por el Servidor OPC.

## Estándares OPC
### OPC common

Definición de interfaces:
   * IOPCShutdown: Desconexión de los clientes. Punto de conexión a través de la interfaz IOPCShutdown.
   * IConnectionPointContainer: Acceso al punto de conexión para la interfaz IOPCShutdown.
   * IOPCCommon:
      * Usado por todos los servidores OPC independientemente de que pertenezcan a una especificación u otra.
      * Interfaz independiente con cada servidor.
   * IOPCServerList: Determina el tipo de servidores disponibles en una máquina.