本篇内容主要介绍Node-Red如何用插件node-red-contrib-opcua来作为OPC UA服务器使用,用UaExpert用来进行连接测试。
插件node-red-contrib-opcua及UaExpert的安装请参考Node-Red如何与OPC UA服务器通讯。
在Node-Red左侧面板中将Opcua-Server节点拖放到工作区

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

部署流程后可以看到OPC UA服务器正常运行。
点击工具栏的“加号”按钮,打开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服务器创建成功。

这里我们介绍一另一种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节点与服务器建立了连接。

调试窗口显示如图

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

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

将名称改为“添加文件夹”,在下面的列表中将msg.payload的类型改为“{} JSON”,在输入框中输入如下代码:
{"opcuaCommand":"addFolder"} msg.topic的类型不变,在后面的输入框中输入如下代码:
ns=1;s=TestFolder 点击“完成”按钮确定修改,并部署流程。

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

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

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

复制“添加文件夹”节点,将其连接到Opcua-Server节点,双击打开属性编辑页面,将名称改为“选择文件夹”,msg.payload改为:
{"opcuaCommand":"setFolder"} msg.topic改为:
ns=2;i=5001 
点击“完成”之后部署流程,单独使用看不出效果,等添加变量时一起使用。
复制“选择文件夹”节点,将其连接到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”即可。