Node-Red与ModbusTCP设备通信——写数据

一、内容简介

本篇主要介绍Node-Red通过node-red-contrib-modbus插件向ModbusTCP设备写数据,用Modbus Slave工具来模拟从站设备,Node-Red作为主站,从地址0开始向从站设备的线圈和保持寄存器写入一个或多个数据,分别用Modbus-Write、Modbus-Flex-Write两个节点以不同的方式来实现。

本篇内容基于Node-Red与ModbusTCP设备通信——读数据,有关Modbus Slave软件设置、node-red-contrib-modbus插件安装、节点中关联的Modbus Server的添加等操作请参考该文章,在此不再赘述。

二、设置Modbus-Write节点

1.写单个线圈

在Node-RED的工作区中,从左侧面板将一个Modbus-Write节点拖放到流程中,双击节点进行配置,在Unit-Id输入框中输入设备地址“1”,FC下拉框选择“FC 5: Force Single Coil”选项,Address输入框输入“0”,Server选择“modbus-tcp@127.0.0.1:502”选项,如果没有该选项,请参考上一篇内容进行添加,点击“完成”按钮确认。

从工作区左侧面板分别将一个inject节点、一个function节点、一个debug节点拖放到流程中,并依次连接,双击function节点进行配置,添加如下代码:

msg.payload = true;

点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。

下面开始进行测试,点击前面的inject节点触发流,向Modbus TCP设备写入一个数据,此时,Modbus Slave软件中线圈地址为0处的值变为“1”,同时Node-Red工作区右侧的调试面板也会显示设备返回的数据。

双击function节点,将msg.payload的值改为false,点击“完成”确认,再部署流程。

再次点击前面的inject节点,Modbus Slave软件线圈地址为0处的值重新变为“0”。

function节点中msg.payload的值可以用“true”或“false”表示,也可以用“1”或“0”表示。

为方便区分,从工作区左侧面板拖入一个comment节点来对该流进行标注,命名为“写单个线圈”。

2.写多个线圈

在工作区按住鼠标左键拖动,选中流名称为“写单个线圈”的所有节点,按下“Ctrl+c”键或点击鼠标右键选择“复制所选节点”菜单项复制节点,再按下“Ctrl+v”键或点击鼠标右键选中“粘贴节点”菜单项粘贴节点,修改comment节点将该流命名为“写多个线圈”。

双击“写多个线圈”流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 15: Force Multiple Coils”,在Quantity输入框中输入“3”,其余参数保持不变,点击“完成”按钮确认。

双击“写多个线圈”流中的function节点,修改代码如下:

msg.payload = [false,true,true];

点击“完成”按钮确定,再点击工作区右上角的“部署”按钮部署流程。

接下来进行数据写入测试,点击“写多个线圈”流中的inject节点触发流,此时,Modbus Slave软件中线圈地址从0开始的三个值分别变成了“0”、“1”、“1”,写入数据成功。

Node-Red工作区右侧调试面板显示如下:

3.写单个保持寄存器

按照上述方法在工作区复制“写单个线圈”流的所有节点,并命名为“写单个保持寄存器”。

双击该流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 6: Preset Single Register”,其余参数保持不变,点击“完成”按钮确认。

双击该流中的function节点,修改代码,点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。

msg.payload = 888;

接下来进行测试,点击该流前面的inject节点触发流,Modbus Slave软件中保持寄存器地址为0处的值变成了“888”,说明数据写入成功。

4.写多个保持寄存器

在工作区复制“写多个线圈”流的所有节点,命名为“写多个保持寄存器”。

双击该流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 16: Preset Multiple Register”,其余参数保持不变,点击“完成”按钮确认。

双击该流中的function节点,修改代码,点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。

msg.payload = [66,77,88];

然后点击该流前面的inject节点触发流,Modbus Slave软件中保持寄存器地址从0开始处的值分别变成了“66”,“77”,“88”,数据写入成功。

三、设置Modbus-Flex-Write节点

1.写单个线圈

在工作区复制“写单个线圈”流的所有节点,命名为“写单个线圈2”,从左侧面板中拖入Modbus-Flex-Write节点,替换该流中的Modbus-Write节点。

双击“Modbus-Flex-Write”节点,将Server选项改为“modbus-tcp@127.0.0.1:502”,如果已经默认选择该选项,则保持默认值不变,点击“完成”按钮确定。

双击function节点,修改代码为如下内容,确定后部署流程。

msg.payload = { value: true, 'fc': 5, 'unitid': 1, 'address': 0, 'quantity': 1 };

点击inject节点触发流,Modbus Slave软件中线圈地址为0处的值变成了“1”,

Node-Red工作台调试也显示了返回信息,写入数据成功。

2.写多个线圈

在工作区复制“写单个线圈2”流的所有节点,命名为“写多个线圈2”,

双击该流中的function节点,修改代码,确定后部署流程。

msg.payload = { value: [true,false,true], 'fc': 15, 'unitid': 1, 'address': 0, 'quantity': 3 };

点击inject节点测试,Modbus Slave软件显示如下,

成功写入多个线圈。

3.写单个保持寄存器

写单个保持寄存器跟上述流程类似,复制“写多个线圈2”的所有节点,命名为“写单个保持寄存器2”,

双击流中的function节点,修改代码,

msg.payload = { value: 666, 'fc': 6, 'unitid': 1, 'address': 0, 'quantity': 1 };

点击inject节点,测试结果如下

数据写入成功。

4.写多个保持寄存器

复制“写单个保持寄存器2”的所有节点,命名为“写多个保持寄存器2”,

将function节点中的代码修改为

msg.payload = { value: [333,444,555], 'fc': 16, 'unitid': 1, 'address': 0, 'quantity': 3 };

点击流中的inject节点测试,Modbus Slave软件显示如下

成功写入预先设置的值。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值