一、OPC通信


OPC——OLE for Process Contrl,微软公司对象链接和嵌入技术在过程控制方面的应用,是一系列接口、方法和属性的标准集。它基于OLE、COM、DCOM技术、XML,采用客户端/服务器(Client/Server)结构,将通讯协议与设备/应用隔离的技术。微软的OLE、COM定义了各种不同的软件如何交互使用和分享数据,从而使得OPC能够提供通用的接口规范,用于各种过程控制设备之间的通讯,不论过程中采用何种应用软件和硬件设备。

OLE——Object Linking & Embeding,对象链接与嵌入,也就是现在的微软的ActiveX。


现在市场上的数据源有很多种形式:PLC、DCS、数据库、Scale 、RTU等等。数据也可以通过多种媒介传输,如以太网、无限通讯、串口通讯等。过程应用所依赖的操作系统也可以不同:Unix、Windows。

过去,设备供应商提供自己的驱动程序来获取数据。但这样以来,供应商就以一种专权享有的方式储存下来。当用户每次需要对系统进行改进或扩张时,用户就必须和同一家设备供应商联系。从另一个角度来看,在传统的控制系统中,智能设备之间及智能设备与控制系统软件之间的信息共享是通过驱动程序来实现的。不同厂家的设备使用不同的驱动程序,致使工业控制软件中包含越来越多的底层通讯模块。另外,由于相对特定应用的驱动程序一般不支持硬件特点的变化,这样,使得工业控制软、硬件的的升级和维护都极为不便。还有,在同一个时刻,两个客户应用一般不能对同一个设备进行读写,因为他们拥有不同的、相互独立的驱动程序。同时对同一个设备进行操作,可能会导致冲突甚至系统崩溃。

OPC技术的出现很好的解决了这些问题。OPC技术的出现解决了这种客户相对被动的局面,因为它是一种技术平台。不论客户端是谁,不论客户端使用哪种工程控制软件,只要它理解OPC语言,都可以顺畅无阻的从设备中取得数据。

作为有20年基础的强大技术平台,OPC拥有一整套包括接口、属性和方法的标准集。从而提供给用户用于过程控制和工业自动化应用。举个例子来说明,在一个庞大的数据共享网络中,OPC扮演什么样的角色。一个跨国公司中有来自各个国家的人,说不同的母语,但他们却能很好的交流,这就是英语作为交流平台的作用。同样,OPC就扮演这样一个数据传译器的作用。

1.  传统技术与OPC技术

1.1传统的过程控制系统结构

传统的过程控制系统是一对一的系统,任何一种HMI等上位监控软件或其它应用软件,在使用某种硬件设备时都需要开发专用的驱动程序。

  

系统构建完成后的最终结果是:

Ø  1种软件要使用N类硬件设备需要开发N个驱动程序;

Ø  M类软件要使用N类硬件设备需要开发M*N个驱动程序;

Ø  每增加1个新的应用软件需要另外开发N个硬件设备的驱动程序;

Ø  每增加1个新的硬件设备需要为M个软件开发新的设备驱动程序。

在上图所示的例子中,针对4种控制设备所完成的3个应用系统一共需要开发3*4=12种驱动程序。新增应用软件或者硬件设备带来的只会是驱动程序种类的迅速增长。


1.2基于OPC技术的过程控制系统结构

基于OPC技术的过程控制系统则可以完美地解决传统方式种的上述问题。

任何一种设备只需要提供一种驱动就可以供任何软件系统使用,系统构建完成后的最终结果是:

Ø  M类软件要使用N类硬件设备只需要开发N个驱动。

Ø  每增加1个新的应用软件不需要另外开发硬件设备的驱动程序;

Ø  每增加1个新的硬件设备只需要为开发1个新设备的驱动程序;

在上图所示的例子中,针对4种控制设备所完成的3个应用系统一共仅需要开发4种驱动程序。新增应用软件或者硬件设备可以轻松的扩展您的系统。



二、应用案例介绍


某项目三个不同的数据源:PLC、震动观测系统、计算引擎

传送数据到三个不同的应用程序。

基本要求:硬件工作负荷最小化、软件应用成本最小化、软件购置成本最小化。

没有OPC技术的传统解决方案:

