一、内容简介
本篇内容主要介绍Node-Red通过node-red-contrib-modbus插件与ModbusTCP设备进行通讯,这里用Modbus Slave工具来模拟从站设备,Node-Red作为主站分别从0地址开始读取10个线圈状态和10个保持寄存器,分别用Modbus-Read、Modbus-Getter、Modbus-Flex-Getter三个节点以不同的方式来实现。
二、设置Modbus Slave
点击Connection->Connect菜单,弹出如图所示对话框,在Connection下拉框选择“Modbus TCP/IP”,将TCP/IP Server组合框中的Port(端口)设置为“502”,选择“Any Address”和“IPv4”,点击OK按钮确认。
默认新建了10个保持寄存器,还需要新建10个线圈,点击File->New菜单,新建10个保持寄存器,修改参数将保持寄存器改为线圈,点击Setup->Slave Definition...菜单,在弹出的对话框找到Function下拉框,选择01 Coil Status (0x),其它参数保持默认值,点击OK按钮确认。
三、安装node-red-contrib-modbus插件
在Node-Red工作台点击右上角的菜单按钮,选择“节点管理”菜单项,再在弹出的对话框左边选择“控制板”标签,然后在该页面选择上面的“安装”标签,在搜索框中输入“modbus”,在搜索结果中找到“node-red-contrib-modbus”插件,并点击插件右下角的“安装”按钮。
此时会弹出确认安装的确认对话框,点击“安装”按钮,稍等片刻即可安装完成。
安装完成之后,左侧面板显示已经安装的节点,如下图。
四、设置Modbus-Read节点
1. 读线圈
将Modbus-Read节点拖动到工作台的默认流程,此处为“流程1”,双击节点,在弹出的对话框中找到FC下拉框,选择“FC1:Read Coil Status”,在Address输入框中输入“0”,在Quantity输入框中输入“10”,在Poll Rate输入框中输入“1”,在随后的下拉框中选择单位“seconds(s)”,其它值保持默认,如图所示。
接下来添加Modbus-client节点,点击“Server”最右边的笔形按钮,弹出设置对话框,默认选择“Settings”标签,在“Type”下拉框中选择“TCP”选项,在Host输入框中输入“127.0.0.1”,Port设置为“502”,TCP Type选择“DEFAULT”选项,其它保持默认值,如下图所示,最后点击右上角的“添加”按钮确定。
添加完modbus-client节点之后回到Modbus-Read编辑界,点击右上角的“完成”按钮完成编辑。
添加一个debug节点到流程,将Modbus-Read的第一个输出点与之连接。
点击工作台右上角的“部署”按钮,右侧边栏切换到调试窗口,可以看到接收的数据,点击debug节点后面的“尾巴”可以隐藏当前节点的调试信息,立即生效,不需要重新部署。
2.读保持寄存器
从左侧边栏再拖动一个Modbus-Read节点到流程中,双击节点弹出设置对话框,在FC下拉框选择“FC 3: Read Holding Registers”选项,在Address输入框输入“0”,在Quantity输入框输入“10”,Poll Rate设置为“1”,单位选择“second(s)”,Server下拉框选择已添加的“modbus-tcp@127.0.0.1:502”选项,点击“完成”按钮确定。
从左侧面板拖动一个debug节点到流程中,连接刚设置好的Modbus-Read节点,部署之后可以看到调试信息,改变ModbusSlave中相应保持寄存器的值。
调试信息也会随之发生变化。
五、设置Modbus-Getter节点
1. 读线圈
从左侧边栏拖动Modbus-Getter节点到流程中,双击节点弹出设置对话框,如图所示,在FC下拉框选择“FC 1: Read Coil Status”选项,Address输入框中输入“0”,Quantity输入框中输入“10”,Server下拉框选择“modbus-tcp@127.0.0.1:502”选项,点击“完成”按钮确认。
从左侧面板中拖动inject节点到流程,连接到Modbus-Getter节点,再拖动debug节点到流程,使Modbus-Getter节点与之连接,点击“部署”按钮,如下图所示,点击inject节点前面的方框,可以看到调试信息显示读到的一条线圈数据。
注意:为了避免冲突,可以将之前添加的Modbus-Read节点设置为无效,双击节点,在弹出的对话框中点击左下角的“无效”按钮,点击“完成”按钮以确定。
2.读保持寄存器
从左侧边栏拖动Modbus-Getter节点到流程中,双击节点弹出设置对话框,如图所示,在FC下拉框选择“FC 3: Read Holding Registers”选项,Address输入框中输入“0”,Quantity输入框中输入“10”,Server下拉框选择“modbus-tcp@127.0.0.1:502”选项,点击“完成”按钮确认。
拖入inject和debug节点,并将其与Modbus-Getter节点连接,跟上面类似,部署后点击inject节点前面的方框,在调试信息面板可以看到读取了一条数据。
如果希望按时间间隔读取数据,可以通过设置inject节点实现,双击节点弹出设置对话框,在下方的“重复”下拉框选择“周期性执行”,间隔保持默认值1秒,点击“完成”按钮确认,重新部署后,可以从调试信息面板看到系统按1秒的间隔在定时读取保持寄存器数据。
六、设置Modbus-Flex-Getter节点
1. 读线圈
从左侧边栏拖动Modbus-Flex-Getter节点到流程中,双击节点弹出设置对话框,如图所示,在Server下拉框选择“modbus-tcp@127.0.0.1:502”选项,点击“完成”按钮确认。
然后在Modbus-Flex-Getter节点前面拖入一个function节点,将其与之连接,双击function节点,在弹出的对话框中的“函数”标签页面加入如下代码,然后点击“完成”按钮确定。
msg.payload = { 'fc': 1, 'unitid': 1, 'address': 0, 'quantity': 10 }
从左侧面板中拖入一个inject节点到function节点的前面,再拖入一个debug节点到Modbus-Flex-Getter节点的后面,连接拖入的节点,如图所示,部署之后,点击inject节点前面的方框读取数据,可以在右侧的调试面板看到读到的线圈值。
2.读保持寄存器
从左侧面板分别拖入一个Modbus-Flex-Getter节点、一个function节点和一个debug节点到流程,依次连接拖入的节点,双击function节点,在弹出对话框中加入如下代码,再点击“完成”按钮确认。
msg.payload = { 'fc': 3, 'unitid': 1, 'address': 0, 'quantity': 10 }
将上面读线圈的Modbus-Flex-Getter节点的第一个输出连接到当前Modbus-Flex-Getter节点的输入,部署之后,再点击inject节点前面的方框,可以在右侧的调试面板中同时看到读取到的线圈和保持寄存器数据,如图。
注意:如果读线圈的Modbus-Flex-Getter节点读取失败,则读取保持寄存器的Modbus-Flex-Getter节点不会被触发,要解决此问题还需要进一步设置,双击读线圈的Modbus-Flex-Getter节点,在弹出的对话框中选择Optionals标签,勾选第一个选项“Empty msg on Modbus fail”,点击“完成”按钮确定,重新部署即可。
文章来源:https://www.toymoban.com/news/detail-819724.html
关注公众号“NodeRed物联网”,回复“nr”获取文章相关的代码、工具等资料。文章来源地址https://www.toymoban.com/news/detail-819724.html
到了这里,关于Node-Red与ModbusTCP设备通信——读数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!