Files
H100PowerManger/test/cantools/generate_dbc.py
T
2025-06-06 13:28:05 +08:00

64 lines
2.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
DBC文件生成工具
"""
import cantools
from cantools.database import Database, Message, Signal
def create_sample_dbc():
"""创建一个示例DBC文件"""
db = Database()
# 主机->复合管控 (ID:0x11000101)
msg1 = Message(
name="HostToCompositeControl",
frame_id=0x11000101,
is_extended_frame=True,
length=8,
signals=[
Signal(name="FuelCellModeSet", start=0, length=8, is_signed=False),
Signal(name="FuelCellCommand", start=8, length=8, is_signed=False),
Signal(name="MeterBatteryChargeFlag", start=16, length=8, is_signed=False),
Signal(name="MeterBatteryStartStop", start=24, length=8, is_signed=False),
Signal(name="PowerBatteryStartStop", start=32, length=8, is_signed=False),
Signal(name="HostHeartbeat", start=40, length=8, is_signed=False),
Signal(name="HostStatus", start=48, length=8, is_signed=False),
Signal(name="Reserved1", start=56, length=8, is_signed=False)
]
)
# 复合管控->主机 (ID:0x11000201)
msg2 = Message(
name="CompositeControlToHost",
frame_id=0x11000201,
is_extended_frame=True,
length=8,
signals=[
Signal(name="FuelCellSystemMode", start=0, length=8, is_signed=False),
Signal(name="FuelCellStatus", start=8, length=8, is_signed=False),
Signal(name="FuelCellFaultLevel", start=16, length=8, is_signed=False),
Signal(name="MeterBatteryEmergency", start=24, length=8, is_signed=False),
Signal(name="PowerBatteryEmergency", start=32, length=8, is_signed=False),
Signal(name="MeterBatteryTotalEnergy", start=40, length=8, is_signed=False),
Signal(name="PowerBatteryTotalEnergy", start=48, length=8, is_signed=False),
Signal(name="Reserved2", start=56, length=8, is_signed=False)
]
)
db.messages.extend([msg1, msg2])
return db
def save_dbc_file(db, filename):
"""保存DBC文件"""
with open(filename, "w") as f:
f.write(db.as_dbc_string())
if __name__ == "__main__":
print("正在生成示例DBC文件...")
db = create_sample_dbc()
save_dbc_file(db, "generated.dbc")
print("DBC文件已生成: generated.dbc")