如何将Node-Red作为OPC UA服务器

服务器 0

一、内容简介

本篇内容主要介绍Node-Red如何用插件node-red-contrib-opcua来作为OPC UA服务器使用,用UaExpert用来进行连接测试。

插件node-red-contrib-opcua及UaExpert的安装请参考Node-Red如何与OPC UA服务器通讯。

二、OPC UA服务器的创建和连接

1.创建OPC UA服务器

在Node-Red左侧面板中将Opcua-Server节点拖放到工作区

双击该节点,打开属性编辑页面,记录下Port的值“53880”备用。

部署流程后可以看到OPC UA服务器正常运行。

2.UaExpert登陆

点击工具栏的“加号”按钮,打开Add Server窗口,选择Discovery选项卡

在树形列表中双击Custom Discovery下的“加号”按钮,打开URL输入对话框,输入服务器端点“opc.tcp://localhost:53880”,点击“OK”按钮确定。

可以看到在Custom Discovery下多了一个服务器,先选中服务器名“Node-RED OPCUA”下的“None”条目,Authentication Settings组合框默认选择第一项“Anonymous”,保持不变,点击“OK”按钮确定。

服务器连接成功,同时也说明Node-Red OPC UA服务器创建成功。

3.Node-Red登陆

这里我们介绍一另一种Node-Red登陆的方法,从Node-Red左侧面板中分别拖放一个inject节点、一个function节点、一个OpcUa-Client节点和一个debug节点到工作区,依次将其连接,如图

双击OpcUa-Client节点,打开属性编辑页面

点击Endpoint后的“笔型”按钮,打开Endpoint编辑页面

在Endpoint输入框输入“0”,点击“添加”按钮,完成修改,回到上级页面点击“完成”按钮,结束对OpcUa-Client节点的编辑。

双击function节点,输入如下代码:

msg.topic = "Reconnect";msg.action = "reconnect";msg.OpcUaEndpoint = {    credentials: {},    endpoint: 'opc.tcp://localhost:53880',    securityPolicy: 'None',    securityMode: 'None',    login: false,    user: undefined,    password: undefined}return msg;

点击“完成”按钮,确定修改,并部署流程,点击inject节点触发流,可以看到OpcUa-Client节点与服务器建立了连接。

调试窗口显示如图

三、添加元素

1.添加文件夹

从Node-Red左侧面板中施放一个inject节点和一个debug节点到工作区,使之与上面的Opcua-Server节点连接,如图

双击inject节点,打开属性编辑页面

将名称改为“添加文件夹”,在下面的列表中将msg.payload的类型改为“{} JSON”,在输入框中输入如下代码:

{"opcuaCommand":"addFolder"}

msg.topic的类型不变,在后面的输入框中输入如下代码:

ns=1;s=TestFolder

点击“完成”按钮确定修改,并部署流程。

点击inject节点触发流,在UaExpert的Address Space面板可以看到TestFolder已经添加成功。

2.选择文件夹

打开UaExpert,从Address Space面板找到文件夹“DeviceSet”

再在右侧Attributes选项卡中找到其NodeId“ns=2;i=5001”

复制“添加文件夹”节点,将其连接到Opcua-Server节点,双击打开属性编辑页面,将名称改为“选择文件夹”,msg.payload改为:

{"opcuaCommand":"setFolder"}

msg.topic改为:

ns=2;i=5001

点击“完成”之后部署流程,单独使用看不出效果,等添加变量时一起使用。

3.添加变量

复制“选择文件夹”节点,将其连接到Opcua-Server节点,双击打开属性编辑页面,将名称改为“添加变量”,msg.payload改为:

{"opcuaCommand":"addVariable"}

Msg.topic改为:

ns=1;s=TestAddVariable;datatype=Float;value=88.8

点击“完成”按钮确定修改,并部署流程。

点击“添加变量”节点触发流,在UaExpert的Address Space面板可以看到已经添加了一个名为TestAddVariable的变量。

拖动该变量到Data Access View选项卡,其值显示为88.8,添加变量的同时进行了初始化。

接下来我们再配合选择文件夹一起测试一下,重新部署Node-Red,以重新初始化OpcUa Server节点,点击“选择文件夹”节点,选择文件夹DeviceSet,再点击“添加变量”节点,调试窗口显示如下

打开UaExpert,在Address Space面板可以看到变量TestAddVariable在文件夹DeviceSet下

四、订阅

复制“添加变量”节点,将其与OpcUa Client节点连接,双击该节点,打开属性编辑页面

将名称改为“订阅”,msg.payload改为:

{ "action": "subscribe"}

msg.topic改为:

ns=1;s=TestAddVariable

订阅上面添加的变量。

点击“完成”按钮之后部署流程

部署流程之后,OpcUa Server会重新初始化,所以需要点击“添加变量”节点,重新添加变量“TestAddVariable”,再点击function节点前面的inject节点,连接服务器,再点击“订阅”节点,调试窗口显示如下

说明订阅成功,打开UaExpert,在Address Space面板找到TestAddVariable变量,在Attributes选项卡中将Value的值修改为“666”

回到Node-Red,可以在调试窗口看到其值的变化

如果您想获取文章相关的代码、工具等资料,关注公众号“NodeRed物联网”,回复“nr”即可。

也许您对下面的内容还感兴趣: