mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
import re, sys
|
|
|
|
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*([^)]+)\)\s*\[[^\]]+\]\s*\"[^\"]*\"\s+(\w+)')
|
|
|
|
# 메시지와 시그널 매칭
|
|
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))
|
|
sign = signal_match.group(5)
|
|
factor = float(signal_match.group(6))
|
|
offset = float(signal_match.group(7))
|
|
rx_ecu_name = signal_match.group(8)
|
|
messages[current_message]["Signals"].append({
|
|
"Signal name": signal_name,
|
|
"msb": msb,
|
|
"Length": length,
|
|
"Byte order": byte_order,
|
|
"Sign": sign,
|
|
"Factor": factor,
|
|
"Offset": offset,
|
|
"RX ECU name": rx_ecu_name
|
|
})
|
|
|
|
return messages
|
|
|
|
except Exception as e:
|
|
print(f"[ERROR] Failed to parse DBC file: {e}")
|
|
return None
|
|
|
|
if __name__ == "__main__":
|
|
file_path = sys.argv[1]
|
|
messages = load_dbc_file(file_path)
|
|
|
|
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}") |