ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 현대차의 DTC(Diagnostic Trouble Code) 설명을 찾는 방법
    diagnostic 2024. 10. 25. 00:14

    시작하기 전에

    베뉴 ESC (a.k.a VDC: Vehicle Dynamics Control)를 대상으로 진단 통신을 하며 TSMaster의 UDS 기능 활용법을 설명하는 블로그를 준비 중이다.

    UDS 서비스들 중에 Read DTC (Diagnostic Trouble Code) 라는 서비스가 있다. (UDS에 관해 구글링하면 많은 좋은 자료들을 쉽게 찾을 수 있다.) 기본 중에 기본인 UDS 서비스이다. 그래서 내 설명에도 등장한다. Read DTC 요청에 ESC는 DTC를 회신한다. 이 DTC가 무슨 의미인지 알면 전체 설명을 더 쉽게 이해할 것이라 생각한다. 그래서 인터넷에서 현대자동차 베뉴 ESC의 DTC와 DTC 설명을 검색했으나, 내 맘에 흡족한 자료를 찾지 못했다. 그래서 DTC와 DTC 설명 자료를 직접 만들기로 했다.

    자료를 만들고 나니 그 과정이 다른 사람들에게도 유용할 것 같은 생각이 들었다. 그래서 이 과정을 블로그로 공유한다.

     

     

    개요

    • 현대기술정보 웹 사이트 (GSW: GlobalServiceWay) 에 접속한다.
    • 통합 검색 화면에서, 차량 정보를 입력하고, "DTC 매뉴얼"을 체크하고, 검색창에 "VDC"를 입력하고 검색을 실행한다. (현대기술정보 웹 사이트에서는 ESC가 아닌 VDC가 공식 용어인 것 같다.)
    • 검색 결과를 복붙하여 txt 파일에 저장한다.
    • txt 파일에서 DTC와 Description을 추출하여 xlsx로 저장한다.

     

     

    현대기술정보 웹 사이트

    현대기술정보 웹 사이트

     

     

    검색

    • 통합 검색 화면에서, 차량 정보를 입력하고, "DTC 매뉴얼"을 체크하고, 검색창에 "VDC"를 입력하고 상세 검색 버튼을 클릭하여 검색한다.
      • 서버가 검색하는 동안 한참 동안 기다려야 한다.
      • ESC 보다 VDC로 하면 더 많은 검색 결과를 볼 수 있다.
    • 검색 결과가 화면에 표시된다.

    베뉴 VDC DTC 검색 결과

     

     

    검색 결과를 복붙하여 txt 파일에 저장한다.

    • 검색 결과를 선택하여 복사하기를 하면 복사가 안 된다.
      • 나는 "웹 페이지 복사 방지 해제"라는 키워드로 구글링하여 찾은 방법으로 복사를 했다.
    • 텍스트 편집기를 이용하여 txt를 만든다.
      • 나는 베뉴_"VDC_DTC_현대기술정보.txt" 로 저장했다.

     

     

    txt 파일에서 DTC와 Description을 추출하여 xlsx로 저장한다.

    - 아래 코드로 txt를 처리하여 xlsx로 저장하였다.

     

    베뉴 VDC의 DTC를 df로 만들기

    • 현대자동차 기술 정보 시스템(https://gsw.hyundai.com/hmc/login.tiles)에서 베뉴 VDC의 DTC 정보를 복붙하여 txt 파일에 저장했다.
    • txt를 읽어서 dtc, description을 컬럼으로 하는 df를 만든다.
    from pathlib import Path
    import pandas as pd
    
    # 현대기술정보 홈페이지에서 복붙한 DTC와 DTC 설명이 있는 txt 파일을 읽는다.
    txt_dtc = Path('베뉴_VDC_DTC_현대기술정보.txt')
    with open(txt_dtc, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    
    # DTC로 시작하는 라인의 마지막 단어가 DTC이다.
    # 바로 그 아래 줄이 DTC에 대한 설명이다.
    # DTC로 시작하는 라인의 마지막 단어가 DTC가 아닌 경우가 있다.
    #     마지막 단어가 C, P, B, U로 시작하는지 확인한다. 그렇지 않으면 다음 라인으로 스킵한다.
    
    list_dtc = []
    list_description = []
    
    flag_skip_next_line = False
    for line in lines:
        if flag_skip_next_line:
            flag_skip_next_line = False
            continue
        if line.startswith('DTC'):
            dtc = line.split('>')[-1].strip()
            if not (dtc.startswith('P') or dtc.startswith('C') or dtc.startswith('B') or dtc.startswith('U')):
                flag_skip_next_line = True
        else:
            description = line.strip()
            list_dtc.append(dtc)
            list_description.append(description)
            # print(dtc, description)
    
    df_dtc = pd.DataFrame(
        {
            'DTC': list_dtc,
            'Description': list_description
        }
    )
    
    #  Description에 DTC 설명이 아닌 행들이 있다. 내가 찾는 Description은 '고장 코드 설명'이라는 구로 시작된다. Description의 시작이 '고장 코드 설명'이 아닌 행들은 삭제한다.
    df_dtc = df_dtc.loc[df_dtc['Description'].str.startswith('고장 코드 설명'), :]
    
    # 중복된 DTC를 제거한다.
    df_dtc = df_dtc.drop_duplicates(subset='DTC')
    
    # DTC 컬럼을 올림차순으로 정렬한다.
    df_dtc = df_dtc.sort_values(by='DTC')
    
    # Description 컬럼에서 '고장 코드 설명'을 제거한다.
    df_dtc['Description'] = df_dtc['Description'].str.replace('고장 코드 설명 ', '')

    DTC를 xlsx로 저장한다.

    
    # df_dtc를 xlsx로 저장한다.
    xlsx_dtc = txt_dtc.with_suffix('.xlsx')
    df_dtc.to_excel(xlsx_dtc, index=False)
    df_dtc
      DTC Description
    52 B100252 B100252는 EPB* 시스템이 설치되지 않은 차량에 EPB* 시스템이 설치된 것...
    51 B100255 B100255는 EPB* 시스템이 설치된 차량에 EPB* 시스템이 없는 것으로 배리...
    48 B101052 B101052는VDC* 시스템이 설치되지 않은 차량에 VDC* 시스템이 설치된 것으...
    46 B101055 B101052는VDC* 시스템이 설치되지 않은 차량에 VDC* 시스템이 설치된 것으...
    63 B1211 FCA/SCC 모듈은 CAN으로 ABSVDC가 SCC의 토크 제어를 수행할 수 없는...
    61 B1217 FCA/SCC 모듈은 C-CAN으로 ABSVDC)가 FCA/SCC로부터 메시지를 받...
    55 B1562 FCA/SCC 모듈은 장착된 ABSVDC)가 FCA/SCC 기능을 지원하지 않는 경...
    57 B1738 FCA/SCC 모듈은 C-CAN으로 ABSVDC)가 FCA 메시지를 수신하지 못할 ...
    30 C110101 VDC 모듈은 배터리 전압값이 정상값보다 높을 경우 DTC C110101이 표출되고...
    27 C110201 VDC 모듈은 배터리 전압값이 정상값보다 낮을 경우 DTC C110201이 표출되고...
    25 C120001 VDC 모듈은 휠 속도 센서 신호의 전류값이 규정범위를 벗어난 상태가 계속될 경우 ...
    24 C120102 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠속이 ...
    23 C120202 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    22 C120301 VDC 모듈은 휠 속도센서 신호의 전류값이 규정범위를 벗어난 상태가 계속될 경우 회...
    21 C120402 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    20 C120502 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    19 C120601 VDC 모듈은 휠 속도 센서 신호의 전류값이 규정범위를 벗어난 상태가 계속될 경우 ...
    18 C120702 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    17 C120802 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    16 C120901 VDC 모듈은 휠 속도 센서 신호의 전류값이 규정범위를 벗어난 상태가 계속될 경우 ...
    15 C121002 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    14 C121102 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 비정상적인 휠 속이...
    36 C121200 IBU는VDC로 부터 CAN으로 입력되는 휠 스피드 (차속) 신호가 미수신 또는 비...
    13 C121302 VDC 모듈은 휠 속도 센서 입력 시그널을 계속해서 모니터한다. 휠 속도 센서의 휠...
    71 C1503 VDC 모듈은 VDC 스위치가 단락되었을 경우 이 고장코드를 나타낸다. 고장코드 출...
    69 C1542 VDC 모듈은 정지등 스위치 신호를 운전자의 제동 의지를 판단하는 기준 신호로 사용...
    68 C1604 VDC 모듈은 메모리, 레지스터, Analog and Digital (A/D) 콘버...
    67 C1611 VDC 모듈은 정상적인 제어를 위해 CAN 통신선을 체크하고 ECM 메세지가 특정시...
    12 C161108 VDC 모듈은 정상적인 제어를 위해 CAN 통신선을 체크하고 ECM/PCM 메시지가...
    11 C161308 VDC 모듈은 정상 전압 범위 내에서 비정상적인 EMS 메시지가 감지될 경우 DTC...
    9 C161608 VDC 모듈은 CAN 통신선을 모니터링하고, CAN Bus OFF가 발생할 경우 D...
    62 C1625 FCA/SCC 모듈은 C-CAN으로 ABSVDC)로부터 데이터를 받지 못하였을 경우...
    34 C162500 IBU는VDC (ABS/ESC)측 차속 신호가 30초 이상 수신되지 않았을 경우, ...
    60 C1642 FCA/SCC 모듈은 C-CAN으로 수신한 ABSVDC)의 메시지 신호가 비정상인 ...
    45 C164200 IBU는VDC (ABS/ESC) 측으로부터 CAN 으로 입력되는 휠펄스 신호가 비정...
    66 C1689 VDC 모듈은 정상적인 제어를 위해 CAN 통신선을 체크하고, 비정상적인 FCA(구...
    8 C16B687 VDC 모듈은 정상적인 제어를 위해 CAN 통신선을 체크하고, FCA 메시지가 특정...
    7 C16B781 VDC 모듈은 정상적인 제어를 위해 CAN 통신선을 체크하고, 비정상적인 FCA 메...
    65 C1702 전원 인가 후VDC 모듈은 베리언트 코드를 확인한다. 이때 부적절한 베리언트 코드가...
    5 C170204 전원 인가 후VDC 모듈은 배리언트 코드를 확인한다. 이때 부적절한 배리언트 코드가...
    3 C211201 VDC 모듈은 ABS를 정상적으로 제어할 수 있는지 체크하기 위해 밸브 릴레이의 전...
    59 P0006 FCA/SCC 모듈은 C-CAN으로 수신한 ABSVDC)의 메시지 카운터 값 신호가...
    58 P000700 FCA/SCC 모듈은 C-CAN으로 수신한 ABSVDC)의 메시지 책섬 값 신호가 ...
    74 P0014 VDC 모듈은 휠속도센서 입력 신호를 계속해서 모니터한다. 비정상적인 휠속이 감지되...
    73 P0016 VDC 모듈은 휠속도센서 입력 시그널을 계속해서 모니터한다. 주행중 모든 휠 속도 ...
    72 P0017 VDC 모듈은 조향각센서의 비정상적인 신호를 수신한 경우 이 고장코드를 나타낸다.
    56 P0036 FCA/SCC 모듈은 C-CAN으로 ABSVDC)로부터 FCA/SCC 제어불가 메시...
    53 P0105 VDC 모듈(Vehicle Dynamic Control Unit)는 비정상적인 클러...

    df_dtc에서 DTC 코드를 찾아 Description을 표시하기

    from pathlib import Path
    import pandas as pd
    
    # 현대기술정보 홈페이지에서 복붙한 DTC와 DTC 설명이 있는 txt 파일을 읽는다.
    xlsx_dtc = Path('베뉴_VDC_DTC_현대기술정보.xlsx')
    df_dtc = pd.read_excel(xlsx_dtc, index_col='DTC')
    
    df_dtc.tail(3)
      Description
    DTC  
    P0017 VDC 모듈은 조향각센서의 비정상적인 신호를 수신한 경우 이 고장코드를 나타낸다.
    P0036 FCA/SCC 모듈은 C-CAN으로 ABSVDC)로부터 FCA/SCC 제어불가 메시...
    P0105 VDC 모듈(Vehicle Dynamic Control Unit)는 비정상적인 클러...
    def get_dtc_description(dtc):
        '''
        DTC에 대한 설명을 반환한다.
        '''
        global df_dtc
    
        try:
            description = df_dtc.loc[dtc, 'Description']
        except KeyError:
            description = 'DTC를 찾을 수 없습니다.'
    
        return description
    dtc = 'C120301'
    get_dtc_description(dtc)
    'VDC 모듈은 휠 속도센서 신호의 전류값이 규정범위를 벗어난 상태가 계속될 경우 회로가 단선/단락임을 결정하고 DTC C120301을 표출한다. 기능 및 역할 휠 속도 센서는 각 차륜의 속도를 검출하여 HECU에 정보를 제공해 차속을 연산하고 바퀴의 잠김 여부를 판단한다. 고장 판정 조건 항목'
    dtc = 'C150113'
    get_dtc_description(dtc)
    'DTC를 찾을 수 없습니다.'

     

     

    첨부

    • 위 코드의 Jupyter 노트북 파일이다.

    베뉴_VDC_DTC_to_df.ipynb
    0.51MB

     

    • 현대기술정보 웹 사이트에서 VDC(=ESC)의 DTC를 검색한 결과를 복붙한 txt 파일이다.

    베뉴_VDC_DTC_현대기술정보.txt
    0.04MB

     

    • 위 코드로 txt를 xlsx로 만들었다.

    베뉴_VDC_DTC_현대기술정보.xlsx
    0.01MB

     

     

     

    결론

    • 위와 같이 간단한 방법으로 현대자동차 베뉴 VDC의 DTC와 DTC 설명을 xlsx로 만들 수 있었다.
    • 같은 방법으로 다른 시스템의 DTC와 설명을 찾고 xlsx로 만들 수 있다.