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

一、内容简介

本篇内容主要介绍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”,点击“完成”按钮确定,重新部署即可。

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值