使用canmatrix模块解析DBC,生成的.exe文件执行报错

1. 问题现象描述

使用canmatrix模块解析DBC,pycharm运行程序代码是能够正常实现功能的,但是生成.exe后执行报错如下:

定位到出错代码如下:

python 复制代码
db = canmatrix.formats.loadp(dbc_path, encoding="utf-8")

报错信息导致的原因是加载DBC文件之后,得到的db是None。

目前还没有找到原因,我采取的解决办法是换cantools模块解析DBC文件,发现生成的.exe文件功能执行正常。

2. cantools解析DBC文件

使用cantools解析DBC,查看cantools模块的.py代码可知Signal和Message包含的字段定义如下。

Message的字段名称如下:

python 复制代码
db = cantools.database.load_file(dbc_file_path, encoding="utf-8")
# 遍历所有消息(frames)
for message in db.messages:
    message_info = dict()
    message_info["name"] = message.name
    message_info["frame_id"] = message.frame_id
    message_info["is_extended"] = message.is_extended_frame
    message_info["is_fd"] = message.is_fd
    message_info["size"] = message.length
    message_info["comment"] = message.comment

Signal的字段名称如下:

python 复制代码
 db = cantools.database.load_file(dbc_file_path, encoding="utf-8")
 for signal in message.signals:
     signal_info_dict = dict()
     signal_info_dict["name"] = signal.name
     signal_info_dict["start_bit"] = signal.start
     signal_info_dict["size"] = signal.length
     if signal.byte_order == "little_endian":
         signal_info_dict["is_little_endian"] = True
     else:
         signal_info_dict["is_little_endian"] = False
     signal_info_dict["is_signed"] = signal.is_signed
     signal_info_dict["is_float"] = signal.conversion.is_float
     signal_info_dict["offset"] = signal.conversion.offset
     signal_info_dict["factor"] = signal.conversion.scale
     signal_info_dict["min"] = signal.minimum
     signal_info_dict["max"] = signal.maximum
     signal_info_dict["unit"] = signal.unit
     signal_info_dict["comment"] = signal.comment
相关推荐
来可电子小仙女7 天前
复杂 CAN 总线组网,为什么需要智能隔离网桥?
can·硬件·can中继
来可电子小仙女8 天前
CANlog-VCI总线记录仪助力新能源汽车实车路试,破解偶发故障数据留存难题
汽车·can·硬件·记录仪
车软派开发学长13 天前
车企研发的“整合与自研”之争,本质是一场生意
车载系统·汽车·can·autosar
fanchenxinok1 个月前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十):TOOMOSS_SID31_RoutineControl.vi — 例程控制
can·labview·uds升级·升级上位机·uds刷写
fanchenxinok1 个月前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(八):TOOMOSS_SID85_ControlDTCSetting.vi — DTC控制
can·labview·uds刷写·图莫斯
fanchenxinok1 个月前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十一):LogManager.vi — 日志管理
can·labview·uds刷写·图莫斯
fanchenxinok1 个月前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(九):TOOMOSS_SID2E_WriteDataByID.vi — 写入数据
can·labview·uds刷写
CC城子3 个月前
STM32H7_FDCAN 驱动笔记
stm32·can·canfd
CC城子3 个月前
CAN/CANFD 笔记
can·canfd·canopen