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

说明

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

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

 

1、简介  

  Node-RED是一个构建物联网应用的编程工具,提供了一个基于浏览器的流程编辑器,通过拖拽连接节点的编程方式,将硬件设备、API和在线服务连接在一起,可以一键部署运行,创建好的流程还可以通过导出导入JSON文件轻松实现程序移植。

  它是基于Node.js构建的轻量级开源工具,非常适合运行在Raspberry Pi等低成本边缘设备以及云端。兼容的运行环境如下:

  (1)本地服务器:包括任何基于 Debian 的操作系统(Ubuntu、Diet-Pi)、RedHat、Fedora 、CentOS、Windows、Docker、KylinOS(国产银河麒麟)等

    (2)设备:Raspberry Pi、BeagleBone Boards、Arduino、Android

    (3)云环境:IBM Cloud、SenseTecnic FRED、Amazon Web Services、Microsoft Azure、阿里云等

  Node-RED特点:

  (1)与开发程序代码相比,Node-RED的图形化编程效率更高,简化了开发

  (2)适合作为概念性应用验证的开发工具

  (3)简单易懂,提供的API说明

  (4)具有高度扩充性,已存在大量的Library\Flow\Node可下载使用

  Node-RED Library:

  Node-RED的包存储库中有超过225000个模块,可以轻松扩展面板节点的范围以添加新功能。在Node-RED Library中存在很多公司和个人开发了大量的Node和Flow,目前在官网发布的Node已经有3944个了,未来还会增加。更多内容:https://flows.nodered.org/

  有了丰富的库,可以便捷高效的开发各种应用,比如:通过OPC DA采集数据,可以直接下载node-red-contrib-opcda-client的节点使用,无需开发OPC DA Client。

  Node-RED APIs:

  Node-RED还提供了API,可以用于对开发应用实现动态的扩展和管理。更多内容:https://nodered.org/docs/api/

 

2、Node-RED应用

  Node-RED所在层:

   Node-RED通过安装存储库中的模块,可以获取数据层或者设备层的采集数据,同时可以对采集数据进行处理加工转化为自定义json格式,进行页面展示或入库存储。

 

3、Node-RED环境部署及配置

  Node-RED可以兼容很多运行环境,部署配置可以参照官网教程:https://nodered.org/docs/getting-started/

   为了方便开发的应用后面移植到其他系统,我们使用docker进行部署,直接运行如下命令:

docker run -it -p 1880:1880 -v /home/dockerdata/node-red-data:/data -e TZ=Asia/Shanghai --restart=always --name mynodered nodered/node-red

  这里对Node-RED的data文件夹挂载到/home/dockerdata/node-red-data目录,data是存放是配置文件、flows文件以及下载的模块,挂载能更加方便修改配置及调整模块代码。另外还设置了时区:Asia/Shanghai、开机自启动。

  然后开放1880端口,支持网络访问,通过如下命令查看否开启1880端口:

firewall-cmd --list-ports

  没有开启,则执行如下命令:

firewall-cmd --add-port=1880/tcp --permanent
firewall-cmd --reload

  至此,就可以通过浏览器访问 http://IP:1880,打开Node-RED编辑器页面,无需账号密码即可访问。

  配置登录账号密码

  (1)先进入容器,生成加密密码字符串,复制密码字符串

#进入容器
docker exec -it [NodeRED容器ID] bash
#生成密码
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" [你的密码]

  (2)退出容器,打开/home/dockerdata/node-red-data/setting.js文件,找到adminAuth节点,解除注释,粘贴密码字符串即可。这里也可以设置多个用户,并修改其操作权限,*表示所有权限,具体设置参考:https://nodered.org/docs/user-guide/runtime/securing-node-red

  再次访问 http://IP:1880,会进入Node-RED登录界面

 

 

 

