【发布时间】:2019-02-21 16:05:09
【问题描述】:
我正在尝试使用 C# 从串行端口读取数据。
整数或浮点数和布尔值的普通字节不是问题。 但是,有一个 3 个字节的序列被打乱了,我无法正确解析它。
这 3 个字节代表 2 个无符号 12 位整数,一个用于 MainSupplyDC,一个用于 Motor Power。 它们以需要在解析之前重新排序的方式进行混洗。
我上次的尝试以这样的方式结束,但现在我再次意识到这不可能是正确的。
// Main Supply DC
int MainSupplyDCval = (byte2 >> 4 | byte1);
// MotorPower
int MotorPowerVal = (byte3 << 4 | byte2);
我不知道如何正确地转换它。
这是字节序列布局:
文本相同:
Byte1 | Byte2 | Byte3
------------------------------------------------------
Lowbyte | 4 Lowbit | 4 Highbit | Highbyte
MainSupplyDC | MotorPower| MainSupplyDC | MotorPower
字节序列示例:
E5-00-00
MainSupplyDC expected around 230
MotorPower expected 0
E4-A0-06
MainSupplyDC expected around 230
MotorPower expected about 97
E5-90-0F
MainSupplyDC expected around 230
MotorPower expected about 190
2 天以来一直在敲我的头,只是无法让它工作......
编辑
似乎有两种方法可以解释给定的表格。就我而言,@canton7 有正确的答案,但我认为如果供应商/制造商以另一种方式编码,@dumetrulo 将有正确的答案。
【问题讨论】:
-
您是否有示例输入和相应的输出,以便我们判断何时正确?
-
我用 3 字节序列和预期结果扩展了示例部分
-
当 byte2 的 4 个低位假定为 MainSupplyDC 值的第 8..12 位(或但 7. .11,如果您更喜欢从零开始的位位置)?如果您在纸上可视化整个位移的东西(也许图形化为图表),这可能是一个好主意;它可以帮助您相对轻松地弄清楚如何在不丢失的情况下移动和组合字节......
-
在您的示例中“E5-00-00”电机功率如何 18?没有设置电机功率位总是导致 0
-
没错,这种情况会导致 0。
标签: c# arrays serial-port byte bit