基于python解析CAN dbc文件,提取到excel
·
import cantools
import pandas as pd
def dbc_to_csv(dbc_file, csv_file):
# 加载DBC文件
db = cantools.database.load_file(dbc_file)
# 准备数据
messages = []
signals = []
nodes = []
buses = []
# 解析messages
for message in db.messages:
messages.append({
'name': message.name,
'id': message.frame_id,
'size': message.length,
# 'sender': message.sender,
# 'description': message.description
})
# 解析signals
for message in db.messages:
for signal in message.signals:
signals.append({
'message_name': message.name,
'signal_name': signal.name,
'start_bit': signal.start,
'length': signal.length,
# 'factor': signal.factor,
'offset': signal.offset,
'min': signal.minimum,
'max': signal.maximum,
'unit': signal.unit,
'scale': signal.scale,
'is_signed': signal.is_signed,
# 'description': signal.description
})
# 解析nodes
for node in db.nodes:
nodes.append({
'name': node.name,
# 'address': node.address
})
# 解析buses
for bus in db.buses:
buses.append({
'name': bus.name,
# 'speed': bus.speed
})
# 转换为DataFrame并导出为CSV
messages_df = pd.DataFrame(messages)
signals_df = pd.DataFrame(signals)
nodes_df = pd.DataFrame(nodes)
buses_df = pd.DataFrame(buses)
with pd.ExcelWriter(csv_file.replace('.csv', '.xlsx'), engine='openpyxl') as writer:
# messages_df.to_csv(csv_file.replace('.csv', '_messages.csv'), index=False)
# signals_df.to_csv(csv_file.replace('.csv', '_signals.csv'), index=False)
# nodes_df.to_csv(csv_file.replace('.csv', '_nodes.csv'), index=False)
# buses_df.to_csv(csv_file.replace('.csv', '_buses.csv'), index=False)
# 如果需要保存为单个Excel文件,可以取消以下注释,并注释掉上面的to_csv行
messages_df.to_excel(writer, sheet_name='Messages', index=False)
signals_df.to_excel(writer, sheet_name='Signals', index=False)
nodes_df.to_excel(writer, sheet_name='Nodes', index=False)
buses_df.to_excel(writer, sheet_name='Buses', index=False)
# 使用示例
dbc_file = 'E11OTA20241120_Matrix_BSCAN.dbc'
csv_file = 'output_file.xlsx'
dbc_to_csv(dbc_file, csv_file)
#解析出来后信号的起始位实际是信号的停止位,需要二次开发再转换一下
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)