示例代码参见
关键API示例
- 列举某Server下的所有OPC连接
- 列举连接下的所有Group和Item
- Item的同步查询
- Item的异步查询
- Item的发布订阅查询
- Item同步写入
- Item异步写入
参考资料
Matrikon官网: http://www.matrikonopc.cn/downloads/drivers-index.aspx
Matrikon官网: http://www.matrikonopc.cn/downloads/drivers-index.aspx
官方网站http://openscada.org/projects/utgard/
utgard是一个开源的项目,基于j-interop做的,用于和OPC SERVER通讯。
j-interop是纯java封装的用于COM/DCOM通讯的开源项目,这样就不必使用JNI
j-interop.jar | 与COM和DCOM通讯的开源项目 |
---|---|
j-interopdeps.jar | |
jcifs-1.2.19.jar | |
org.openscada.opc.dcom-1.1.0-20141118.151415-27.jar | Utgard dcom的jar包 |
org.openscada.opc.lib-1.1.0-20141118.151453-1.jar | Utgard opc的jar包 |
slf4j-api-1.7.6.jar | Log4j依赖的jar包 |
log4j-1.2.16.jar | Log4j的jar包 |
1 | ServerList serverList = new ServerList("10.1.5.123", "freud", |
1 | public static void main(String[] args) throws Exception { |
1 | public static void main(String[] args) throws Exception { |
1 | private static final int PERIOD = 100; |
1 | private static final int PERIOD = 100; |
1 | private static final int PERIOD = 100; |
1 | public static void main(String[] args) throws Exception { |
OPC服务器把按照OPC应用程序的要求得到的数据访问结果作为方法的参数返回给OPC应用程序,OPC应用程序在结果被返回为止一直必须处于等待状态。
OPC服务器接到OPC应用程序的要求后,几乎立即将方法返回。OPC应用程序随后可以进行其他处理。当OPC服务器完成数据访问时,触发OPC应用程序的异步访问完成事件,将数据访问结果传送给OPC应用程序。OPC应用程序在VB的事件处理程序中接受从OPC服务器传送来的数据。
并不需要OPC应用程序向OPC服务器要求,就可以自动接到从OPC服务器送来的变化通知的订阅方式数据采集(Subscription)。服务器按一定的更新周期(UpdateRate)更新OPC服务器的数据缓冲器的数值时,如果发现数值有变化时,就会以数据变化事件(DataChange)通知OPC应用程序。如果OPC服务器支持不敏感带(DeadBand),而且OPC标签的数据类型是模拟量的情况,只有现在值与前次值的差的绝对值超过一定限度时,才更新缓冲器数据并通知OPC应用程序。由此可以无视模拟值的微小变化,从而减轻OPC服务器和OPC应用程序的负荷。
上述的OPC功能可以总结为如下表:
三种方式的性能总结:
OPC(OLE for Process Control, 用于过程控制的OLE)是一个工业标准,管理这个标准国际组织是OPC基金会.
OPC是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。作为结果,从而可以向用户提供不依靠于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。
利用驱动器的系统连接:
利用OPC的控制系统构成:
OPC对象中的最上层的对象是OPC服务器。一个OPC服务器里可以设置一个以上的OPC组。OPC服务器经常对应于某种特定的控制设备。例如,某种DCS控制系统,或者某种PLC控制装置。
OPC组是可以进行某种目的数据访问的多个的OPC标签的集合,例如某监视画面里所有需要更新的位号变量。正因为有了OPC组,OPC应用程序就可以以同时需要的数据为一批的进行数据访问,也可以以OPC组为单位启动或停止数据访问。此外OPC组还提供组内任何OPC标签的数值变化时向OPC应用程序通知的数据变化事件
双击下载下来的MatrikonOPCSimulation.EXE
安装文件
接受并Next
选择Complete Setup并Next
安装路径为c:\Program Files\Matrikon\OPC然后Next
默认,Next
默认密码是MatrikonOPC
然后选择Next
然后选择Next进行安装
最后安装完成会出现如下图示
选择第一个和第二个Checked
,其他选项Uncheck
第一个的意思是打开MatrikonOPC Configuration Panel 第二个的意思是打开Quick
Start文档(有兴趣可以看一下,英文的)
本次安装包含三部分
1.PLC
和OPC*
使用的PLC:西门子的S7-300,具体型号如下图
使用的OPC server软件:
项目使用KEPServer V6
(427M,中文):百度网盘 ,密码: ykj2
KEPServer的123网盘分享:https://www.123pan.com/s/Lwn8Vv-4qnx
提取码:pTA9
模拟仿真用的 MatrikonOPC
Simulation(50M),百度网盘,密码: mcur
OPC是工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据。O代表OLE(
对象链接和嵌入),P (process过程),C (control控制)。
OPC服务器包括3类对象(Object):服务器对象(Server)、项对象(Item)和组对象(Group)。
OPC标准采用C/S模式,OPC服务器负责向OPC客户端不断的提供数据。
MatrikonOPC: 使用Matrikon OPC Server Simulation
要实现的是Client(Java)和Client(PLC)之间的通信
中间借助OPCServer,Server上设定好地址变量,不同的Client读写这些变量值实现通信。
示意图如下
OPC和DCOM配置:通信不成功都是配置的问题。。。
配置OPCserver
一般一个电脑(win10)同时安装Server(比如KEPServer)和Client(Java编写的),就配置这个电脑就行
如果是在两个电脑上,那就都需要配置。
源码:https://github.com/ctron/org.openscada.utgard
Github上的
最全面的测试(Utgard和JeasyOPC测试):OPC_Client
博客参考
Github上的:资料下载
1.补充学习了一下OPC的概念:
2.使用MatrikonOPC,了解OPCserver是怎么用的
3.关于OPC UA
4.关于用Java实现
5.关于Utgard
utgard是一个开源的项目,基于j-interop
做的,用于和OPC SERVER通讯。
6.关于JeasyOPC
7.最终实现
然后复制编程指导
里的读写代码,读就是启动线程一直对相应地址变量读取数值,写就是对相应地址变量写入数值
8.测试
9.关于订阅方式数据采集
参考:https://www.hifreud.com/2014/12/27/opc-3-main-feature-in-opc/#订阅方式数据采集
并不需要OPC应用程序向OPC服务器要求,就可以自动接到从OPC服务器送来的变化通知的订阅方式数据采集(Subscription)。服务器按一定的更新周期(UpdateRate)更新OPC服务器的数据缓冲器的数值时,如果发现数值有变化时,就会以数据变化事件(DataChange)通知OPC应用程序。
因为没有使用这种订阅方式,所以当时没试过,后来尝试使用Async20Access,会报错。参考上面文章,说是:还必须设置身份标识,,我没试成功。
10.问题:
win10家庭版是否可以?可以,有些麻烦,主要是用户管理部分配置,有人已经验证过可以,我就不试了。建议虚拟机装win10专业版,参考
客户端能不能读到服务端的所有item列表:当然可以,请参考
关于KEPServer的注册表ID
11.maven依赖
1 | <!--utgard --> |
常用的OPC UA客户端:
常用的OPC DA客户端:
步骤1:右击“我的电脑”进行属性设置
1)、设置“我的电脑”默认属性
2)、设置“我的电脑” COM 安全机制之访问权限 -“编辑限制”
步骤 4:选择用户:
1 | Administrator |
步骤 5:设置以上 9 个用户访问权限为:
本地访问:允许
远程访问:允许
3)、设置“我的电脑” COM 安全机制之访问权限 -“编辑默认值”
同 设置“我的电脑” COM 安全机制之访问权限 -“编辑限制”步骤 1 到步骤 5
4)、设置“我的电脑” COM 安全机制之启动和激活权限 -“编辑限制”
增加用户:
1 | Administrator |
配置每个用户权限为:
5)、设置“我的电脑” COM 安全机制之启动和激活权限 -“编辑限制”
增加用户:
1 | Administrator |
配置每个用户权限为:
2、配置 OpcEnum
1)、选择“ DCOM 配置”
2)、选择“ OpcEnum”
注:若此处未找到 OpcEnum 插件,需安装一个 OPC Core Components Redistributable (x64) ,
可以自行百度查找安装,并注意需安装对应操作系统的安装包。
3)、右击配置 OpcEnum 属性之常规为无
4)、配置 OpcEnum 属性之“安全”
5)、对“配置权限”之“自定义”进行“编辑”
增加用户:
1 | Administrator |
配置每个用户名权限为:
6)、配置 OpcEnum 属性之“标识”
注:若此处交互式运用为灰色不能选择,按以下步骤进行操作。
①、在 C 盘中找 OpcEnum.exe 的安装位置
②、把安装位置拉到运行中: OpcEnum.exe 安装位置+空格+ //regserver 回车确定
3、配置 opc server
1)、选择 OPC Server 组件服务名称,本例 OPC Server 为 KEP Server
2)、配置 KEP Server 属性之“常规”为“无”
3)、配置 KEP Server 属性之“安全”
4)、对“配置权限”之“自定义”进行“编辑”
增加用户:
1 | Administrator |
配置每个用户名权限为:
1、进入安全策略程序
控制面板 >管理工具 >本地安全策略
2、配置安全策略之安全
网络访问:本地账户的共享和安全模式设置为“经典”
3、配置安全策略之匿名用户
网络访问:将 Everyong 权限应用于匿名用户设置为“已启用
1、进行防火墙“例外” (允许程序通过 Windows 防火墙通讯)
控制面板 >所有控制面板项 >Windows 防火墙 >允许的程序
2、添加 DCOM 端口
控制面板 >所有控制面板项 >Windows 防火墙 >高级设置
出站规则同入站规则设置
3、添加例外程序 OpcEnum
OpcEnum 路径程序在 C:\Windows\System32\OpcEnum.exe
4、添加例外程序 OPC Serve(本例为 KEP SERVE)
KEP SERVE 的路径程序在 C:\Program Files (x86)\KEPServerEx\servermain.exe
5、添加 MMC 控制台程序
6、打开文件和共享
最后确保下列所有项都在防火墙例外程序中
一 客户端 DCOM 配置
1、配置“我的电脑”
所有配置与服务端配置“我的电脑”相同
一 客户端防火墙配置
1、添加 DCOM 端口
所有配置与服务端配置“我的电脑”相同
项目场景
某行业DCS控制系统通过西门子WinCC系统实现,为了实现智能集控功能,需要从WinCC OA采集产线数据。
技术问题
频繁出现OPC DA Client采集连接断开问题,导致工业互联网平台数据断流,检查DCOM等配置后无果,无法直接排除原因。
分析过程
客户端 190.182.183.15 Administrator/Apef123456
服务端 190.182.57.71/72 Administrator/Apef123456!
1、客户端与服务端登录的用户名与密码不一致,新增了一个用户OpcUser/Apef123456
2、客户端可以ping通服务端IP、服务端不能ping通客户端IP
——————–服务端与客户端测试——————————————
3、190.182.183.15服务器仅远程服务端(190.182.57.71)时,190.182.183.15服务器上的客户端才能正常访问服务端(190.182.57.71)
的OPC服务
4、190.182.183.15服务器仅远程服务端(190.182.57.72)时,190.182.183.15服务器上的客户端才能正常访问服务端(190.182.57.72)
的OPC服务
——————–服务端与服务端测试——————————————
5、190.182.183.15服务器远程服务端(190.182.57.71/72)
时,两服务端的客户端都能正常访问各自的OPC服务,一旦190.182.183.15服务器断开其中一个远程,未断开远程的客户端不能访问已断开远程的OPC服务
初步分析结果
比较明显断流与远程桌面存在关系。
问题深入探究
咨询西门子业内专家后,转发提供URL资料。
1 | https://support.industry.siemens.com/cs/mdm/109792613?c=133562653835&dl=zh&t=1&s=RDP&lc=en-DE |
下面是上述URL链接的内容。
远程访问和远程桌面协议 (RDP)
有关远程访问的最新操作说明,请参见以下常见问题解答:
有关远程组态的详细信息,另请参见 WinCC 信息系统的“组态 > 多用户系统 > 远程组态”部分。
以下方案已经过测试:
也可以在允许方案中通过 OPC 进行通信。
有关“RealVNC”使用方面信息,请访问 Internet 上的客户支持页面:
请注意“RealVNC”不支持键盘锁。仅在使用远程桌面协议连接时,键盘锁才有效。
仅当 WinCC 服务器或单用户系统运行在 WinCC ServiceMode 模式时,才允许使用远程桌面协议 (RDP)。
遵循下列限制:
注意中断远程桌面连接后数据丢失当远程桌面连接中断(例如,由于从运行远程桌面客户端的计算机上拆下网络电缆)时,归档和 OPC 服务器等将不再从数据管理器接收值。该状态将维持到连接恢复或大约 35 秒的超时时间到时。 | |
---|---|
可利用“远程桌面”客户端通过控制台会话来访问 WinCC 系统。
只有同一用户通过控制台接管或初次登录,才可实现通过“远程桌面协议”访问。
所有“远程桌面”用户都必须是目标 PC 上“SIMATIC HMI”用户组的成员。
要启动控制台会话,打开“运行”(Run) 对话框,例如使用 <Windows 按钮 + R>。
输入以下命令:
输入计算机名称或 IP 地址作为服务器。
有关附加参数的详细信息,输入以下命令:
仅使用 UNC 路径远程移植 WinCC 项目。
发布该项目的项目路径或文件夹。
在 WinCC 项目移植器中,将此 UNC 路径作为项目目录。
解决方法:
源网址:https://www.cnblogs.com/tqianly/p/3749357.html
关于OPC通讯做的比较多了。但是OPC的DCOM配置一直没认真去查资料,专心去整。这可能是因为我在测试程序的时候都是把服务器跟客户端在同一台电脑上运行,这样就不要配置DCOM。现在来记录一下下个人在网上查找的资料吧。
http://blog.csdn.net/jinzhili/article/details/970233
http://www.cnblogs.com/johnpher/archive/2012/10/27/2742207.html
我首先是根据第一个博客提供的方法配置了一下,然后用OPC客户端连接的时候,没有成功。提示
“ 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 ”
然后我又按照第二个博客的办法配置了一下,OPC客户端就可以连的上远程的OPC服务器了。所以只能说我这次成功了,但不知道我有没有多余的配置。
下面来说说我做的吧。
(1)服务器的配置
a)安装 NWLink IPX/SPX/NetBIOS Compatible Transport Protocol 协议
在“网络连接”里面找到你用的那个网络端口,比如说我用的是无线上网,选择“无线网络连接”,右击“属性”。
在以上页面中点击“安装” —— “协议”——找到那个协议安装。(我的那个协议已经装过了,所以在列表中可以看到)。
b)关闭防火墙跟杀毒软件。在服务器机跟客户端机都需要。
c) 运行dcomcnfg
在如下图的“我的电脑”的属性页中配置:
在以下的选项卡里面设置:
在“COM安全”选项添加Administrator、ANONYMOUS、LOGON Guest、everyone、Eason(这个是我电脑的登陆名,这里也设置了)
然后每一个都把权限给勾上。
d)在OPC服务器上,还要回到“组件服务”界面,打开”DCOM配置”,找到注册的OPC服务器的名称选项,打开它的属性。
(注:有时做好dcom配置后,需要重新启动电脑才起作用。所以为了安全起见,建议最好重新启动一下电脑,再做下一步)。
e)本地安全策略配置**
**
1、OPC服务器和OPCClient服务器都要设置:打开“控制面版”——“管理工具”——打开“本地安全策略” 安全选项——”网络访问:本地帐户的共享和安全模式”——属性
注:如果不配置这个,那么在连接OPC服务器的时候,就会出现拒绝访问的现象。
(2)客户端的配置
**
**客户端按照以上服务器的
a)、b)、c)、e)配置,然后就可以连接的上了。
附一些可能的配置方法:
一、在装有某OPC SERVER的机器上。DCOM配置如下
\1. 运行服务器上的dcomcnfg程序,进行DCOM配置。
\2. 进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
\3. 进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,
如果不去掉EveryOne,应用服务器不能正常启动。
4.在常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
5.将常规页面中的身份验证级别改为“无”。
6.位置页面中选上“在这台计算机上运行应用程序”。
7.将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
8.身份标识页面中,选择“交互式用户”。
注意NT的GUEST用户不能禁用。
二、在客户端机器上DCOM配置如下:
1后点”开始”->”运行”,输入”dcomcnfg”,然后回车,启动dcom配 置。
2. 常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
3. 将常规页面中的身份验证级别改为“无”。
4. 身份标识页面中,选择“交互式用户”。
5. 位置页面中,选择“在这台计算机上运行应用程序”。
进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
两端配置好后,客户端机器就可以访问远方机器的OPCSERVER了