64 lines
2.3 KiB
Python
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")
|