如何使用节点红色功能块读取modbus TCP保持值(03) -32位浮点字交换(CD AB)?
我对modbus有问题...
正在从modbus TCP读取( FC3,数据大小32位浮点数,地址272十进制)...
当节点RED读取值( FC 3,读取保持寄存器,数量2)时,返回类似0,16833的值...在这里,我使用msg.payload=msg.payload1 in函数从数组中获取值16833 ...
这是我的温度传感器的值..
为了查看modbus地址是否正确,我使用外部应用程序从传感器读取数值( Rilheva轮询)……
当设置为时,正确的值从PLC模块读取:
读取保持值(03) -32位浮点字交换(CD AB) -参见屏幕...
那么,有谁知道如何将它转换为实际价值-这里是24.25...
发布于 2019-05-23 07:13:16
您可以首先将这两个整数保存到缓冲区(如您在操作中提到的那样交换单词)。然后,将缓冲区作为浮点数读取。
这就是功能节点的外观(添加的第一行是为了测试目的)。
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
发布于 2019-12-04 18:57:35
正确的解决方案是使用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
https://stackoverflow.com/questions/56257673
复制相似问题