Warm tip: This article is reproduced from serverfault.com, please click

其他-使用节点红色从 modbus TCP 读取 32 位浮点数

(其他 - Reading 32 bit Float from modbus TCP using node red)

发布于 2019-05-22 13:12: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 ...

Questioner
Damir Švegović
Viewed
11
AIOT MAKER 2019-05-23 07:18:28

你可以先将两个整数保存到缓冲区中(交换你在 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