mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
commit
37132d4a90
71
Data_Parsing.py
Normal file
71
Data_Parsing.py
Normal file
@ -0,0 +1,71 @@
|
||||
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}")
|
||||
Loading…
Reference in New Issue
Block a user