参考:
https://blog.csdn.net/ioufev/article/details/81240572
https://wenku.baidu.com/view/20a9fb6aee06eff9aef807c9.html
https://www.hifreud.com/2014/12/27/opc-4-client-invoke-use-utgard/
file:///D:/tmp/jeasyopc-2.3.2/jeasyopc-2.3.2/doc/manual/guide.html#Quick_Start
前言:
java连接opcserver的两种方式,代码都很简单,概念也容易理解,但是第一次对windows的dcom配置调试非常痛苦,因为调试的代码异常根本没有什么有用的信息。可能因为是安全等级的原因,只有服务器端才能知道异常信息,连接客户端只知道连接失败了,提示:登录被拒绝。
准备环境:
一台windows10专业版的电脑作为opc服务器(家庭版无法配置dcom模块)
一台windows7的电脑安装opc客户端(使用了hyper-v虚拟机建了一台虚拟机,由于jeasyopc只支持32位的电脑,所以装了32位的windows7操作系统)
需要的工具:
MatrikonOPC Server for Simulation(模拟测试用的服务端)
MatrikonOPC Explorer(连接opcserver的客户端)
eclipse(用于代码调试)
连接方式:
本次使用了两种方式去连接opcserver:Utgard以及Jeasyopc
测试步骤:
1,先在模拟opc服务端的服务器上安装MatrikonOPC Server for Simulation
ps:安装很简单,其他帖子里面有。
2,在opc客户端的服务器上安装MatrikonOPC Explorer
ps:安装服务端的时候会自动安装客户端,也可以单独下载安装。创建连接的时候,注意填写ProgID:ProgID是程序给某个CLSID指定一个易记的名字。 在注册表中HKey_Classes_Root下可查看。
3,配置两台电脑的dcom;
ps:这个东西网上有很多文档,并且细节上还各不相同,我感觉原则上你使用的用户,要属于组Distributed COM User,并且要有读写权限,配置中标识属性中通常建议选交互式用户,但是我的现场环境是选的下列用户(客户环境不能修改),也可以登录。另外网上教程里说服务器和客户端都需要配本地DTC的属性里的网络DTC属性,由于客户生产服务器不敢修改任何配置,所以我跳过了这一步,也没有任何问题。
4,在MatrikonOPC Explorer种调试是否能远程获取服务端的tag;
ps:如果这步通了,说明dcom配置没有问题。这步我卡了很久,刚开始一直搜索不到服务器上的opc,没有任何提示信息,于是检查windows服务器的登录安全日志,发现一直报错登录失败,找不到用户,发现虚拟机里登录的用户admin,在服务器上并不存在,于是在服务器端添加用户admin,并配置好dcom权限,问题解决(就是说你必须本地建一个和服务器端dcom标识配置的用户同名同密码的用户,并在客户端本地登录这个用户,再使用客户端去连)。在现场环境还出现一个问题,客户端搜索了服务器上的opc后,报错提示服务器异常,后来发现是由于现场服务器主备切换后没有连接到正确的opcserver导致。
5,写代码获取服务端的tag;
ps:按其他帖子里写就好了,两种方式都可以获取数据成功。但是jeasyopc查询服务列表一直报找不到主机,但是其他获取数据的接口又可以获取数据,不知道为什么,由于底层封装的c++代码,也没法跟踪调试。