首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型转换操作

类型转换操作
EN

Stack Overflow用户
提问于 2018-08-17 17:35:53
回答 2查看 270关注 0票数 0

我使用的是NodeMCU和能量计。电能表是Modbus RTU设备,以32位显示参数。使用下面的代码,我可以从从机读取数据,但需要将方法类型转换为32位浮点型显示

当我在ModScan软件中将该值更改为无符号十进制时,该值将正确显示。但是我需要显示32位浮点数的值。

代码语言:javascript
复制
#include <ModbusMaster232.h>
#include <SoftwareSerial.h>
float  data[100];
ModbusMaster232 node(1);

// Define one address for reading
#define address 1
// Define the number of bits to read
#define bitQty 70

void setup()
{
  Serial.begin(9600);
  // Initialize Modbus communication baud rate
  node.begin(9600);
}

void loop()
{
  int result = node.readHoldingRegisters(address, bitQty);
  data[0] = (float)node.getResponseBuffer(0);
  data[1] = (float)node.getResponseBuffer(1);
  data[2] = (float)node.getResponseBuffer(2);
  data[3] = (float)node.getResponseBuffer(3);
  data[4] = (float)node.getResponseBuffer(4);
  data[5] = (float)node.getResponseBuffer(5);
  for (int i = 0; i < 100; i++)
  {
    //data[i] = node.getResponseBuffer(i);
    Serial.println(data[i]);
  }
  Serial.println("............");
}

我想用类型转换显示读数,如Modbus中所示。

从salve输出的实际Modbus设备:

从电能表读取数据时的Arduino输出:

EN

回答 2

Stack Overflow用户

发布于 2018-08-17 21:40:59

您正在将一个16位字转换为一个浮点数。查看从机文档,了解它们如何将32位浮点映射到两个Modbus寄存器。基本上,您需要知道最不重要的字在哪里(第一个或第二个寄存器),将它们加载到内存中(必要时进行移位),然后强制转换为浮点数。

票数 0
EN

Stack Overflow用户

发布于 2019-04-28 06:01:06

我正在寻找并试图解决完全相同的问题(具有相同的结果)。这可能会有所帮助:

代码语言:javascript
复制
function read() {

client.readHoldingRegisters(0000, 12)
    .then(function(d) {
        var floatA = d.buffer.readFloatBE(0); 
    console.log("Total kWh: ", floatA); })
    .catch(function(e) {
        console.log(e.message); })
    .then(close);
}

这是NodeJS和javascript版本,它可以工作,而Arduino不能。完整的例子可以在这里找到,它在Raspberry Pi https://github.com/yaacov/node-modbus-serial/blob/master/examples/buffer.js上工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51892484

复制
相关文章

相似问题

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