MODBUS字转换

MODBUS Word conversion

我正在从 Carlo Gavazzi 仪表获取数据。 MODBUS 数据长度为 2 个字,是一个带符号的 32 位整数。如何在 C# 中将其转换为实数。我得到一个整数,例如 16002,我希望能够将其转换为设备正面显示的值。

总结: 将两个字的 32 位有符号整数转换为其实际值。

将 2 个 16 位无符号寄存器转换为 32 位有符号值可以如下所示完成。这可以在一个语句中完成,但为了清楚起见,我将分步进行。假设你的高位字和低位字(16位)分别是upper16和lower 16:

UInt32 uint32 = upper16;
uint32 <<= 16;
uint32 |= lower16;
Int32 sint32 = (Int32)uint32;

基于文档中的这个声明:

For all the formats the byte order (inside the single word) is MSB->LSB. 
In INT32, UINT32 and UINT64 formats, the word order is LSW-> MSW."

看起来像

lower16 = address 30053
upper16 = address 30054

您在评论中提到它的比例为 10。通常这样做是为了让值(浮点值)具有一定的精度。所以你可能会这样做:

double value = sint32 / 10.0;

double kW = sint32 / 10.0; // In your case