#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ DBC文件生成工具 """ import cantools from cantools.database import Database, Message, Signal def create_sample_dbc(): """创建一个示例DBC文件""" db = Database() # 添加消息 msg1 = Message( name="EngineData", frame_id=0x100, length=8, signals=[ Signal(name="RPM", start=0, length=16, is_signed=False), Signal(name="Speed", start=16, length=16, is_signed=False), Signal(name="Temp", start=32, length=8, is_signed=True) ] ) msg2 = Message( name="VehicleStatus", frame_id=0x200, length=4, signals=[ Signal(name="DoorStatus", start=0, length=4, is_multiplexer=False), Signal(name="LightStatus", start=4, length=4, is_multiplexer=False) ] ) # 添加断路器状态消息 msg3 = Message( name="CircuitBreakerStatus", frame_id=0x1401A501, is_extended_frame=True, length=8, signals=[ Signal(name="FuelCellBreaker", start=0, length=8, is_signed=False), Signal(name="BatteryBreaker", start=8, length=8, is_signed=False), Signal(name="MotorBreaker", start=16, length=8, is_signed=False), Signal(name="BatteryMeterBreaker", start=24, length=8, is_signed=False), Signal(name="DCDC5Breaker", start=32, length=8, is_signed=False), Signal(name="BowDistBoxBreaker", start=40, length=8, is_signed=False), Signal(name="SternFT45Breaker", start=48, length=8, is_signed=False), Signal(name="SternRudder1Breaker", start=56, length=8, is_signed=False) ] ) db.messages.extend([msg1, msg2, msg3]) 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")