OPC 协议
# 常用协议说明
# 1 协议介绍
OPC 全称是 OLE for Process Control,即用于过程控制的 OLE,是针对现场控制系统的一个工业标准接口,是工业控制和生产自动化领域中使用的硬件和软件的接口标准。
OPC 标准是由行业供应商、终端用户和软件开发者共同制定的一系列规范。这些规范定义了客户端与服务器之间以及服务器与服务器之前的接口,比如访问实时数据、监控报警/事件、访问历史数据和其他应用程序等,都需要 OPC 标准的协调。
OPC 标准于 1996 年首次发布,实现把 PLC 特定的协议(如 Modbus、Profibus 等)抽象成为标准化的接口,作为“中间人”的角色把其通用的“读写”要求转换成具体的设备协议。
# 2 OPC DA 和 OPC UA 的区别
OPC 目前有 OPC DA 和 OPC UA 两种,下面介绍两种规范的区别:
OPC UA 为了应对标准化和跨平台的趋势,为了更好的推广 OPC,OPC 基金会近些年在之前 OPC DA 成功应用的基础上推出了一个新的 OPC 标准-OPC UA。
OPC UA 接口协议包含了之前的 A&E, DA,OPC XML DA or HDA,只使用一个地址空间就能访问之前所有的对象,而且不受 WINDOWS 平台限制,因为它是从传输层 Scoket 以上来定义的。
这点后面会提到,导致了灵活性和安全性比之前的 OPC 都提升了。
2.1 OPC UA 的优势
优势
一个通用接口集成了之前所有 OPC 的特性和信息,A&E, DA,OPC XML DA or HDA
更加开放,平台无关性,WINDOWS,Linux 都能兼容
扩展了对象类型,支持更复杂的数据类型比如变量,方法和事件
在协议和应用层集成了安全功能,更加安全
易于配置和使用
核心的区别是因为 OPC DA 和 OPC UA 协议使用的 TCP 层不一样,如下:
OPC DA 是基于 DOM/COM 上,应用层最顶层
OPC UA 是基于 TCP IP scoket 传输层
2.2 其他一些区别
OPC DA 虽然通过配置COM/DOM来提供数据加密和签名功能,配置防火墙,用户权限来让数据访问变得更加安全,但是会增加额外的工作量,尤其是对非 IT 的工程师来说。
对于 OPC UA,数据加密和签名,防火墙等都是默认的功能。比如基于 DOM 的 OPC 使用的动态端口分配,端口不固定,让防火墙难以确定,而 OPC UA 的端口都是唯一的,比如 SINUMERIK 840D 是 PORT 4840,SIMATIC S7 是 PORT 4845。DOM/COM 也可以生成不同级别的事件日志,但日志内容不够详细,只会提供“谁连接上服务器”这种,而对于 OPC UA 来说都是默认的功能,生成的日志内容更全面。
# 3 通俗讲解 OPC UA 的入门篇
在讲这个OPC UA之前,需要先介绍几个单词缩写术语。
术语
IOT:物联网
IIOT:工业IOT,工业物联网
IT:Information Technology
OT: Operational Technology
那么,最直接的问题是:什么是 OPC UA。首先,OPC UA 是一种协议。说到协议,在工业领域里,我想大家最熟悉的,就是 Modbus 协议了。那 Modbus 这个协议呢,可以串口通信,也有以太网通信。Modbus 可以读和写位数据,也可以读和写字数据。位数据呢,就是所谓的开关点。字数据呢,就是什么温度,湿度,产量等数据,也就是非开关类型数据。那 OPC UA 呢,是一种基于以太网的协议。其实现在但凡一种协议,基本都离不开读和写位数据,字数据。OPC UA 也一样的。但是 OPC UA 和 Modbus 或者,和别的协议有什么不太一样呢。随后会演示一下。
(该图片源于某介绍视频里所使用的PPT的截图)
该视频源:https://www.aparat.com/v/r4FgE/OPC_UA_Security_by_Darek_Kominek_v2016_1
从图中介绍,可以看出,OPC UA可谓是上天入地,无所不能,秒天秒地呀。毋庸置疑,OPC UA已经在IIOT里可以说很牛逼了。 OPC标准在1996年的时候开始发布的,目标就是要把PLC的特定协议,像modbus之类的,抽象出来,做成统一的接口或应用。有点类似于现在的网关,可以接各PLC协议,然后由网关与服务器特定的协议,把各plc的数据,上报给服务器。各平台也有接口可以调用,这样对平台来说,就不需要管plc是什么plc,具体是什么协议。
OPC UA就是在OPC的基础上,创立了新的框架。此处不再过多讨论OPC。通俗地讲,就是OPC UA约定了一套协议标准,对于所有使用OPC UA协议的设备和电脑等,都可以相互访问,控制等。那么问题来了,对于使用modbus 协议的设备来说,那确实也是可以互相访问了。那如果全世界的设备,都使用modbus 协议,该多好呀,设备都能互相兼容。但事实并没有我们想得那么美好。我觉得原因无非就是modbus协议已经满足不了需求了,因为modbus协议太简单了,简单不代表淘汰,还是有很多设备也还在使用modbus协议的。此处拿modbus协议作类比,主要是让大家更好地了解和接受OPC UA的入门。好,下面我们就开始来认识一下OPC UA。
3.1 OPC UA 的连接
像 modbus tcp 属于 tcp 协议,常用端口是 502.OPC UA 也是一种 tcp 协议,常用端口是 4840。
如图是 OPC UA 的连接,OPC UA 是需要登录过程的,可以使用用户名和密码,还可以使用证书。(图中所使用的工具是 HSLSharp ,是一个非常好用的调试和开发 OPC UA 的神器,强烈推荐)OPC UA 可以说安全性是非常好的,具备信息加密,身份验证和审核。登录之后呢,干什么呢。
3.2 OPC UA 的变量发现
Modbus 的变量类型,或者说地址访问,主要是有位数据:0X,1X。还有字数据:3X,4X。类型单一,数据表示不明确。基本每个项目都要有相应的地址映射表。也就是什么地址表示温度,什么地址表示产量,这样不利于项目的实施和维护。
如图所示,是某个 OPC UA 设备的地址空间。可以看出,OPC UA 在变量,或者地址上,具备的特性:
允许 OPC UA 客户端发现服务端的变量。
这个怎么说呢,这对使用者来说,就不需要去看设备的程序或配置,也不需要再去找什么点表等等,OPC UA 客户端就可以获取当前连接设备的变量。也就是这个设备有什么变量,客户端都能搜索出来了,这个可以说是非常有用的。
变量数据是分层表示的。
分层表示可能有点专业术语的感觉。 这个就和 windows 的目录结构可以说一样一样的。这样的好处就是不同的变量数据的分组关系会比较明确,利于复杂的数据结构。
变量直接以名字显示。
这个就是我们所谓的标签变量了。看这个变量名,就知道这个数据是啥意思了。标签变量的优势,不用多说,反正就是有优势。 这种就区别于像 modbus 的 3X,4X 这样的变量类型。这在使用和维护上,就可以减少对点表的依赖,甚至不再需要数据点表。也有点类似于数据库的概念。拿到变量之后,干什么呢。
3.3 变量的读写
拿到变量之后,无非就是读数据或者写数据。
变量具备读写属性
OPC UA 客户端可以获取每个变量的属性,属性里就包括该变量是可读的,还是可写的。对于不可写的变量,客户端发起写请求,服务端也会有相应的出错提示。
变量具备数据类型
当我们要知道某个数据的值,比如产量的值是 10000 个,这个 10000,我们并不关系是浮点数的 10000 还是 32 位有符号或无符号的 10000。 因为每个变量都具备各自的数据类型,并能按相应的数据类型。像 modbus 这个的字类型,当我们确定一个变量,比如确定一个温度变量,需要知道是4X多少,以及是浮点数还是有符号数。而这个确定,就需要参考 PLC 或设备里对这个变量的定义,或者需要特定的数据点表对照,使用起来十分不方便。
如图,当我们扫描到变量后,当需要对一些变量进行读取时,选择我们要读取的变量后,就可以向服务端读取数据。每个变量有自己的变量类型,而对使用者或者用户来说,更多关心的是数据,也就是展现出来的值。而对开发者来说,或者就协议来说,变量类型是非常有用的。这在数据传输,转换,存储等,数据的类型是要匹配的。
3.4 数据的订阅
像 modbus 这样的协议,要获取数据,每次都需要向服务端发起读命令,然后服务端再把数据回复。这种就是问答式的数据获取,问答式的数据获取,一个是效率问题,要想数据更新快,就要问的频繁,这也种造成网络请求压力。 而 OPC UA,存在一种订阅方式。对数据进行订阅之后,就不用每次去问这个变量是多少了,就可以由服务端这边主动把数据发过来的。
OPC UA 安全性如何?
放心,这个协议很安全。什么会话加密,用户验证等应用尽有,安全地很。
OPC UA 有什么数据?
OPC UA就类似于访问电脑文件夹一样,你能看到什么目录,目录里有什么文件(变量),文件(变量)是什么类型,数据是多少,一目了然。方便管理和维护,让你效率提高再提高。当然里面的数据有普通数据啦,报警数据里,历史数据啦等等。
OPC UA 的通用性如何?
这个就有意思了。这个就要拿MQTT来说一下了。MQTT虽然是一个标准协议,但也只是提供了标准的传输通道,也就提供了主题和payload的传输模式,但是每一家开发的MQTT,定义的主题,以及payload格式都不一样,这就造成了现在火的一塌糊涂的MQTT,其实兼容性是非常差的。每一家都希望别人以他们为标准,按他们家来使用。不过,MQTT更多也是在云平台和设备之间的应用,那每家开发自己的产品,那就都不一样了。
而OPC UA,也是一个标准协议,但凡使用了OPC UA的设备,就必要符合OPC UA规范。这种情况就不会像MQTT那样,每家定义的不一样。而OPC UA,每家不一样的地方,无非就是数据,或者变量不一样。比如有些设备的有温度,湿度。有些设备没有温度,但有产量的。但在OPC UA的使用,应用,方案,框架等,都具备很多的兼容性,移植性等。当然,这点更多是对开发者而言的。但开发既是成本呀。企业可不希望换一种设备或换一个平台,就要重新开发,重新花时间设计框架,制定需求等等。因此OPC UA在工厂上,MES系统等应用也非常广泛,特别是现在的智能工厂,基本会看不到modbus的影子,基本都是OPC UA或者Ethernet/IP等协议。
OPC UA可以运行在哪里呢?
可以这么说,基本能有程序运行的地方,就能运行OPC UA。小至单片机,大到服务器。
# 4 OPC 调试工具和数据库配置
OPC 协议调试我们推荐使用“HSLSharp”工具。工具的详细使用和数据库配置请参考 OPC 调试说明。