La Arquitectura Unificada OPC ( OPC UA ) es un protocolo de comunicación máquina a máquina para la automatización industrial desarrollado por la Fundación OPC . Las características distintivas son:
- Basado en una comunicación cliente-servidor
- Centrarse en la comunicación con equipos y sistemas industriales para la recopilación y el control de datos.
- Abierto : disponible gratuitamente e implementable bajo licencia GPL 2.0 [1]
- Multiplataforma : no está vinculado a un sistema operativo o lenguaje de programación
- Arquitectura orientada a servicios (SOA)
- Complejidad inherente: en septiembre de 2020, la especificación constaba de 3151 páginas en 15 documentos
- Ofrece funcionalidad de seguridad para autenticación, autorización, integridad y confidencialidad [2]
- Modelo de información integral , que es la base de la infraestructura necesaria para la integración de información donde los proveedores y las organizaciones pueden modelar sus datos complejos en un espacio de nombres OPC UA para aprovechar la rica arquitectura orientada a servicios de OPC UA. Actualmente hay más de 35 colaboraciones con la Fundación OPC. Las industrias clave incluyen la farmacéutica , el petróleo y el gas , la automatización de edificios , la robótica industrial , la seguridad, la fabricación y el control de procesos .
Historia
Aunque desarrollado por la misma organización, OPC UA difiere significativamente de su predecesor, Open Platform Communications (OPC). El objetivo de la Fundación para OPC UA era proporcionar un camino a seguir desde el modelo de comunicaciones OPC original (es decir, el intercambio de procesos exclusivo de Microsoft Windows COM / DCOM ) que satisfaría mejor las necesidades emergentes de la automatización industrial . [3]
Después de más de tres años de trabajo de especificación y otro año para la implementación de un prototipo, la primera versión de la Arquitectura Unificada se lanzó en 2006.
La versión actual de la especificación es 1.04 (22 de noviembre de 2017 [4] ). La nueva versión de OPC UA ahora ha agregado publicación / suscripción además de la infraestructura de comunicaciones cliente / servidor.
Innovaciones
Aunque el enlace original a COM / DCOM ayudó a OPC a distribuirse bien, tenía varios inconvenientes:
- Problemas frecuentes de configuración con DCOM;
- Sin tiempos de espera configurables;
- Solo Microsoft Windows ;
- Menor seguridad;
- Sin control sobre DCOM (COM / DCOM es una especie de caja negra, los desarrolladores no tienen acceso a las fuentes y, por lo tanto, tienen que lidiar con errores o implementaciones insuficientes).
Estos inconvenientes, junto con una serie de otras consideraciones, impulsaron la decisión de desarrollar una pila nueva e independiente para OPC UA, que reemplaza a COM / DCOM. Las principales características de esta pila de comunicación fueron:
- Implementación multiplataforma, incluidas implementaciones portátiles ANSI C , Java y .NET ;
- Escalabilidad: desde sensores inteligentes y actuadores inteligentes hasta mainframes;
- Operación de múltiples subprocesos, así como de un solo subproceso / una sola tarea, necesaria para trasladar la pila a dispositivos integrados;
- Seguridad, basada en nuevos estándares;
- Tiempos de espera configurables para cada servicio;
- Fragmentación de grandes datagramas.
Esta pila de comunicación refleja el comienzo de varias innovaciones. La arquitectura OPC UA es una arquitectura orientada a servicios (SOA) y se basa en diferentes niveles lógicos.
Los servicios básicos de OPC son descripciones de métodos abstractos, que son independientes del protocolo y proporcionan la base para la funcionalidad OPC UA. La capa de transporte coloca estos métodos en un protocolo, lo que significa que serializa / deserializa los datos y los transmite a través de la red. Se especifican dos protocolos para este propósito. Uno es un protocolo TCP binario , optimizado para un alto rendimiento y el segundo está orientado a servicios web .
El modelo de información OPC es la denominada Red de malla completa basada en nodos . Estos nodos pueden incluir cualquier tipo de metainformación y son similares a los objetos de la programación orientada a objetos (POO). Un nodo puede tener atributos de acceso de lectura (DA, HDA), métodos que se pueden llamar (Comandos) y eventos desencadenados que se pueden transmitir (AE, DataAccess, DataChange). Los nodos contienen datos de proceso, así como todos los demás tipos de metadatos . El espacio de nombres OPC contiene el modelo de tipo.
El software cliente puede verificar qué perfiles admite un servidor. Esto es necesario para obtener información, si un servidor solo admite la funcionalidad DA o adicionalmente AE, HDA, etc. Además, se puede obtener información sobre si un servidor admite un perfil determinado. Las características nuevas e importantes de OPC UA son:
- Soporte de redundancia
- Latido para conexiones en ambas direcciones (para indicar si el otro extremo está "vivo"). Esto significa que tanto el servidor como el cliente reconocen las interrupciones.
- Almacenamiento en búfer de datos y acuses de recibo de los datos transmitidos. Las conexiones perdidas ya no conducen a la pérdida de datos. Los datagramas perdidos se pueden recuperar.
En la OPC UA DevCon en octubre de 2006, en Munich, se presentaron en vivo los primeros prototipos. Se han mostrado varios servidores UA en un controlador lógico programable Beckhoff y una placa de prueba integrada de Euros. El PLC Beckhoff se basa en Windows XP Embedded y el controlador integrado se basa en el sistema operativo en tiempo real Euros. La empresa Embedded Labs Ltd demostró un servidor OPC UA basado en su propia pila C ++ UA que se ejecuta en un microcontrolador ARM de un solo chip con 64kB de RAM . En octubre de 2012, el Centro de Aplicaciones Fraunhofer alemán IOSB-INA y el Instituto de Tecnologías de la Información Industrial (inIT) demostraron que un servidor OPC UA es escalable hasta 15 kB de RAM y 10 kB de ROM y, por lo tanto, utilizable a nivel de chip. [5]
Protocolos
OPC UA admite dos protocolos. [6] Esto es visible para los programadores de aplicaciones solo a través de cambios en la URL. El protocolo binario es opc.tcp: // Server y http: // Server es para Web Service. De lo contrario, OPC UA funciona de forma completamente transparente para la API .
El protocolo binario ofrece el mejor rendimiento / menos gastos generales, requiere recursos mínimos (no se requieren analizador XML, SOAP y HTTP , lo cual es importante para dispositivos integrados), ofrece la mejor interoperabilidad (el binario se especifica explícitamente y permite menos grados de libertad durante la implementación) y utiliza un único puerto TCP que se puede elegir arbitrariamente para facilitar la comunicación mediante túneles o facilitar la habilitación a través de un firewall.
El protocolo Web Service (SOAP) se soporta mejor con herramientas disponibles, por ejemplo, desde entornos Java o .NET, y es compatible con firewalls, utilizando puertos HTTP (S) estándar.
Binary es compatible con todas las implementaciones, mientras que solo la implementación de .NET es compatible con SOAP.
Especificaciones
La especificación OPC UA es una especificación de varias partes y consta de las siguientes partes:
- Conceptos
- Modelo de seguridad
- Modelo de espacio de direcciones
- Servicios
- Modelo de información
- Mapeos
- Perfiles
- Acceso a los datos
- Alarmas y condiciones
- Programas
- Acceso histórico
- Descubrimiento y servicios globales
- Agregados
- PubSub
- Seguridad
- Máquinas de estado (aún no publicado)
- Nombres de alias
- Autorización de usuario (aún no publicada)
- Referencias de diccionario
Además, también están disponibles los dispositivos parte 100 y la parte 200 de automatización industrial. Estos se basan en el conjunto básico de especificaciones y agregan nuevas definiciones comunes que luego se utilizan en diferentes especificaciones complementarias. Por ejemplo, OPC UA para dispositivos analizadores y OPC UA para maquinaria se construyen directamente sobre la parte 100.
A diferencia de las especificaciones basadas en COM, las especificaciones UA no son especificaciones de aplicación pura. Describen típicamente los mecanismos internos de UA, que se manejan a través de la pila de comunicación y normalmente solo son de interés para aquellos que transfieren una pila a un objetivo específico o aquellos que desean implementar su propia pila de UA.
Los desarrolladores de aplicaciones OPC UA codifican contra la API OPC UA y, por lo tanto, utilizan principalmente documentación API. No obstante, las partes 3, 4 y 5 pueden ser de interés para los desarrolladores de aplicaciones. [7]
Discusión
La especificación del protocolo OPC UA consta de 14 documentos para un total de 1250 páginas. Debido a esta complejidad, las implementaciones existentes suelen estar incompletas. Además, la existencia de varios formatos de serialización, así como la posibilidad de implementar selectivamente ciertos servicios como PubSub, eventualmente conducen a una gran heterogeneidad de los puntos de conexión OPC UA. En estas condiciones, finalmente es difícil desarrollar aplicaciones cliente que sean independientes de la implementación específica de cada servidor. En este sentido, OPC UA no cumple su promesa de asegurar una buena interoperabilidad de sistemas. Esto se puede ver típicamente en proyectos de fábrica e infraestructura que integran varias tecnologías de PLC, cada una entregada con una implementación diferente y limitada del protocolo OPC UA.
La especificación aún está evolucionando, el último volumen 14 del documento de especificación está fechado el 6 de febrero de 2018, mientras que la primera publicación del estándar OPC UA data de 2006.
Como resultado, a pesar de los considerables esfuerzos de marketing para respaldar su adopción, OPC UA puede considerarse en esta etapa como un intento de estandarización más que como un estándar establecido.
Pila de comunicación UA
La arquitectura de una aplicación de UA, independientemente de si es la parte del servidor o del cliente, está estructurada en niveles.
Algunas partes se igualan a los anteriores COM Proxy / Stubs y son proporcionadas por OPC Foundation. El nivel de portabilidad es nuevo; simplifica la migración de la pila UA ANSI C a otras plataformas de destino. La OPC Foundation también proporciona una capa de puerto para Windows y Linux .
Seguridad UA
UA Security consiste en autenticación y autorización, encriptación e integridad de datos a través de firmas. Para los servicios web, se utiliza WS-SecureConversation y, por lo tanto, es compatible con .NET y otras implementaciones de SOAP . Para la variante binaria, se han seguido los algoritmos de WS-SecureConversation y también se han convertido a un equivalente binario. Esto se denomina UA Secure Conversation.
También hay una versión mixta donde el código es binario, pero la capa de transporte es SOAP. Este es un compromiso entre la codificación binaria eficiente y la transmisión amigable con el firewall. La codificación binaria siempre requiere UA Secure Conversation. La autenticación utiliza certificados X.509 exclusivamente. Depende del desarrollador de la aplicación para elegir a qué almacén de certificados se vincula la aplicación UA. Por ejemplo, es posible utilizar la infraestructura de clave pública (PKI) de un Active Directory .
Tipos de datos integrados
El estándar OPC UA define 25 tipos de datos integrados:
Tipo incorporado | Equivalente de C / C ++ | Detalles | Tipo de NodeId |
---|---|---|---|
Booleano | bool | 0/1 (verdadero o falso) | 0 (numérico) |
SByte | int8_t | -128 hasta 127 | |
Byte | uint8_t | 0 hasta 255 | |
Int16 | int16_t | -32768 al 32767 | |
UInt16 | uint16_t | 0 hasta 65535 | |
Int32 | int32_t | -2147483648 al 2147483647 | |
UInt32 | uint32_t | 0 hasta 4294967295 | |
Int64 | int64_t | -9223372036854775808 al 9223372036854775807 | |
UInt64 | uint64_t | 0 a 18446744073709551615 | |
Flotador | flotador | Valor de coma flotante de precisión simple IEEE (32 bits) | |
Doble | doble | Valor de coma flotante de doble precisión IEEE (64 bits) | |
Código de estado | uint32_t | ||
Cuerda | uint8_t * / std :: cadena | 3 (cuerda) | |
Fecha y hora | int64_t | número de intervalos de 100 nanosegundos desde 1/1/1601 (UTC) | |
GUID | dependiente de la implementación | Número de 16 bytes utilizado como identificador único | 4 (GUID) |
ByteString | (igual que String) | 5 (cadena de bytes) | |
XmlElement | (igual que String) | ||
NodeId | índice de espacio de nombres y tipo NodeId | ||
ExpandedNodeId | (similar a NodeId) | ||
Nombre calificado | índice de espacio de nombres y cadena | ||
LocalizedText | cadena y un indicador de configuración regional | ||
NumericRange | cadena (por ejemplo, "0: 4,1: 5" para la matriz [0..4] [1..5]) | ||
Variante | (solo tipos de datos integrados) | ||
ExtensionObject | escalares de cualquier tipo | ||
Valor de los datos | una combinación de un valor, marcas de tiempo y código de estado | ||
DiagnosticInfo | información detallada de error / diagnóstico |
API de OPC UA
Las API de UA están disponibles en varios lenguajes de programación. Los SDK comerciales están disponibles para C, C ++, Java y .NET. Las pilas de código abierto están disponibles al menos para C, C ++, Java, Javascript (nodo), Tcl y Python [1] .
Implementación de C ++ / C
- El proyecto open62541 proporciona una implementación de código abierto para el servidor OPC UA y los clientes y tiene licencia de Mozilla Public License v2.0. Además de Linux y Windows, también es compatible con OS X, QNX y diferentes sistemas integrados como destino de compilación.
- El proyecto S2OPC proporciona una implementación segura de código abierto y tiene la licencia Apache 2.0 . Es compatible con Linux, Windows, FreeRTOS, Zephyr, VxWorks y tiene como objetivo ser seguro y rápido. El núcleo del software está diseñado formalmente con la ayuda de la B-Método .
- El proyecto ASNeG proporciona un servidor de aplicaciones OPC UA de código abierto C ++ (licencia Apache 2.0) y un servidor web OPC UA (estado beta, actualmente solo funciones básicas).
- El proyecto FreeOpcUa proporciona una implementación de cliente y servidor de código abierto ( LGPL ) en C ++.
- El proyecto UAF ofrece una implementación de código abierto (LGPL) C ++ / Python.
Implementación de .NET
La implementación de .NET usa ANSI C para los niveles inferiores e implementa el resto de forma nativa en .NET. Eso significa que solo el manejo del socket y Message-Chunking se integra desde la pila ANSI C. La deserialización se lleva a cabo directamente en .NET y, por lo tanto, se convierte directamente en estructuras y objetos .NET. Esto proporciona un mejor rendimiento que la deserialización en una estructura C primero y luego copiar los datos a una estructura .NET después.
Implementación de Java
Se estaban desarrollando varias pilas para Java. [ cuando? ] Similar a .NET, existen principalmente tres variantes:
- Encapsule la pila ANSI C completa a través de JNI , lo que complica la portabilidad. Aunque la pila se puede portar a diferentes sistemas operativos, es necesario compilarlos individualmente. Además, los datos deben copiarse en el límite de JNI, pero se benefician del rendimiento de C durante la deserialización.
- Codifique directamente en la capa de red (similar a la implementación de .Net actual) y deserialice en Java. Esto ahorra la ejecución de una copia de datos, pero aún depende de la pila C.
- Escriba una pila OPC UA nativa de Java. Se observó que este es el más portátil, pero se estima que requiere el mayor esfuerzo de ingeniería para implementarlo. El proyecto Eclipse Milo proporciona una implementación de código abierto en Java puro de la especificación de cliente y servidor UA 1.03. [8]
Alternativamente, existe la variante simple para admitir solo el protocolo WebService. Para eso, se necesita un kit de herramientas SOAP que admita WS-Security .
Implementación de JavaScript y TypeScript
ganglios opcua es una implementación completa de la OPC UA para el cliente y el servidor por completo a escribir a máquina de escribir para Node.js .
Implementación de Python
- El proyecto FreeOpcUa proporciona dos implementaciones en lenguaje de programación Python puro: opcua-asyncio (requiere Python> = 3.7) y python-opcua (compatible con Python 2, 3 y pypy; requiere Cython para la biblioteca lxml, pero está en modo de mantenimiento y se recomienda opcua-asyncio ). Ambos proporcionan abstracciones de alto nivel de un cliente y servidor OPC UA que se pueden utilizar tal cual o ampliar fácilmente para aplicaciones personalizadas.
- La implementación C de S2OPC proporciona una envoltura de Python PyS2OPC .
Implementación de óxido
Rust para OPC UA proporciona una API y ejemplos para implementar clientes y servidores OPC UA hasta el nivel de perfil integrado. Esto incluye soporte para cifrado, suscripciones y el conjunto de nodos predeterminado.
Implementación de TypeScript / JavaScript
El cliente OPC UA de TypeScript / JavaScript para el navegador es un cliente OPC UA que funciona en el navegador. Está completamente escrito en TypeScript y compilado en JavaScript. El código fuente está disponible públicamente y tiene una licencia MIT. Incluye codificación de datos binarios OPC UA y utiliza WebSockets como protocolo de transporte.
Implementación de tcl
Topcua es un enlace Tcl para el cliente y servidor OPC UA. Proporciona varias operaciones para gestionar y comunicarse utilizando la implementación OPC UA. Está disponible en plataformas POSIX y Windows comunes.
IEC 62541
IEC 62541 [9] es un estándar para OPC Unified Architecture.
IDENTIFICACIÓN | fecha de lanzamiento | título |
---|---|---|
IEC / TR 62541-1 | 2016 | Arquitectura unificada de OPC - Parte 1: Descripción general y conceptos |
IEC / TR 62541-2 | 2016 | Arquitectura unificada OPC - Parte 2: Modelo de seguridad |
IEC 62541-3 | 2020 | Arquitectura unificada OPC - Parte 3: Modelo de espacio de direcciones |
IEC 62541-4 | 2020 | Arquitectura unificada OPC - Parte 4: Servicios |
IEC 62541-5 | 2020 | Arquitectura unificada OPC - Parte 5: Modelo de información |
IEC 62541-6 | 2020 | Arquitectura unificada OPC - Parte 6: Asignaciones |
IEC 62541-7 | 2020 | Arquitectura unificada OPC - Parte 7: Perfiles |
IEC 62541-8 | 2020 | Arquitectura unificada OPC - Parte 8: Acceso a datos |
IEC 62541-9 | 2020 | Arquitectura unificada OPC - Parte 9: Alarmas y condiciones |
IEC 62541-10 | 2020 | Arquitectura unificada OPC - Parte 10: Programas |
IEC 62541-11 | 2020 | Arquitectura unificada OPC - Parte 11: Acceso histórico |
IEC 62541-12 | 2020 | Arquitectura unificada OPC - Parte 12: Descubrimiento y servicios globales |
IEC 62541-13 | 2020 | Arquitectura unificada de OPC - Parte 13: Agregados |
IEC 62541-14 | 2020 | Arquitectura unificada OPC - Parte 14: PubSub |
IEC 62541-100 | 2015 | Arquitectura unificada OPC - Parte 100: Interfaz de dispositivo |
Ver también
- Acceso a datos OPC
- OLE para control de procesos
- Fundación OPC
Referencias
- ^ https://opcfoundation.org/license/gpl.html
- ^ Roepert, Linus; Dahlmanns, Markus; Fink, Ina Berenice; Pennekamp, Jan; Henze, Martin https://www.comsys.rwth-aachen.de/fileadmin/papers/2020/2020-roepert-opcua-security.pdf Evaluación de la seguridad de las implementaciones de OPC UA, 2020
- ^ Mahnke, Wolfgang; Leitner, Stefan-Helmut https://library.e.abb.com/public/75d70c47268d78bfc125762d00481f78/56-61%203M903_ENG72dpi.pdf Arquitectura unificada OPC: el futuro estándar para la comunicación y el modelado de información en la automatización], 3/2009 Revista ABB 3 / 2009, págs. 56-61
- ^ https://opcfoundation.org/developer-tools/specifications-unified-architecture
- ^ El servidor OPC UA más pequeño del mundo proviene de Alemania
- ^ Leitner, Stefan-Helmut; Mahnke, Wolfgang OPC UA - Arquitectura orientada a servicios para aplicaciones industriales , 11/2006 Softwaretechnik-Trends ISSN 0720-8928
- ^ Massaro, Simone ¿Qué es OPC UA y cómo afecta a su mundo? , 15/5/2008 planetengineering.com
- ^ "Funcionalidad de cliente y / o servidor de Arquitectura Unificada OPC (UA) en cualquier proyecto basado en JVM" . Consultado el 22 de agosto de 2016 .
- ^ "Tienda web IEC para IEC 62541" . Consultado el 1 de junio de 2018 .
Literatura
- Wolfgang Mahnke, Stefan-Helmut Leitner, Matthias Damm: Arquitectura unificada OPC. Springer Verlag 2009; ISBN 978-3-540-68898-3
- Lange, J., Iwanitz, F., Burke, T. OPC Del acceso a datos a la arquitectura unificada 2010; ISBN 978-3-8007-3242-5
enlaces externos
- Fundación OPC
- Introducción a OPC UA basado en el SDK open62541 de código abierto
- Implementación de OPC UA con licencia CECILL-C
- Desarrollo OPC UA multiplataforma y clientes multiplataforma gratuitos (Windows, Linux, Android, iOS)
- OPC UA mySCADA multiplataforma que se ejecuta en Windows, Linux, MacOS, Android e iOS
- Ignition Native Java OPC UA Stack
- Introducción al modelado del espacio de direcciones OPC UA
- Node-OPCUA -OPC UA para nodejs - (licencia MIT)
- OPC UA para dispositivos Android
- Libro electrónico de arquitectura unificada OPC
- SDK OPC UA de código abierto para Java
- El proyecto FreeOpcUa implementa una pila OPC UA de código abierto (LGPL) y herramientas asociadas.
- SDK para OPC UA (Java) y cliente / servidor gratuito
- La conexión del programador OPC
- Una historia de dos estándares industriales de IoT: DDS y OPC UA
- Woopsa: un protocolo que trae funcionalidades similares a OPC UA a la Web
- Puerta de enlace OPC UA para la industria 4.0
- OPC UA seguro de código abierto S2OPC
- Una guía completa sobre OPC UA
- Aprenda OPC UA en línea