55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import cantools
|
|
import csv
|
|
import sys
|
|
|
|
def export_dbc_to_csv(dbc_file, csv_file):
|
|
try:
|
|
# 载入 DBC 文件
|
|
db = cantools.database.load_file(dbc_file)
|
|
print(f"成功加载 DBC 文件: {dbc_file}")
|
|
|
|
# 打开 CSV 文件写入
|
|
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
|
|
writer = csv.writer(file)
|
|
# 写入表头
|
|
writer.writerow([
|
|
"MessageName", "MessageID", "DLC", "Sender",
|
|
"SignalName", "StartBit", "Length", "Factor", "Offset",
|
|
"Min", "Max", "Unit", "Receivers", "SignalComment"
|
|
])
|
|
|
|
# 遍历每条消息和信号
|
|
for msg in db.messages:
|
|
for signal in msg.signals:
|
|
writer.writerow([
|
|
msg.name,
|
|
hex(msg.frame_id),
|
|
msg.length,
|
|
','.join(msg.senders),
|
|
signal.name,
|
|
signal.start,
|
|
signal.length,
|
|
signal.scale,
|
|
signal.offset,
|
|
signal.minimum,
|
|
signal.maximum,
|
|
signal.unit,
|
|
','.join(signal.receivers),
|
|
signal.comment if signal.comment else ''
|
|
])
|
|
|
|
print(f"已导出为 CSV 文件: {csv_file}")
|
|
|
|
except Exception as e:
|
|
print(f"导出失败: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
# if len(sys.argv) != 3:
|
|
# print("用法: python dbc_to_csv.py your_file.dbc output.csv")
|
|
# else:
|
|
# export_dbc_to_csv(sys.argv[1], sys.argv[2])
|
|
export_dbc_to_csv(
|
|
'/home/zjk/project/H100/H100PowerManger/test/cantools/CSC_TSU_20240823.dbc',
|
|
'/home/zjk/project/H100/H100PowerManger/test/cantools/CSC_TSU_20240823.csv'
|
|
)
|