来源:https://blog.csdn.net/u013120247/article/details/50163147
1. 什么是OPC
1.1 名词解释
OPC——OLE for Process Contrl,微软公司对象链接和嵌入技术在过程控制方面的应用,是一系列接口、方法和属性的标准集。
它基于OLE、COM、DCOM技术、XML,采用客户端/服务器(Client/Server)结构,将通讯协议与设备/应用隔离的技术。
微软的OLE、COM定义了各种不同的软件如何交互使用和分享数据,从而使得OPC能够提供通用的接口规范,用于各种过程控制设备之间的通讯,不论过程中采用何种应用软件和硬件设备。
OLE——Object Linking & Embeding,对象链接与嵌入,也就是现在的微软的ActiveX。
1.2 基于OPC技术的过程控制系统结构
![](https://img2018.cnblogs.com/blog/1049945/201811/1049945-20181101153858399-312291036.png)
像所有的COM实现一样,OPC的结构是客户机服务器模式。
各个OPC客户程序通过OPC标准接口对各OPC服务器管理的设备进行操作,而不需关心服务器的实现细节及设备内部的具体细节。
OPC把开发访问接口的任务放在硬件生产厂家或第三方厂家,以OPC服务器的形式提供给用户,解决了软、硬件厂商的矛盾,完成了系统的集成,提高了系统的开放性和可互操作性。
1.3 工作原理
详细原理图:
![](https://img2018.cnblogs.com/blog/1049945/201811/1049945-20181101154018061-956153318.png)
1.4 OPC服务器所兼容的设备分类
- 通讯协议:DDE,Modbus,ODBC,GenCS…
- 操作系统:Windows,UNIX,VMS,Macintosh,嵌入式OS…
即OPC服务器可以从上面任何一种形式的数据产生实体中读取数据。
这个实体可以是霍尼韦尔PHD的Application,也可以是Modbus的通讯协议,
还可以是一种PLC,也就是一种Device(硬件设备),或者是一种Platform。
2.常用的OPC服务器
2.1 Matrikon公司的OPCServer Simulator
简单,单文件注册后,各种数据类型,各种点类型(只读点,只写点,读写点)都有了,
更好的一点是,如果想做大规模的测试,10万点,那么只需要在它的Random下添加任意名称即可,OPCServer会自动给你建出对应的测点,还是随机数变化。
- Alias Group(Group) ——对Items的分类管理,自定义的。类似于Java中的包。
- Alias (Item) ——一个Item代表与服务器进行通信的PLC或其它硬件设备上的一个地址。与Kepware中的一样。
- 配置顺序如下(在Alias Configuration下):New AliasGroup/Alias --> Inset Alias
2.2 Kepware公司的OPCServer
一个商业软件,需要花费金钱购买License的,但Kepware公司的OPCServer需要花钱的不是OPCServer本身,而是采集驱动。
不过Kepware公司的OPCServer提供了不花钱的仿真驱动,用来测试上非常好的。
缺点就是太庞大,不简单,学习成本较高。但为了能满足OPC这类产品的各种测试,它真的是最佳选择。可以去它的官方网站下载。
配置时的几个关键概念
- Chanel——通道是一个从PC到一个或多个外部设备之间的传播媒介。一个通道可以用来代表一个串行端口(一个安装在个人电脑上的卡或是以太网接口)。
- Device——设备代表了与服务器进行通信的PLC或其他硬件。它受限于Channel所选择的设备驱动程序(Device driver)。
- Group——对tags的分类管理,自定义的。类似于Java中的包。
- Tag——一个Tag代表与服务器进行通信的PLC或其它硬件设备上的一个地址。服务器允许动态标签(客户端自定义创建)和用户定义的静态标签(服务端管理人员创建的标签)。动态标签是直接进入了OPC客户端和指定设备存取数据。静态标签在服务器被创建的且支持标签扩展,他们可以从OPC客户浏览,支持标签浏览。
配置顺序如下:New Channel -->New Device --> New Group/Tag --> New Tag
3. 常用的OPC客户端
3.1 Matrikon公司的OPCClient
标准,稳定,单文件,通讯过程的信息还比较丰富,我是比较喜欢用它在创建OPC组时定义同步方式或异步方式来验证远程计算机的OPC配置是否正确。缺点就是大了点,2M多。
3.2 Kepware公司的OPCClient
功能很强大,标准,稳定,日志信息很丰富,最推荐的功能是支持对OPCServer中点名的条件过滤,支持点表的导入导出,支持自动导入OPCServer的所有点,根据点表识别好点坏点,按照列排序,用它可以弥补很多国产组态软件不能在线遍历OPCServer点表的功能、不能过滤OPCServer点的功能、不能识别OPCServer中好点坏点的功能等。缺点就是非单文件。
4. OPC Client和OPC Server配置的安全策略
下表是对 OPC Client 和 OPC Server 所在操作系统之间的安全策略的配置对应说明:
![](https://img2018.cnblogs.com/blog/1049945/201811/1049945-20181101154057283-75968944.png)
5. 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用户到权限项目中,点击应用,确定