mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
import re
|
|
|
|
def load_dbc_file(file_path):
|
|
try:
|
|
with open(file_path, 'r') as file:
|
|
content = file.read()
|
|
# print(f"[INFO] Successfully loaded DBC file: {file_path}")
|
|
|
|
# 메시지와 시그널을 추출하는 정규 표현식
|
|
message_pattern = re.compile(r'BO_\s+(\d+)\s+(\w+)\s*:\s*(\d+)\s+(\w+)')
|
|
signal_pattern = re.compile(r'SG_\s+(\w+)\s*:\s*(\d+)\|(\d+)@(\d+)\+\s*\(([^,]+),\s*([^)]+)\)')
|
|
|
|
# 메시지와 시그널 매칭
|
|
messages = {}
|
|
current_message = None
|
|
|
|
for line in content.splitlines():
|
|
line = line.strip()
|
|
if not line:
|
|
current_message = None
|
|
continue
|
|
|
|
message_match = message_pattern.match(line)
|
|
if message_match:
|
|
decimal_id = int(message_match.group(1))
|
|
hex_id = f"0x{decimal_id:03X}"
|
|
message_name = message_match.group(2)
|
|
dlc = int(message_match.group(3))
|
|
tx_ecu_name = message_match.group(4)
|
|
current_message = message_name
|
|
messages[current_message] = {
|
|
"ID": hex_id,
|
|
"DLC": dlc,
|
|
"TX ECU name": tx_ecu_name,
|
|
"Signals": []
|
|
}
|
|
elif current_message:
|
|
signal_match = signal_pattern.match(line)
|
|
if signal_match:
|
|
signal_name = signal_match.group(1)
|
|
msb = int(signal_match.group(2))
|
|
length = int(signal_match.group(3))
|
|
byte_order = int(signal_match.group(4))
|
|
factor = float(signal_match.group(5))
|
|
offset = float(signal_match.group(6))
|
|
messages[current_message]["Signals"].append({
|
|
"Signal name": signal_name,
|
|
"msb": msb,
|
|
"Length": length,
|
|
"Byte order": byte_order,
|
|
"Factor": factor,
|
|
"Offset": offset
|
|
})
|
|
|
|
return messages
|
|
|
|
except Exception as e:
|
|
print(f"[ERROR] Failed to parse DBC file: {e}")
|
|
return None
|
|
|
|
if __name__ == "__main__":
|
|
file_path = 'C:/Users/MSI/Desktop/python/motorola_tx/MOTOROLA_V2.dbc'
|
|
messages = load_dbc_file(file_path)
|
|
print(messages)
|
|
print("\n")
|
|
# if messages:
|
|
# for message_name, message_info in messages.items():
|
|
# print(f"[INFO] Message: {message_name}, Info: {message_info['id']}, {message_info['dlc']}, {message_info['tx_ecu_name']}")
|
|
# for signal in message_info['signals']:
|
|
# print(f" Signal: {signal}") |