让每一个控制应用程序和通过中间特制驱动或接口(如RDI)从不同数据源中提取所需数据。举例来说,Wonderware公司的InTouch人机界面是用于可视化工业过程控制的软件,它需要一个IO驱动,用安全通讯协议TSAA交流;另一个驱动通过Modbus通讯协议从BNC振动源中读取数据;还需要一个驱动和Excell电子表格动态交换。这样以来,每一个应用程序和每一个数据出处都需要一个中间驱动或者接口。一共需要9个这样的接口才能满足客户要求,财力、人力耗费较大。当以后需要更多的数据源或更多的应用程序时,将更为麻烦。从技术角度说,如果两个应用程序恰好对同一个设备进行了访问或操作,它们相互独立的驱动程序可能会引起访问上的冲突,从而导致系统出问题。此方案保守估计:10天 5万美元。

应用OPC技术的解决方案:

提供3个OPC服务器,分别给Triconex PLC,BNC振动源和Excell电子表格。这些服务器是Matrikon公司已经开发好的,针对不同协议的数据接口,不需要投入开发费用、时间。作为客户端的三个应用软件业都是支持OPC接口的。这样以来,OPC服务器和应用软件之间实行OPC实时数据通讯。当OPC服务器接收到来自3个不同应用程序对同一个数据点的访问要求时,数据源只需传输该数据一次到相应的OPC服务器便可满足应用软件的要求。相比原来的数据传输量来说,OPC技术大大减少了对数据源也就是硬件设备的负担,从而延长了它们的寿命。此方案:2天,1万美元

快:因为应用OPC服务器即用即拿,即插即用。省:因为开发的人力物力已经完成,所需OPC服务器数量不会太多。

这个案例中,所有的OPC服务器可以安装在一台PC机上进行操作,彼此互相独立。且OPC服务器并不占用处理器的很多时间和容量。但霍尼韦尔的PHD数据库必须单独安装在另外一台PC机上,这是因为霍尼韦尔要求在安装它的数据库的机器上不要安装其他的服务器和软件。

OPC技术的广泛应用还在于它非常好的延展性。比如说,随着客户业务量的增大,客户希望扩大系统规模,那么客户所需要做的就是将原有的硬件设置不断复制。虽然连接的硬件设备可能不同,但是从硬件设计的角度讲,客户已经节省了很多时间和成本。




三、OPC服务器

在OPC结构中,OPC服务器扮演十分重要的角色,其所兼容的设备分类有:

-硬件设备:DCS,PLC,扫描仪,电子设备…

-应用软件:HMI,历史数据库,震动检测器…

-通讯协议:DDE,Modbus,ODBC,GenCS…

-操作系统:Windows,UNIX,VMS,Macintosh,嵌入式OS…

即OPC服务器可以从上面任何一种形式的数据产生实体中读取数据。这个实体可以是霍尼韦尔PHD的Application,也可以是Modbus的通讯协议,还可以是一种PLC,也就是一种Device(硬件设备),或者是一种Platform.


常用的OPC服务器

1. Matrikon公司的OPCServer Simulator


简单,单文件注册后,各种数据类型,各种点类型(只读点,只写点,读写点)都有了,更好的一点是,如果想做大规模的测试,10万点,那么只需要在它的Random下添加任意名称即可,OPCServer会自动给你建出对应的测点,还是随机数变化。

1.1配置时的几个关键概念

Alias Group(Group) ——对Items的分类管理,自定义的。类似于Java中的包。

Alias (Item) ——一个Item代表与服务器进行通信的PLC或其它硬件设备上的一个地址。与Kepware中的一样。

配置顺序如下(在Alias Configuration下):

New AliasGroup/Alias --> Inset Alias


2.Kepware公司的OPCServer

一个商业软件,需要花费金钱购买License的,但Kepware公司的OPCServer需要花钱的不是OPCServer本身,而是采集驱动。不过Kepware公司的OPCServer提供了不花钱的仿真驱动,用来测试上非常好的。

缺点就是太庞大,不简单,学习成本较高。但为了能满足OPC这类产品的各种测试,它真的是最佳选择。可以去它的官方网站下载。

2.1配置时的几个关键概念

Chanel——通道是一个从PC到一个或多个外部设备之间的传播媒介。一个通道可以用来代表一个串行端口(一个安装在个人电脑上的卡或是以太网接口)。

Device——设备代表了与服务器进行通信的PLC或其他硬件。它受限于Channel所选择的设备驱动程序(Device driver)。

Group——对tags的分类管理,自定义的。类似于Java中的包。

