OPC Unified Architecture


OPC Unified Architecture is a machine to machine communication protocol for industrial automation developed by the OPC Foundation. Distinguishing characteristics are:
Although developed by the same organization, OPC UA differs significantly from its predecessor, Open Platform Communications. The Foundation's goal for OPC UA was to provide a path forward from the original OPC communications model that would better meet the emerging needs of industrial automation.
After more than three years of specification work and another year for a prototype implementation, the first version of the Unified Architecture was released in 2006.
The current version of the specification is on 1.04. The new version of OPC UA now has added publish/subscribe in addition to the client/server communications infrastructure.

Innovations

Although the original binding to COM/DCOM helped OPC to distribute well, it had several drawbacks:
These drawbacks along with a number of other considerations pushed the decision to develop a new and independent stack for OPC UA, which replaces COM/DCOM. The main characteristics of this communication stack were:
This communication stack reflects the beginning of various innovations. The OPC UA architecture is a service-oriented architecture and is based on different logical levels.
OPC Base Services are abstract method descriptions, which are protocol independent and provide the basis for OPC UA functionality. The transport layer puts these methods into a protocol, which means it serializes/deserializes the data and transmits it over the network.
Two protocols are specified for this purpose. One is a binary TCP protocol, optimized for high performance and the second is Web service-oriented.
The OPC information model is a so-called Full Mesh Network based on nodes. These nodes can include any kind of meta information, and are similar to the objects of object-oriented programming. A node can have attributes for read access, methods that can be called, and triggered events that can be transmitted. Nodes hold process data as well all other types of metadata. The OPC namespace contains the type model.
Client software can verify what Profiles a server supports. This is necessary to obtain information, if a server only supports DA functionality or additionally AE, HDA, etc. Additionally, information can be obtained about whether a server supports a given profile. New and important features of OPC UA are:
At the OPC UA DevCon in October 2006 in Munich the first prototypes were presented live. Various UA Servers have been shown on a Beckhoff programmable logic controller and an embedded test board from Euros. The Beckhoff PLC is based on Windows XP Embedded and the embedded controller is based on the real-time operating system Euros. The company Embedded Labs Ltd demonstrated an OPC UA Server based on their own C++ UA Stack executing on a single chip ARM microcontroller with 64kB RAM. In October 2012 the German Fraunhofer-Application Center IOSB-INA and the Institute for industrial Information Technologies showed that an OPC UA server is scalable down to 15 kB RAM and 10 kB ROM and therefore usable at chip level.

Protocols

OPC UA supports two protocols. This is visible to application programmers only via changes to the URL. The binary protocol is opc.tcp://Server and http://Server is for Web Service. Otherwise OPC UA works completely transparent to the API.
The binary protocol offers the best performance/least overhead, takes minimum resources, offers best interoperability and uses a single arbitrarily choosable TCP port for communication easing tunneling or easy enablement through a firewall.
The Web Service protocol is best supported from available tools, e.g., from Java or.NET environments, and is firewall-friendly, using standard HTTP ports.
Binary is supported by all implementations, while only.NET implementation supports SOAP.

Specifications

The OPC UA specification is a multi-part specification and consists of the following parts:
  1. Concepts
  2. Security Model
  3. Address Space Model
  4. Services
  5. Information Model
  6. Mappings
  7. Profiles
  8. Data Access
  9. Alarms and Conditions
  10. Programs
  11. Historical Access
  12. Discovery and Global Services
  13. Aggregates
  14. PubSub
In contrast to the COM-based specifications, the UA specifications are not pure application specifications. They describe typically UA internal mechanisms, which get handled through the communication stack and are normally only of interest for those that port a stack to a specific target or those that want to implement their own UA stack.
The OPC UA application developers code against the OPC UA API and therefore mainly use API documentation. Nevertheless, part 3, 4, and 5 may be of interest for application developers.

Discussion

The OPC UA protocol specification consists of 14 documents for a total of 1250 pages. Due to this complexity, existing implementations are usually incomplete. In addition, the existence of several serialization formats, as well as the possibility of selectively implementing certain services such as PubSub, eventually lead to a great heterogeneity of the OPC UA connection points. Under these conditions, it is finally difficult to develop client applications that are independent of the specific implementation of each server. In this sense, OPC UA does not achieve its promise of ensuring good interoperability of systems. This can be seen typically in factory and infrastructure projects integrating various PLC technologies, each delivered with a different and limited implementation of the OPC UA protocol.
The specification is still evolving, the last specification document volume 14 is dated February 6, 2018, while the first publication of the standard OPC UA dates from 2006.
As a result, despite considerable marketing efforts to support its adoption, OPC UA may be considered at this stage as a standardization attempt rather than an established standard.

UA communication stack

The architecture of a UA application, independent of whether it is the server or client part, is structured into levels.
Some parts equalize to the former COM Proxy/Stubs and get provided by the OPC Foundation. The portability level is new; it simplifies porting the UA ANSI C stack to other target platforms. A port layer for Windows and Linux is also provided by the OPC Foundation.

