使用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
相关推荐
WINDHILL_风丘科技13 天前
支持多种网络数据库格式的自动化转换工具——VisualXML
dbc·自动化转换工具·总线设计工具·总线分析与测试·ecu控制器开发
优信电子1 个月前
STM32F4分别驱动SN65HVD230和TJA1050进行CAN通信
stm32·单片机·嵌入式硬件·can·can 收发器·sn65hvd230·tja1050
黄金右肾1 个月前
STM32之CAN通讯(十一)
stm32·单片机·can·嵌入式软件
code .2 个月前
STM32G431收发CAN
单片机·嵌入式硬件·can·canfd·stm32g4
十六宿舍2 个月前
【AUTOSAR 基础软件】Can模块详解(Can栈之驱动模块)
网络·单片机·汽车·can·autosar·嵌入式开发·车载
嵌入式科普2 个月前
嵌入式科普(24)从SPI和CAN通信重新理解“全双工”
c语言·stm32·can·spi·全双工·ra6m5
来可电子-CAN4 个月前
CANIOT网关CAN透传功能再工程机械行业的应用
can·工程机械·特种车辆
佣兵之王@大青山4 个月前
RS485/CAN的隔离电路分析
can·esd·rs485·防护·浪涌·gdt·空气放电管
Trump. yang4 个月前
AutoSar CP 通信服务核心—Com模块详解
嵌入式硬件·can·autosar·通信原理