OPC UA

历史

OPC UA和其前身开放平台通信（OPC）是由同一个组织所开发，但两者有显著不同。基金会开发OPC UA的目的是发展比原来OPC通讯架构（只使用Microsoft Windows的进程交换COM/DCOM）更理想的架构，也更符合正在发展中的工业自动化
OPC UA的规格开发了三年，之后花了一年实现通讯协定，OPC UA的第一个版本在2006年问世。
到2015年10月10日为止，OPC UA最近的版本是1.03。除了client/server通讯协定外，新版的OPC UA也加入了publish/subscribe的机制。

通讯协定

OPC UA支援两种通讯协定，这两种通讯协定的差异只有URL的不同，二进制通讯协定是opc.tcp://Server，而Web服务的通讯协定是http://Server，其他情形下，OPC UA对应用程序接口的作业完全透明，其他作业不受OPC UA的影响。
二进制通讯协定的效率最高，其overhead也最少，让需要的资源最小化（不需要XML解析器、SOAP及HTTP，对嵌入式系统格外重要），提供最佳的互操控性（在实现时，二进制通讯协定提供较少的自由度），使用任意选取的TCP通道，可以较容易的进行隧道协议，也可以从透过防火墙开启。
Web服务（SOAP）通讯协定可以支援许多不同的工具（包括Java环境或是.NET环境的工具），使用标准HTTP(S)埠，可以和防火墙共同使用。
所有的实现方式都支援二进制通讯协定，但只有用.NET实现的设备才支援SOAP。

UA通讯协定栈

UA应用程序在服务器端或是客户端，其架构上都有分层的结构。
有些部分和以往的COM Proxy/Stubs相等，由OPC协会提供。可移植性级别（portability level）是新的，简化了引入UA ANSI C通讯协定栈的程序，也简化了移植到其他平台的的难度。OPC协会也提供了针对Window及Linux的port layer。

UA安全性

UA安全性包括了认证、授权、加密以及透过签名实现的资料整合性。针对Web服务会使用WS-SecureConversation，可以和.NET和其他以SOAP实现的软件相容。若是二进制的版本，也会依循WS-SecureConversation的算法，转换为二进制的版本，称为UA Secure Conversation。
有另外一个混合的版本，程式是二进制的，而其传输层是用SOAP。这是在二进制的效率以及对防火墙友善的传输之间的妥协。因为是二进制的程式，会需要使用UA Secure Conversation。
其认证只使用X.509认证，是靠程式开发者决定UA应用程序要使用哪一个证书存储区。例如，也可能使用Active Directory中的公开金钥基础建设（PKI）。

OPC UA API

在许多编程语言中都有UA的API。在C、C++、Java及.NET中有商业的SDK。而至少在C、C++、Java、Javascript(node)及Python中有其开源的通讯协定栈。

.NET下的OPC UA

.NET版本的实现在底层用ANSI C，其余部分使用.NET。因此只有网络端点的处理以及消息分块的取得是从ANSI C的通讯栈处理的。反序列化直接在.NET中进行，会直接转换为.NET的结构及物件。因此其效能会比先反序列化成C言言结构，再复制到.NET结构的效率要好。

Python下的OPC UA

FreeOpcUa专案提供了以Python编程语言实现的OPC UA（和Python 2, 3 及pypy相容），也提供了OPC-UA客户及服务器的高层次抽象化，可以用在客户的应用中，或是渐渐延伸到客户的应用。西瓜