python - 如何在 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 版兼容性。
我不明白如何将字节转换为伏特。例子
- 油门关闭 '\x03\xd8' (~0.67v)
- 油门开 '\x1c\x18' (~4.65v)
解决方案
这似乎是 [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
如果您的示例有问题,也许我们有解决方案。如果它们是准确的,那么我们需要对值编码进行完整描述。
推荐阅读
- javascript - 点击更改颜色
- html - 如何将网格项目设置为仅采用所需的高度并立即开始下一个项目
- python-3.x - Cookiecutter:jinja2.exceptions.TemplateSyntaxError:预期令牌'打印语句结束',得到':'
- c# - 如何在事件中处理代码时显示动画
- reactjs - 如何在作为包开发的 React 库中从安装此包的更高级别应用程序传递语言环境
- javascript - 如何在 4 小时后仅使用 LocalStorage 自动注销?
- google-cloud-platform - 数据工作室资产搜索 API 的空响应
- excel - 根据多列和多个条件删除行
- php - laravel route 返回 404,即使它显示在 route:list
- html - 路由器导航和模式关闭