C# MODBUS字转换

C# MODBUS字转换,c#,modbus,rs485,C#,Modbus,Rs485,我从Carlo Gavazzi仪表上获取数据。MODBUS数据长度为2个字,为有符号32位整数。如何将其转换为C中的实数。我返回一个整数,例如16002,我希望能够将其转换为显示在设备正面的值 总之: 将两个字的32位有符号整数转换为其实值。将2个16位无符号寄存器转换为32位有符号值可以如下所示。这可以在一个声明中完成,但为了清晰起见,我将分步骤完成。假设在upper16和lower 16中分别有16位的大写和小写字: UInt32 uint32 = upper16; uint32 <&

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

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

将2个16位无符号寄存器转换为32位有符号值可以如下所示。这可以在一个声明中完成,但为了清晰起见,我将分步骤完成。假设在upper16和lower 16中分别有16位的大写和小写字:

UInt32 uint32 = upper16;
uint32 <<= 16;
uint32 |= lower16;
Int32 sint32 = (Int32)uint32;
看起来像

lower16 = address 30053
upper16 = address 30054
你在评论中提到,它的分数是10。通常这样做是为了给浮点值赋予一定的精度。所以你可能会这样做:

double value = sint32 / 10.0;


用于将字节数组转换为整数。请注意,您必须检查数据的尾数,并根据需要进行调整。不幸的是,仪表位于另一个国家/地区。我只知道这个值只是MODBUS数据,所以不是它的实际值。所以我不太确定如何检查endianness,因为我得到的只是一个整数值。感谢您这么快的回复。有符号的32位整数是一个数字,您是在问如何将其转换为浮点实数吗?Modbus数字通常按10倍的比例缩放或编码为32位数字,您必须阅读手册以了解这是一种简单的缩放,还是需要进行浮点数字的位转换。你能为你正在使用的特定仪表链接手册吗?幸运的是,有一本很好的手册可用。它也给了我转换因子。在第2.1部分中,我需要掸掉我的大学课本上的灰尘!谢谢@Marker。我将在这里发布我的代码…我希望明天从设备显示中获得真实值。然后我会写一些代码并把它发布在这里。
double value = sint32 / 10.0;
double kW = sint32 / 10.0; // In your case