Arduino 型铸造操作
我正在使用NodeMCU和电能表。电能表是Modbus RTU设备,以32位显示参数。使用下面的代码,我可以从从属设备读取数据,但需要将cast from键入32位浮点和显示的方法 当我在ModScan软件中将值更改为无符号十进制时,值会正确显示。但我需要以32位浮点显示值Arduino 型铸造操作,arduino,type-conversion,modbus,nodemcu,Arduino,Type Conversion,Modbus,Nodemcu,我正在使用NodeMCU和电能表。电能表是Modbus RTU设备,以32位显示参数。使用下面的代码,我可以从从属设备读取数据,但需要将cast from键入32位浮点和显示的方法 当我在ModScan软件中将值更改为无符号十进制时,值会正确显示。但我需要以32位浮点显示值 #包括 #包括 浮动数据[100]; ModbusMaster232节点(1); //定义一个用于读取的地址 #定义地址1 //定义要读取的位数 #定义比特数量70 无效设置() { Serial.begin(9600);
#包括
#包括
浮动数据[100];
ModbusMaster232节点(1);
//定义一个用于读取的地址
#定义地址1
//定义要读取的位数
#定义比特数量70
无效设置()
{
Serial.begin(9600);
//初始化Modbus通信波特率
node.begin(9600);
}
void循环()
{
int result=node.readHoldingRegisters(地址,位数量);
数据[0]=(浮点)节点。getResponseBuffer(0);
数据[1]=(浮点)节点。getResponseBuffer(1);
数据[2]=(浮点)节点。getResponseBuffer(2);
数据[3]=(浮点)节点。getResponseBuffer(3);
数据[4]=(浮点)节点。getResponseBuffer(4);
数据[5]=(浮点)节点。getResponseBuffer(5);
对于(int i=0;i<100;i++)
{
//数据[i]=node.getResponseBuffer(i);
Serial.println(数据[i]);
}
序列号。打印号(“…………”);
}
我想用类型转换显示Modbus中显示的读数
salve的实际Modbus设备输出:
从电能表读取数据时的Arduino输出:
您正在将一个16位字转换为浮点。查看从属文件,了解它们如何将32位浮点映射到两个Modbus寄存器中。基本上,您需要知道最不重要的字在哪里(第一个或第二个寄存器),将它们加载到内存中(必要时移位)并转换为浮点。我正在寻找并尝试解决完全相同的问题(结果相同)。这可能有助于:
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不能。完整的例子可以在这里找到,它对覆盆子Pi工作