使用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
相关推荐
来可电子-CAN1 个月前
CANIOT网关CAN透传功能再工程机械行业的应用
can·工程机械·特种车辆
佣兵之王@大青山1 个月前
RS485/CAN的隔离电路分析
can·esd·rs485·防护·浪涌·gdt·空气放电管
Trump. yang1 个月前
AutoSar CP 通信服务核心—Com模块详解
嵌入式硬件·can·autosar·通信原理
mmprime1 个月前
杭州研砺LCWLAN的实际应用
can·canfd
来可电子-CAN2 个月前
USBCANFD卡再汽车电子行业中得应用
汽车·can·工程机械·特种车辆·煤矿
Zevalin爱灰灰3 个月前
CANoe/CANalyzer基础教程 第五章(CAPL语言)
汽车·can·canoe
LabVIEW开发4 个月前
LabVIEW与CANopen实现自动化生产线的设备控制与数据采集
can·labview·labview开发
蚂蚁小兵4 个月前
CANFD报文 位时间 理解
can·canfd·位时间·波特率
CharGer.4 个月前
通信协议_C#实现CAN通信
c#·网络编程·can