抖音粉丝群1
『7x24小时有问必答』

一、内容简介
本篇主要介绍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”选项,如果没有该选项,请参考上一篇内容进行添加,点击“完成”按钮确认。
1.png
从工作区左侧面板分别将一个inject节点、一个function节点、一个debug节点拖放到流程中,并依次连接,双击function节点进行配置,添加如下代码:

msg.payload = true;

2.png
点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。
3.png
下面开始进行测试,点击前面的inject节点触发流,向Modbus TCP设备写入一个数据,此时,Modbus Slave软件中线圈地址为0处的值变为“1”,同时Node-Red工作区右侧的调试面板也会显示设备返回的数据。
4.png
双击function节点,将msg.payload的值改为false,点击“完成”确认,再部署流程。
5.png
再次点击前面的inject节点,Modbus Slave软件线圈地址为0处的值重新变为“0”。
6.png
function节点中msg.payload的值可以用“true”或“false”表示,也可以用“1”或“0”表示。
为方便区分,从工作区左侧面板拖入一个comment节点来对该流进行标注,命名为“写单个线圈”。
7.png
2.写多个线圈
在工作区按住鼠标左键拖动,选中流名称为“写单个线圈”的所有节点,按下“Ctrl+c”键或点击鼠标右键选择“复制所选节点”菜单项复制节点,再按下“Ctrl+v”键或点击鼠标右键选中“粘贴节点”菜单项粘贴节点,修改comment节点将该流命名为“写多个线圈”。
8.png
双击“写多个线圈”流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 15: Force Multiple Coils”,在Quantity输入框中输入“3”,其余参数保持不变,点击“完成”按钮确认。
9.png
双击“写多个线圈”流中的function节点,修改代码如下:

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

10.png
点击“完成”按钮确定,再点击工作区右上角的“部署”按钮部署流程。
接下来进行数据写入测试,点击“写多个线圈”流中的inject节点触发流,此时,Modbus Slave软件中线圈地址从0开始的三个值分别变成了“0”、“1”、“1”,写入数据成功。
11.png
Node-Red工作区右侧调试面板显示如下:
12.png
3.写单个保持寄存器
按照上述方法在工作区复制“写单个线圈”流的所有节点,并命名为“写单个保持寄存器”。
13.png
双击该流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 6: Preset Single Register”,其余参数保持不变,点击“完成”按钮确认。
14.png
双击该流中的function节点,修改代码,点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。

msg.payload = 888;

15.png
接下来进行测试,点击该流前面的inject节点触发流,Modbus Slave软件中保持寄存器地址为0处的值变成了“888”,说明数据写入成功。
16.png
4.写多个保持寄存器
在工作区复制“写多个线圈”流的所有节点,命名为“写多个保持寄存器”。
17.png
双击该流中的Modbus-Write节点,将FC下拉框中的选项改为“FC 16: Preset Multiple Register”,其余参数保持不变,点击“完成”按钮确认。
18.png
双击该流中的function节点,修改代码,点击“完成”按钮确认,再点击工作区右上角的“部署”按钮部署流程。

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

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

三、设置Modbus-Flex-Write节点

1.写单个线圈
在工作区复制“写单个线圈”流的所有节点,命名为“写单个线圈2”,从左侧面板中拖入Modbus-Flex-Write节点,替换该流中的Modbus-Write节点。
20.png
双击“Modbus-Flex-Write”节点,将Server选项改为“modbus-tcp@127.0.0.1:502”,如果已经默认选择该选项,则保持默认值不变,点击“完成”按钮确定。
21.png
双击function节点,修改代码为如下内容,确定后部署流程。

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

22.png
点击inject节点触发流,Modbus Slave软件中线圈地址为0处的值变成了“1”,
23.png
Node-Red工作台调试也显示了返回信息,写入数据成功。
24.png
2.写多个线圈
在工作区复制“写单个线圈2”流的所有节点,命名为“写多个线圈2”,
25.png
双击该流中的function节点,修改代码,确定后部署流程。

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

26.png
点击inject节点测试,Modbus Slave软件显示如下,
27.png
成功写入多个线圈。
3.写单个保持寄存器
写单个保持寄存器跟上述流程类似,复制“写多个线圈2”的所有节点,命名为“写单个保持寄存器2”,
28.png
双击流中的function节点,修改代码,

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

29.png
点击inject节点,测试结果如下
30.png
数据写入成功。
4.写多个保持寄存器
复制“写单个保持寄存器2”的所有节点,命名为“写多个保持寄存器2”,
31.png
将function节点中的代码修改为

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

32.png
点击流中的inject节点测试,Modbus Slave软件显示如下
33.png
成功写入预先设置的值。
今天的文章,如果你感觉有价值,请记得一键三连:点赞加关注,留言,转发朋友圈,分享收藏,点击在看之后,一定记着加我个人微信:ZIDHXB
34.png
35.jpeg
技术交流
资源获取
36.gif
趋热纳凉,尽享美好

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码