python-3.x - cantools.database.errors.Error:标准帧 id 超过 11 位
问题描述
我使用 cantools python 包来解码 canbus 消息。我使用我创建的 dbc 文件进行测试。我复制了一个示例文件。当我使用像 419358976 这样的 can id 时,我收到错误消息。但是对于像 350 这样的更小的罐头 ID,它可以工作。cantools 是否会因扩展帧 ID 而失败?我如何让这个工作?
我的扩展ID失败的代码如下:
db = cantools.database.load_file('.\\src\\test\\resources\\j1939.dbc')
print(db.decode_message(419358976,b'\xff\xff\xff\xc0\x0c\xff\xff\xff'))
错误:cantools.database.errors.Error: Standard frame id 0x18fee900 is more than 11 bits in message EEC1.
解决方案
我找到了我的问题的答案。像 419358976 这样的罐头 ID 是扩展 ID。因此,为了将该 id 映射到 dbc 文件中的 id,我需要将另一个 32 位十六进制数 8000 0000 添加到 hex can id。然后将该结果十六进制数转换为十进制数并将其用作 dbc 文件中的 id 字段。之后它可以完美运行。上面的错误信息消失了
推荐阅读
- java - 从 void 方法返回延迟值
- java - JPA - 检查用户是否按名称存在于数据库中?
- r - 如何检查 CUDA GPU 在 R 中是否可用?
- c# - LINQ .Where .Max 和写入文件
- reactjs - 尝试使用我的反应应用程序上的编辑按钮编辑我的服务器上的数据
- ruby - Ruby gem 无法找到它显示的事件,该 gem 已安装
- c++ - 将无效值打印到其他无效
- javascript - Flex-Direction Column Reverse 工作,但需要它不自动滚动到底部
- windows - 使用重命名功能修改文件名的多个部分?
- c# - 如何为 DevExtreme MasterDetail DataGrid 设置 DataSource,它对 Master 和 Detail 使用相同的 DataSource?