From 8efb076ba376cc05bd5e1f500f87321ea0bf04a4 Mon Sep 17 00:00:00 2001 From: 3minbe Date: Tue, 21 Jan 2025 18:35:11 +0900 Subject: [PATCH] =?UTF-8?q?DBC=20=ED=8C=8C=EC=9D=BC=20=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EC=99=80=20=EC=8B=9C=EA=B7=B8?= =?UTF-8?q?=EB=84=90=20=EC=B6=94=EC=B6=9C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Data_Parsing.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Data_Parsing.py diff --git a/Data_Parsing.py b/Data_Parsing.py new file mode 100644 index 0000000..e58b67e --- /dev/null +++ b/Data_Parsing.py @@ -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}") \ No newline at end of file