MODBUS Word转换

时间:2018-09-10 17:20:05

标签: c# modbus rs485

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

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

1 个答案:

答案 0 :(得分:1)

可以如下所示将2个16位无符号寄存器转换为32位有符号值。可以在一个语句中完成此操作,但是为了清楚起见,我将分步骤进行。假设您分别在上16和下16中具有高位和低位字(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;

OR

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