Node-RED实现OPC DA数据采集(2)

说明

  最近遇到了这样一种工业应用场景:现场存在多个OPC DA Server,同时连接来采集数据。考虑如果开发OPC DA Client实现多路数据采集,实现起来显得过于复杂,而且不支持跨平台部署,所以要寻找一种易于实现的采集方式,于是开启了Node-RED之旅

   本次分享计划分为两篇:第一篇分享Node-RED介绍、部署配置及在实际场景应用;第二篇分享使用过程中遇到的BUG及系统问题汇总

 

1、OPC DA Read组件问题

(1)当通过Node-RED编辑页面导入流程文件后,或删除报错的节点,并部署后,输出窗口会一直报Error信息,如下图所示

 

 解决方法:经过测试,重新部署还是会报错,需要重启Node-RED容器,具体原因猜测可能是因为NodeRED缓存了之前部署好的报错节点,即使删除了,还是会报错。

(2)设备中存在一个标签点为Bad,opcda-read组件的状态会变成Bad Quality,同时停止返回数据,导致采集不到设备数据

 解决方法:找到目录下的组件文件/home/dockerdata/node-red-data/node_modules/node-red-contrib-opcda-client/opcda/opcda-read.js,可以发现组件做了判断:状态不是good就不返回数据,我们可以把蓝框里的代码复制到红框里面,让它返回采集数据就可以了。

(3)当opcda-read组件在采集的过程中,因为外部原因导致连接opc server断开,而后组件状态一直为Ready,不进行数据采集

 解决方法:找到目录下的组件文件/home/dockerdata/node-red-data/node_modules/node-red-contrib-opcda-client/opcda/opcda-read.js,通过跟踪node对象的属性状态可知,出现问题时,发现node.isReading的值为true,说明组件在读采集数据。而当触发器定时读取采集数据时,发现node.isReading的值为true,就不进行采集数据了,所以在重新连接初始化node对象时,需要将node.isReading的值赋值为false即可

 (4)当服务器出现断电危机,再重启机器后opcda组件不能正常连接到opc server,一直报Error信息

 解决方法:找到目录下的组件文件/home/dockerdata/node-red-data/node_modules/node-red-contrib-opcda-client/opcda/opcda-read.js,其实这个过程包含两种情况,一种是Node-RED启动后,组件第一次尝试连接就失败了;另外一种是在采集的过程中突然连接断开。针对这两种情况我们都需要做相应的处理,修改内容如下:

 

2、OPC DA Server问题

(1)opc server部署在windows server 2019,2022年6月份系统自动升级后,导致组件连接opc server失败,经过排查发现,windows在更新(KB5013941补丁包)中默认对DCOM启用强化导致,而且更新包暂未修复该兼容性问题,目前可以通过修改注册表项的方式将其停用,据说2023年3月份提供兼容。

解决方法:修改注册表,路径是:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat,找到RequireIntegrityActivationAuthenticationLevel值,修改为0(目前是大部分服务器都没有这个值名称的,需要手动添加,值类型是REG_DWORD,基数一定要是十六进制),重启系统生效

 (2)在使用Kepware模拟opc server时,组件始终连接不上opc server

解决方法:Kepware的DCOM默认配置的标识为交互式用户,需要修改为启动用户或指定用户,然后重启服务器。

 

 

再遇到其他问题会持续更新...

 

posted @ 2022-07-11 20:42  Hello牛顿  阅读(1997)  评论(0编辑  收藏  举报