4、Node-RED流程配置

  要实现的是OPC DA数据采集,我们大致会有这么一个思路:首先需要个触发器来定时触发采集行为,再借助OPC DA采集模块进行数据采集,然后将采集到的数据进行处理,处理完后进行入库和页面展示。

  基于这个思路,我们从Node-RED节点组件库中可以快找触发器及其详细的介绍

   把它拖入到流程编辑区,然后双击该节点组件进行配置,这里配置一下重复执行周期,每一分钟执行一次,点击完成后保存。

  然后就是找OPC DA采集模块,可以点击菜单【节点管理】切换到“安装”,输入opcda模糊搜索模块,这里需要安装使用node-red-contrib-opcda-client,进行安装。在安装的过程中,由于网络的问题可能会提示安装失败,要多尝试安装几次。

   安装成功后,在Node-RED组件库中可以看到opcda模块,里面包含read和write两个节点组件,我们想从设备上获取到采集数据,这里拖拽opcda-read就可以了。

    然后编辑opcda-read节点,取个节点名称”采集数据“,然后进行编辑opcda-server的信息

   输入节点名称,填写opc server的ip、域、用户名、密码和ClsId,更新。这里可以使用Browse按钮来预览opc server所有的标签点,并导出标签点的json文件。

   在Items中可以Import标签点文件,也可以直接单个添加,然后点击完成,数据采集模块就配置完成了

   然后我们添加一个输出调试一下可不可以采集成功,可以在组件库找到debug节点组件,来实现数据打印

   拖拽debug完成后,把使用的节点组件使用鼠标点击连线,使其成为一个完整的流程

   流程开发好后,就可以点击部署调试了,点击完成部署后,按钮变灰,数据采集节点开始尝试连接opcserver,连接成功后状态变为Ready了,如果连接失败,需要进一步排查网络和opcserver配置了。

   定时器会一分钟执行一次,采集成功后状态会变成Good Quality,同时输出采集的结果。在实际测试过程中会遇到组件的一个BUG:当采集的标签点状态为非Good的时候,就不能正常输出采集数据了,这个问题就需要修改下组件来解决了

   接下来就是采集数据的处理了,假如我们有两台采集设备,需要标识一下采集数据是从哪个设备上采集上来的,这时候我们需要对采集数据进行更改,这里使用change组件来实现,其他的组件可以都看一下,大致是实现什么功能的就可以了,用的时候可以自行选择

   拖拽使用change节点,编辑节点属性,输入名称,我们可以通过msg.topic来标识采集设备device01,如果对流程的结构不是很清晰,可以浏览官网上的介绍:https://nodered.org/docs/developing-flows/flow-structure

   然后复制配置好的change组件,修改msg.topic的值。把节点都连接起来,进行部署调试

   执行采集流程后,打印出采集数据中,可以看到标识的采集设备名称

   接下来就是进行数据的入库,这里测试,我们考虑使用网络组件来实现,发起http请求把采集数据保存至数据库,可以使用Http request节点实现。实际应用中可以直接写入消息队列(mqtt)或时序数据库(influxdb),mqtt和influxdb都可以在管理节点菜单中搜索安装使用

   下面编辑输入名称和URL,URL为开发好的接口地址,配置好后点击完成

   然后部署测试,这样就完成了设备数据数据采集、处理和入库的简单流程了

   对于采集数据的展示,Node-RED提供了dashboard模块下载使用,本身存在一些问题,建议可以用来快速搭建界面进行Demo演示,实际应用中开发前端界面或使用其他数据展示页面框架。对于dashboard模块的使用,可以查看官网介绍:https://flows.nodered.org/node/node-red-contrib-dashbored,网络上也存在其他案例,可以自行百度啦。

 

5、Node-RED API使用

  当在实际应用中,采集处理流程可能需要动态的调整,比如新增了一些设备,需要采集数据入库,这时候我们再登录到Node-RED去配置节点导入标签点再部署,如何设备过多这个工作也是非常疼的,所以我们想可不可以根据业务系统新增的设备及标签点数据,动态生成流程,并一键部署至NodeRED。

  当然这也是可以的,Node-RED提供了相关的API,可以动态管理流程,下面介绍一下如何实现。更多参考官方介绍:https://nodered.org/docs/api/

  (1)验证身份,获取access token

  这一步需要提前设置账号密码,前面我们已经设置好了,可以直接访问http://IP:1880/auth/login 来验证身份,会返回验证信息

   再调用获取access token接口,参照接口说明:https://nodered.org/docs/api/admin/oauth,下面为Postman测试调用结果,这里获取的access token有效期7天

 

  (2)操作流程

  拿到aceestoken token,我们就可以调用相应的API方法对流程进行操作啦,具体API方法说明:https://nodered.org/docs/api/admin/methods/

  这里以获取已部署的流程为例,调用获取流程的API方法,下面为Postman测试调用结果

 

   其他API这里就不作展示,可以自行尝试操作。然后调用添加、删除、更新就可以实现对流程的动态生成了,这里调用API对流程进行操作后,会自动部署,所以不需要去Node-RED的编辑页面上点部署按钮啦。

 

6、分享总结

通过阅读本片内容,您已经掌握如下内容

(1)了解Node-RED的运行环境、丰富的组件库、APIs及应用场景

(2)如何部署配置Node-RED

(3)如何搭建简单的采集服务

(4)如何利用API动态管理部署流程

 

posted @ 2022-07-11 17:46  Hello牛顿  阅读(4561)  评论(3编辑  收藏  举报