Node-Red怎么解析Modbus数据

一、内容简介

本篇内容主要介绍Node-Red如何通过node-red-contrib-buffer-parser插件来解析Modbus数据,此处以ModbusTCP协议为例,ModbusRTU协议的解析方法与之类似。

有关Modbus Slave软件及node-red-contrib-modbus插件的具体配置方法在Node-Red与ModbusTCP设备通信——读数据中有详细说明,在此不再赘述。

二、环境搭建

1.Modbus Slave配置

根据之前的经验,通过node-red-contrib-modbus插件采集的线圈(0x01功能码)数据直接被解析成了布尔型的数组,因此这里主要以保持寄存器(0x03功能码)为例进行说明,输入寄存器(0x04功能码)则与之类似。

一般情况下,打开Modbus Slave软件会默认新建10个保持寄存器,如果没有,则点击File->New菜单即可新建,

再点击菜单Connection->Connect...,设置连接类型为Modbus TCP/IP,端口为502,点击OK按钮确认,启动监听。

Modbus Slave支持Signed、Unsigned、Hex、Binary、Long、Float、Double等多种数据类型,如图所示,后面我们将一一说明。

2.安装插件

点击Node-Red工作区右上角的菜单,选择“节点管理”菜单项,在弹出的对话框中选择“安装”标签页,在搜索框中输入“buffer”,可以看到插件node-red-contrib-buffer-parser出现在第二行,点击该插件旁边的安装按钮进行安装,

在弹出的对话框中点击“安装”按钮再次确定,

安装完成之后,在工作区左侧的面板中多了buffer-maker和buffer-parser两个蓝色的节点。

三、数据解析

从工作区左侧面板中分别拖动一个inject节点、一个Modbus-Getter节点和一个debug节点到工作区,并将其按顺序连接,如下图

双击Modbus-Getter节点进行设置,FC选择“FC 3: Read Holding Registers”选项,Address输入“0”,Quantity输入“10”,Server IP设置为127.0.0.1,端口设置为“502”,点击完成按钮并部署流程。

1.按类型Signed解析

Modbus Slave软件中的Signed类型实际上为16位有符号整型,取值范围为-32768~32767,新建的保持寄存器(0x03功能码)默认按Signed编码,菜单项Display->Signed默认被勾选,

双击寄存器可修改其值,尝试将前三个寄存器值分别修改为1000、10000、40000,

第三个值修改失败,提示超出范围。

回到Node-Red,点击inject节点触发一次流,读一次数据,可以看到调试面板显示如下:

Modbus-Getter节点默认按类型Signed解析。

2.按类型Unsigned解析

在Modbus Slave软件选中所有寄存器,点击菜单Display->Unsigned项,将寄存器编码类型设置为Unsigned,即无符号16位整型,取值范围为0~65535,尝试将第三个寄存器的值修改为40000,修改成功。

从Node-Red左侧面板中拖放buffer-parser节点和debug节点到工作区,将其按顺序连接到Modbus-Getter节点第一个输出点。

双击buffer-parser节点进行配置,Name设置为“Unsigned”,勾选“multiple results”选项,最下面的解析类型选择“Type uint16 (be)”,Length改为“-1”,其余保持默认值,点击“完成”按钮确定,并部署流程。

为了方便查看,点击debug1节点后面的小方框,禁止其在调试面板显示信息,再点击调试面板上的删除按钮,清空日志。

通过点击inject(时间戳)节点触发一次流,可以在调试面板看到,解析的数据与Modbus Slave软件中设置的一致。

类型Hex和类型Binary实际上表示的也是16位无符号整数,只是显示方式不同,在此不另作说明。

3.按类型Long解析

Modbus Slave软件中的类型Long表示的是32位有符号整数,取值范围为-2147483648~2147483647,按照内存中排列顺序不同,分为LongABCD、LongCDAB、LongBADC、LongDCBA四种。

LongABCD

跟上面类似,选中Modbus Slave软件中的寄存器,点击菜单Display->Long AB CD将寄存器编码类型设置为LongABCD,此时寄存器的值变成了65546000和-1673527296。

回到Red-Red工作区,复制Unsigned节点及其后的debug2节点,并将其与Modbus-Getter节点连接,双击刚复制的Unsigned节点,修改Name为“LongABCD”,修改解析类型为“Type int32 (be)”,其余保持不变,

确定修改并部署流程。

触发流,读到的数据如下图所示:

与设定数据一致,解析成功。

LongDCBA

选中Modbus Slave软件中的寄存器,点击菜单Display->Long DC BA 将寄存器编码类型设置为LongDCBA,此时寄存器的值变成了271050755和16540。

在Node-Red中复制LongABCD节点及其后的debug3节点,并将其与Modbus-Getter节点连接,双击刚复制的LongABCD节点,修改Name为“LongDCBA”,修改解析类型为“Type int32 (le)”,其余保持不变,

点击“完成”按钮确定修改,并部署流程。

点击inject(时间戳)节点触发流,读到如下数据:

