使用节点红色从 modbus TCP 读取 32 位浮点数
Reading 32 bit Float from modbus TCP using node red
如何使用节点红色功能块读取 modbus TCP 保持值 (03) - 32 位浮点字交换 (CD AB)?
我有 modbus 问题...
正在从 modbus TCP 读取(FC3,数据大小 32 位浮点数,地址 272 十进制)...
当 Node RED 读取值时(FC 3,读取保持寄存器,数量 2)returns 值如 [0,16833] ...这里我使用 msg.payload=msg.payload[1] 在函数中从数组中获取值 16833...
这是我的温度传感器值..
为了查看 modbus 地址是否正确,我正在使用外部应用程序从传感器读取值 (Rilheva modbus poll) ...
设置为 :
时从 PLC 模块读取正确值
读取保持值 (03) - 32 位浮点字交换 (CD AB) - 见屏幕...
那么,有人知道如何将其转换为实际值吗 - 这里是 24.25...
您可以先将这两个整数保存到缓冲区(如您在 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
正确的解决方案是使用 writeUInt16BE 如下-
msg.payload = [0, 16833];
let pay = msg.payload;
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(pay[0],2);
buf.writeUInt16BE(pay[1],0);
msg.payload = buf.readFloatBE(0);
return msg;enter code here
如何使用节点红色功能块读取 modbus TCP 保持值 (03) - 32 位浮点字交换 (CD AB)?
我有 modbus 问题...
正在从 modbus TCP 读取(FC3,数据大小 32 位浮点数,地址 272 十进制)...
当 Node RED 读取值时(FC 3,读取保持寄存器,数量 2)returns 值如 [0,16833] ...这里我使用 msg.payload=msg.payload[1] 在函数中从数组中获取值 16833...
这是我的温度传感器值..
为了查看 modbus 地址是否正确,我正在使用外部应用程序从传感器读取值 (Rilheva modbus poll) ...
设置为 :
时从 PLC 模块读取正确值读取保持值 (03) - 32 位浮点字交换 (CD AB) - 见屏幕...
那么,有人知道如何将其转换为实际值吗 - 这里是 24.25...
您可以先将这两个整数保存到缓冲区(如您在 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
正确的解决方案是使用 writeUInt16BE 如下-
msg.payload = [0, 16833];
let pay = msg.payload;
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(pay[0],2);
buf.writeUInt16BE(pay[1],0);
msg.payload = buf.readFloatBE(0);
return msg;enter code here