Files
H100PowerManger/test/cantools/generate_dbc.py
T

68 lines
2.1 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()
# 添加消息
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")