数值与前面一致,解析成功。

LongCDAB

将Modbus Slave软件中的寄存器编码类型设置为LongCDAB,此时寄存器的值变成了655361000和40000。

在Node-Red中复制LongDCBA节点及其后的debug4节点,并将其与Modbus-Getter节点连接,双击刚复制的LongDCBA节点,修改Name为“LongCDAB”,Byte swap选择“Swap 16”,其余保持不变,

点击“完成”按钮确定修改,并部署流程。

经测试,读到的数据如下:

与Modbus Slave软件中的数据一致。

LongBADC

将Modbus Slave软件中的寄存器编码类型设置为LongBADC,此时寄存器的值变成了-402452441和1083965440。

在Node-Red中复制LongCDAB节点及其后的debug5节点,并将其与Modbus-Getter节点连接,双击刚复制的LongCDAB节点,修改Name为“LongBADC”,修改解析类型为“Type int32 (be)”,其余保持不变,

确定修改,并部署流程。

经测试解析正确。

4.按类型Float解析

Modbus Slave软件中的类型Float表示的是32位短浮点数,取值范围为-3.4E+38 ~ 3.4E+38,按照内存中排列顺序不同,分为FloatABCD、FloatCDAB、FloatBADC、FloatDCBA四种。

在Node-Red工作区复制Long类型解析的所有节点,包括后面的debug节点,从上至下依次修改类型解析节点的名称为FloatABCD、FloatDCBA、FloatCDAB、FloatBADC,并将其连接到Modbus-Getter节点的第一个输出。

双击FloatABCD节点,将数据解析类型修改为“Type float (be)”,如下图所示,

分别以同样的方式将FloatDCBA、FloatCDAB、FloatBADC节点的数据解析类型修改为“Type float (le)”、“Type float (le)”、“Type float (be)”,修改完成后部署流程。

将Modbus Slave软件中寄存器类型修改为FloatABCD,在寄存器中输入两个数据12.5和666.25。

在Node-Red通过控制debug节点,只显示FloatABCD节点的输出信息,触发流读到了正确的数据。

以同样的方式测试其它Float解析节点,均解析正确。

注意:Modbus Slave软件中设置的寄存器类型需与Node-Red中允许显示的节点类型保持一致。

5.按类型Double解析

Modbus Slave软件中的类型Double表示的是64位短浮点数,取值范围为-1.79769313486232e308和+1.79769313486232e308,分为DoubleABCDEFGH、DoubleGHEFCDAB、DoubleBADCFEHG、DoubleHGFEDCBA四种类型。

在Node-Red工作区复制所有Float类型解析节点及其后的debug节点,并将其连接到Modbus-Getter节点的第一个输出。

双击复制的FloatABCD节点,将其改名为DoubleABCDEFGH,修改数据解析类型为“Type double (be)”,点击“完成”按钮确定修改。

分别以同样的方式依次将刚复制的其它Float节点名称改为DoubleHGFEDCBA、DoubleGHEFCDAB、DoubleBADCFEHG,对应的数据解析类型分别改为“Type double (le)”、“Type double (le)”、“Type double (be)”,修改完成之后部署流程。

修改Modbus Slave软件中寄存器类型为DoubleABCDEFGH,在寄存器中输入两个数据12.5和666.25。

在Node-Red通过控制debug节点,只显示DoubleABCDEFGH节点的输出信息,触发流之后数据解析正确。

以同样的方式测试其它Double解析节点,数据正确。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Node-RED是一款基于JavaScript的开源软件,用于创建基于流程的物联网应用程序。Modbus是一种通用的通信协议,常用于连接工业自动化设备。Node-RED通过Modbus插件,可以实现数据采集。 数据采集是指从各种传感器、设备或系统中收集数据的过程。使用Node-RED进行Modbus数据采集可以帮助我们获取工业设备的实时数据,并进行实时监测和分析。 在Node-RED中,我们需要安装Modbus插件来支持Modbus通信。安装插件后,我们可以在流程编辑器中添加Modbus节点,配置节点的通信参数,例如Modbus设备的IP地址和端口号。然后,我们可以选择读取或写入Modbus设备的寄存器数据。 在数据采集过程中,我们可以通过设置定时器节点来定期读取Modbus设备的数据。读取到的数据可以保存在本地的数据库中,或者通过其他节点进行处理和分析。我们还可以通过在网页上创建可视化界面,实时展示采集的Modbus数据Node-RED的流程编辑器提供了丰富的功能和节点库,可以灵活地处理和展示数据。我们可以根据具体的需求,选择适合的节点进行数据处理。例如,我们可以使用计算节点对数据进行转换、计算或筛选;使用图表节点可视化数据;使用报警节点根据设定的阈值触发警报等等。 通过Node-RED进行Modbus数据采集,我们可以快速建立起一个灵活、可扩展的数据采集系统。同时,Node-RED的直观界面和丰富的节点库,简化了数据采集过程,使我们能够更轻松地获取和利用Modbus设备的数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值