#!/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")