使用节点红色从Modbus TCP读取32位浮点

时间:2019-05-22 13:12:32

标签: node-red modbus-tcp

如何读取带有节点红色功能块的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 ...

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

正确的解决方案是使用以下的writeUInt16BE-

> A
  Col1 Col2 Col3
1    1    2    3
2    2    3    4
3    3    4    5
> B
  ColA ColB ColC
1    1    2    3
2    2    3    4
3    3    4    5