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