Tag——一个Tag代表与服务器进行通信的PLC或其它硬件设备上的一个地址。服务器允许动态标签(客户端自定义创建)和用户定义的静态标签(服务端管理人员创建的标签)。动态标签是直接进入了OPC客户端和指定设备存取数据。静态标签在服务器被创建的且支持标签扩展,他们可以从OPC客户浏览,支持标签浏览。

配置顺序如下:

New Channel -->New Device --> New Group/Tag --> New Tag



四、OPC客户端

OPC客户端同样扮演重要的角色,是用来从OPC服务器获取数据的软件程序

单向地向OPC服务器发出请求,服务器响应。

对OPC而言,最简单的应用:人机界面HMI可以看作是连接到OPC服务器的客户端应用。


常用的OPC客户端

1 Matrikon公司的OPCClient


标准,稳定,单文件,通讯过程的信息还比较丰富。缺点就是大了点,2M多。

2 Kepware公司的OPCClient

功能很强大,标准,稳定,日志信息很丰富,最推荐的功能是支持对OPCServer中点名的条件过滤,支持点表的导入导出,支持自动导入OPCServer的所有点,根据点表识别好点坏点,按照列排序,用它可以弥补很多国产组态软件不能在线遍历OPCServer点表的功能、不能过滤OPCServer点的功能、不能识别OPCServer中好点坏点的功能等。缺点就是非单文件。


工作原理:


详细原理图:

OPC Client和OPC Server配置的安全策略

下表是对 OPC Client 和 OPC Server 所在操作系统之间的安全策略的配置对应说明:


五. Java实现OPC客户端

有两种开源包,分别是JeasyOpc和utgard(Openscada),他们的区别如下:

经对比分析,我们采用Utgard(Openscada)开源技术,Openscada可以很好的实现与OPC服务器的链接及读写数据等功能,还可以随时获取和修改OPC的Server和Item的属性状态信息。所以它能够很好的满足我们的需求,建议使用Openscada。

5.1 Openscada链接配置方法

OPC数据存取服务器由三个对象组成:服务器对象(Server)、组对象(Group)和项对象(Item)。

按说明配置好OPC Server  与 OPC Client 所在电脑的组件服务配置和防火墙设置(windows7直接关闭就行了)注意一定要把本机希望链接OPC服务的用户或用户组添加到DCOM配置列表中,否则链接会失败。

如果其他都配置好了,运行程序还是连接不上的话,首先常看防火墙是否配置(或关闭)。

OPC对象——服务器(OPC  Server)、组(OPC  Group)、项(OPC  Item)。

Openscada开源项目:

         ConnectionInformation中:

                   Host——本地主机/网络主机IP (示例:localhost(默认)、127.0.0.1)

                   Domain——域(默认为localhost)

                   User——用户名

                   Password——用户登录密码

                   Clsid——应用在注册表中相对应的CLSID值

                   Grogid——应用在注册表中对应的程序名称

                   【Clsid 和 Grogid 作用相同,只要设置一个就可以了,如果两个都设置了,程序会优先选择Clsid。我们建议使用Clsid,因为使用Grogid时,Openscada的内部处理还是会通过JISystem.getClsidFromProgId( progId )方法将其转换为Clsid,并且还需要进行服务器上用户的权限的高级配置才可以使用。查找Clsid和Grogid的方法:打开注册表(regedit)—》在HKEY_CLASSES_ROOT下找到相应的OPC服务器名称,该名称就是Grogid,在其目录下的CLSID的值(右边区域)就是Clsid】

5.2 Openscada远程链接时常见的问题及解决方法

(1)org.jinterop.dcom.common.JIException: Message not found for errorCode:0xC0000034

原因:未启动RemoteRegistry和Windows Management Instrumentation服务。

解决方法:打开控制面板,点击【管理工具】—>>【服务】,启动RemoteRegistry和Windows ManagementInstrumentation服务。

 

(2)org.jinterop.dcom.common.JIException:Access is denied, please check whether the [domain-username-password] arecorrect. Also, if not already done please check the GETTING STARTED and FAQsections in readme.htm. They provide information on how to correctly configurethe Windows machine for DCOM access, so as to avoid such exceptions.  [0x00000005]

原因:首先检查错误提示的配置信息是否有误,如果都正确,则原因可能是你访问的当前用户没有该访问权限。

解决方法:

1、打开注册列表,

选择HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}

2、右键点击[权限]>>【高级】>>[所有者]>>添加opc用户到权限项目中,点击应用,确定。