UA security

UA Security consists of authentication and authorization, encryption and data integrity via signatures. For Web Services the WS-SecureConversation gets used and is therefore compatible to.NET and other SOAP implementations. For the binary variant, the algorithms of WS-SecureConversation have been followed and also converted to a binary equivalent. This is named as UA Secure Conversation.
There is also a mixed version where the code is binary, but the transport layer is SOAP. This is a compromise between efficient binary coding and firewall-friendly transmission. Binary coding always requires UA Secure Conversation.
The authentication uses X.509 certificates exclusively. It relies on the application developer to choose which certificate store the UA application gets bound to. For instance, it is possible to use the public key infrastructure of an Active Directory.

Built-in data types

The OPC UA standard defines 25 built-in data types:
Built-in typeC/C++ equivalentDetailsNodeId type
Booleanbool0/1 0
SByteint8_t-128 to 1270
Byteuint8_t0 to 2550
Int16int16_t-32768 to 327670
UInt16uint16_t0 to 655350
Int32int32_t-2147483648 to 21474836470
UInt32uint32_t0 to 42949672950
Int64int64_t-9223372036854775808 to 92233720368547758070
UInt64uint64_t0 to 184467440737095516150
FloatfloatIEEE single precision floating point value0
DoubledoubleIEEE double precision floating point value0
StatusCodeuint32_t
Stringuint8_t* / std::string3
DateTimeint64_tnumber of 100 nanosecond intervals since 1/1/1601
GUIDimplementation dependent16-byte number used as a unique identifier4
ByteString5
XmlElement
NodeIdnamespace index and NodeId type
ExpandedNodeId
QualifiedNamenamespace index and string
LocalizedTextstring and a locale indicator
NumericRangestring
Variant
ExtensionObjectscalars of any type
DataValuea composite of a value, timestamps and status code
DiagnosticInfodetailed error/diagnostic information

OPC UA APIs

UA APIs are available in several programming languages. Commercial SDK are available for C, C++, Java, and.NET. Open-source stacks are available at least for C, C++, Java, Javascript and Python .

C++/C Implementation

The.NET implementation uses ANSI C for the lower levels and implements the rest natively in.NET. That means only the handling of the socket and the Message-Chunking gets integrated from the ANSI C stack. De-serialization takes place directly in.NET and therefore gets converted directly into.NET structures and objects. This provides better performance than de-serializing into a C structure first and then copying the data to a.NET structure afterwards.

Java implementation

Various stacks for Java were being developed. Similar to.NET, there are principally three variants:
  1. Encapsulate the complete ANSI C stack via JNI, which complicates portability. Although the stack can be ported to different operating systems, it needs to get compiled for those individually. Also, the data needs to get copied to the JNI boundary, but benefits from the performance of C during de-serialization.
  2. Code directly on the network layer and de-serialize in Java. This saves one data copy execution, but still depends on the C stack.
  3. Write a native Java OPC UA stack. This was observed to be the most portable, but estimated to take the most engineering effort to implement. The Eclipse Milo project provides a pure-Java, open-source, implementation of the UA 1.03 client and server specification.
Alternatively, there is the simple variant to only support the WebService protocol. For that, a SOAP Toolkit that supports WS-Security is needed.

JavaScript implementation

is a complete implementation of the OPC UA for client and server entirely writing in JavaScript for Node.js.

Python implementation

provides an API and samples for implementing OPC UA client and servers up to embedded profile level. This includes support for encryption, subscriptions and the default node set.

TypeScript / JavaScript implementation

is an OPC UA client that works in the browser. It is completely written in TypeScript and compiled to JavaScript. The source code is publicly available and has an MIT license. It includes OPC UA binary data encoding and uses WebSockets as the transport protocol.

IEC 62541

IEC 62541 is a standard for OPC Unified Architecture.
IDrelease datetitle
IEC/TR 62541-12016OPC Unified Architecture - Part 1: Overview and Concepts
IEC/TR 62541-22016OPC Unified Architecture - Part 2: Security Model
IEC 62541-32015OPC Unified Architecture - Part 3: Address Space Model
IEC 62541-42015OPC Unified Architecture - Part 4: Services
IEC 62541-52015OPC Unified Architecture - Part 5: Information Model
IEC 62541-62015OPC Unified Architecture - Part 6: Mappings
IEC 62541-72015OPC Unified Architecture - Part 7: Profiles
IEC 62541-82015OPC Unified Architecture - Part 8: Data Access
IEC 62541-92015OPC Unified Architecture - Part 9: Alarms and Conditions
IEC 62541-102015OPC Unified Architecture - Part 10: Programs
IEC 62541-112015OPC Unified Architecture - Part 11: Historical Access
IEC 62541-132015OPC Unified Architecture - Part 13: Aggregates
IEC 62541-1002015OPC Unified Architecture - Part 100: Device Interface

Literature