首页 > 解决方案 > 使用红色节点从 modbus TCP 读取 32 位浮点数

问题描述

如何使用节点红色功能块读取 modbus TCP 保持值 (03) - 32 位浮点字交换 (CD AB)?

我的modbus有问题...

从 modbus TCP 读取(FC3,数据大小 32 位浮点数,地址 272 十进制)...

当节点 RED 读取值(FC 3,读取保持寄存器,数量 2)返回类似 [0,16833] 的值时...这里我在函数中使用 msg.payload=msg.payload[1] 来获取值 16833大批...

这是我的温度传感器值..

要查看 modbus 地址是否正确,我正在使用外部应用程序从传感器读取值(Rilheva modbus poll)...

当设置为 时,从 PLC 模块读取正确的值:

读取保持值 (03) - 32 位浮点字交换 (CD AB) - 见屏幕...

那么,有谁知道如何将其转换为实际价值 - 这里是 24.25 ......

标签: node-redmodbus-tcp

解决方案


您可以首先将两个整数保存到缓冲区(交换您在 OP 中提到的单词)。之后,将缓冲区读取为浮点数。

这就是函数节点的样子(第一行添加用于测试目的)。

msg.payload = [0, 16833];
let pay = msg.payload;

const buf = Buffer.allocUnsafe(4);
buf.writeInt16BE(pay[0],2);
buf.writeInt16BE(pay[1],0);

msg.payload = buf.readFloatBE(0);
return msg;

使用您的样本数据 [0,16833] 进行测试时,您将获得 msg.payload = 24.125


推荐阅读