DBC 파일 로드 기능 추가 및 메시지와 시그널 추출 로직 구현

This commit is contained in:
3minbe 2025-01-21 18:35:11 +09:00
parent 2ddecabe55
commit 8efb076ba3

70
Data_Parsing.py Normal file
View File

@ -0,0 +1,70 @@
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}")