首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用节点red从modbus TCP读取32位浮点数

使用节点red从modbus TCP读取32位浮点数
EN

Stack Overflow用户
提问于 2019-05-22 21:12:32
回答 2查看 5.5K关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 07:13:16

您可以首先将这两个整数保存到缓冲区(如您在操作中提到的那样交换单词)。然后,将缓冲区作为浮点数读取。

这就是功能节点的外观(添加的第一行是为了测试目的)。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-04 18:57:35

正确的解决方案是使用writeUInt16BE,如下所示:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56257673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档