首页 > 解决方案 > 如何在 Python 中移动 2 个字节 3 个位置?

问题描述

我已经从节气门位置传感器向这个宽带模块上的“用户 3”输入运行了一个 5v 信号。它具有记录数据的 RS232 接口。到目前为止,我已经能够识别帧头以及哪些字节对应于“用户 3”。我还验证了这些字节会随着油门打开而增加。 https://www.wbo2.com/sw/logger.htm

相关文件

字节 10 到 15 是三个 0 到 5.00 伏的用户输入 U1、U2 和 U3(与 1.5 相比,2.0 版提供了额外的用户输入)。尽管这些输入只被采样一次,但它们被转移到 0 到 8184 的范围内(即 1024 步 - 0、8、16 .. 8176、8184)以兼容 1.5 版。

在 2.0 单元上,每个通道只有一个 10 位样本,但结果移动了 3 位以与 1.5 数据兼容。(即,有 1024 个步骤 - 0、8、16 .. 8176、8184)用于 1.5 版兼容性。

我不明白如何将字节转换为伏特。例子

标签: pythonbytebitwise-operatorsbit-shift

解决方案


这似乎是 [0,8184] 到 [0.0,5.0] 范围的简单线性变换

这将使转换方程

voltage = hex_in / 8184 * 5.0

其中 hex_in 是这两个字节形成的整数。不幸的是,算术与您的示例不对应:

>>> 0x3d8 / 8192 * 5.0
0.6005859375
>>> 0x3d8 / 8184 * 5.0
0.6011730205278593

>>> 0x1c18 / 8184 * 5.0
4.393939393939394

如果您的示例有问题,也许我们有解决方案。如果它们是准确的,那么我们需要对值编码进行完整描述。


推荐阅读