OPC UA 是OPC协议的升级版,在学习OPC UA协议之前,先掌握OPC的核心概念,对理解OPC UA有很大好处。
OPC是OLE for Process Control的缩写,即应用于过程控制的OLE。它是工业控制领域的一种标准的数据访问机制(OLE为对象连接和嵌入)。为什么需要这种机呢?因为工业控制领域用到大量的自动化控制设备,由于工业控制领域涉及方方面面有汽车生产,有飞机生产,有钢铁生产,于是有各种各样的设备供应商为这些领域提供自动化控制设备。在这些设备运行时,用户总是希望可以从这些设备获取状态数据,以便知道设备的运行情况和产品的生产情况。但是在OPC出现以前,由于自动控制设备多种多样,所以软件开发商需要开发大量的驱动程序来连接这些设备。往往硬件供应商在硬件上做了一些小小改动,应用程序也可能需要重写。同时,由于不同设备甚至同一设备不同单元的驱动程序也有可能不同,软件开发商很难同时对这些设备进行访问以优化操作。虽然硬件供应商也在尝试解决这个问题,然而由于工业控制客户来源的领域实在太多,各个领域有着不同的需要、同时也存在着不同的数据传输协议,因此也一直没有完整的解决方案。
但是OPC协议的推出解决了这一个问题,这个协议的本质是在硬件供应商和软件开发商之间建立一套完整的数据传输“规则”。只要遵循这套规则,数据交互对两者来说都是透明的,硬件供应商只需考虑应用的需求,软件开发商也不必了解硬件的实质和操作过程。
OPC 协议包含14个子协议,但最重要的是3个子协议
- OPC数据存取(DA):描述访问过程数据的当前值。
- OPC报警和事件(A&E):描述基于事件的信息接口,包括了过程报警确认。
- OPC历史数据存取(HDA):描述了访问历史数据。
OPC采用C/S架构(客户端/服务器)。OPC服务器将数据源如各种控制设备,进行封装,然后向外提供访问接口。OPC客户端连接到OPC数据服务器后,可以访问和使用它提供的数据
OPC使用了微软公司的COM和DCOM技术,这使得OPC无需再定义一个网络协议或者进程间通信协议,省去了重复造轮子的功夫。同时可以直接在windows系统中得到良好应用。但后面这也成了它的局限性,因为在Linux环境下难以使用。
1、OPC 数据访问DA
OPC最重要的接口就是OPC DA接口。OPC 数据访问DA接口可以读写,监控包含当前过程数据的变量。主要应用场景是将PLC,DCS和其他控制设备的实时数据送到HMI和其他显示设备。
由于使用了微软的对象技术,所以OPC的操作都是使用对象来执行的。OPC DA客户端首先通过创建一个OPCServer对象来建立到服务器的连接。而该服务器对象向外提供了各种操作方法,来使得客户端很容易的找到自己想要的数据。具体来说OPCServer根据统一的配置信息,对数据进行分类,它将同一种类别的数据添加到一个OPCGroup对象中,以方便分类访问。
对于大多数控制变量来说,它们往往是周期性变化的,因此客户端也希望周期性的获取到它们的最新值。客户端定义好感兴趣的的数据更新速率,告诉服务器。然后服务器就按这个更新的速率检查值得变化,到达下一个访问周期后,服务器只将已经变化的值发送给客户端即可。
OPC标准会为数据打上时间戳和质量戳,当设备出现故障或者通信中断时,可以用于区分数据的好坏。
2、OPC报警和事件
由于工业现场中如果出现了不正常的信号,往往需要系统发出告警并且要求确认。OPC也提供了报警和事件机制。这同样通过对象来解决。OPC服务器中维护一个OPCEventServer对象,然后采用订阅者模式,在客户端生成一个事件订阅对象OPCEventSubscription
通过定义一些过滤规则,来过滤掉一些不需要关心的事件,同时接收需要的事件。
3、OPC历史数据访问
由于DA只规定了当前数据的获取,很多时候用户需要回溯历史数据,对历史数据进行各类分析,如提取,分析趋势等等。因此OPC对历史数据存储提出了统一的格式,从简单的串行数据记录系统到各种SCADA数据采集系统采集的数据,只要遵循OPC标准都可以统一被检索。当然这也是通过对象技术实现的。
OPC客户端在HDA服务器中创建一个历史数据服务器对象OPCHDAServer。这个对象提供了读取和更新历史数据的所有的接口和方法。
另外用一个OPCHDA浏览器对象OPCHDABrower来提供对历史数据的读写。
好了,OPC的主要3个子协议介绍完了。上图是OPC接口标准的全部协议,一般情况下我们对3个主要子协议掌握即可。