본문 바로가기
mobilgene/DEM

[DEM] DTC 설정 방법

by Autosar 2026. 4. 18.
반응형

이전 글에서는 MOBILGEN에서 DEM Snapshot(Freeze Frame) 설정 방법에 대해 정리했다.
Fault 발생 순간의 차량 상태 데이터를 어떻게 저장할지,

Data Element부터 Freeze Frame Record까지 어떤 순서로 구성하는지 살펴보았다.

하지만 Snapshot 설정만으로는 실제 진단 기능이 동작하지 않는다.
Snapshot은 어디까지나 고장 발생 시 저장되는 데이터 구조일 뿐이며,

실제로 DTC를 발생시키고 관리하는 핵심 설정은 별도로 필요하다.

이번 글에서는 이전 내용에 이어서 DEM에서 하나의 DTC를 완성하는 전체 과정을 정리한다.
즉, Operating Cycle 생성부터 DTC 등록, Event Parameter 연결까지 실제 Fault가 동작하기 위한 핵심 설정 흐름을 단계별로 설명한다.

이번 글에서 다룰 전체 순서
1. Operating Cycle 생성
2. Event Memory Set 생성
3. DTC Attribute 생성
4. DTC 생성
5. Event Parameter 생성
6. Snapshot 연결
7. 하모나이즈 수행 후 Generate

이 순서대로 이해하면 DEM 구조가 훨씬 명확해진다.

 

Step 1. Operating Cycle 생성

 

Operating Cycle은 진단을 어떤 주기로 판단할지 정의하는 설정이다.

예를 들어 시동이 켜질 때마다 새로운 Cycle을 시작할지,
주행 한 번을 기준으로 판단할지,
전원 ON/OFF를 기준으로 Fault 상태를 관리할지 결정한다.

차량 프로젝트에서는 일반적으로 아래와 같은 Cycle이 많이 사용된다.

- IGN Cycle
- Power Cycle
- Drive Cycle

 

예를 들어 저전압 Fault가 있다면 IGN ON 상태에서만 진단하고,

시동을 다시 걸면 새로운 판단을 시작하도록 설정할 수 있다.

즉, Fault의 판단 생명주기를 정의하는 첫 단계이다.

 

Step 2. Event Memory Set 생성

 

Fault가 발생했을 때 해당 정보를 어디에 저장할지 결정하는 항목이다.

DEM은 여러 종류의 메모리를 사용할 수 있다.

Primary Memory
Secondary Memory
Mirror Memory
Permanent Memory

일반적인 개발 단계에서는 대부분 Primary Memory를 사용한다.

이 설정이 없으면 Event가 Fail 되어도 저장 위치가 없어 정상 동작하지 않을 수 있다.

- Short Name 은 설정 값 그대로 두었다.
- Environment Data Capture: 환경 데이터(Freeze Frame 또는 Extended Data)를 수집하는 타이밍을 결정한다.

선택 옵션

- DEM_CAPTURE_ASYNCHRONOUS_TO_REPORTING
: Dem_SetEventStatus가 호출되는 시점에 즉시 캡처하지 않고, DEM의 Main Function 등에서 비동기적으로 데이터를 수집한다.

- DEM_CAPTURE_SYNCHRONOUS_TO_REPORTING
: Dem_SetEventStatus 함수가 호출되는 그 즉시 데이터를 캡처합니다. 오류가 발생한 바로 그 순간의 정확한 스냅샷을 얻을 수 있지만, 데이터를 수집하는 동안 CPU 점유 시간이 길어져, 실시간 인터럽트나 다른 Task 처리에 영향을 줄 수 있다.

 

- Event Displacement Strategy: 이벤트 메모리가 가득 찼을 때, 새로운 DTC를 저장하기 위해 기존 엔트리를 어떻게 삭제(교체)할지 결정한다.

선택 옵션

- DEM_DISPLACEMENT_FULL
: 우선순위가 낮거나 가장 오래된 이벤트를 삭제하고 새로운 이벤트를 저장하는 표준 교체 방식을 따른다.

- DEM_DISPLACEMENT_NONE
: 기존에 저장된 DTC를 절대 삭제하지 않는다. 메모리가 차면 새로운 DTC는 무시한다. 일반적으론 거의 쓰이지 않는다.

- DEM_DISPLACEMENT_PRIO_OCC
: 우선순위(Priority)가 낮은 것을 먼저 지우고, 우선순위가 같다면 발생 횟수(Occurrence Counter)가 적은 것을 먼저 삭제한다.

 

- Event Memory Entry Storage Trigger: DTC 정보가 이벤트 메모리에 실제 할당(저장)되는 트리거 조건을 정의한다.

선택 옵션

- DEM_TRIGGER_ON_TEST_FAILED
: 테스트 결과가 Failed로 판정되는 즉시, 메모리에 해당 DTC를 위한 공간을 생성한다.

- DEM_TRIGGER_ON_FDC_THRESHOLD
: 테스트 실패 전이라도, 오류 카운터(Fault Detection Counter)가 특정 임계값에 도달하면 미리 자리를 할당한다.

- DEM_TRIGGER_ON_CONFIRMED
: Confirmed 비트가 세팅될 때만 저장한다.


- Max Number Event Entry Primary: Primary Memory에 저장할 수 있는 최대 DTC 개수를 지정한다.

- Occurrence Counter Processing: 발생 횟수 카운터(Occurrence Counter)를 증가시키는 기준을 정의한다.

선택 옵션

- DEM_PROCESS_OCCCTR_TF
: TF(Test Failed) 비트가 0에서 1로 전이(Transition)될 때마다 카운터를 증가시킵니다.

- DEM_PROCESS_OCCCTR_CDTC
: ConfirmedDTC 비트가 0에서 1로 바뀔 때만 카운터를 올립니다.

 

- Type Of Freeze Frame Record Numeration: Freeze Frame 레코드 번호를 부여하는 방식을 결정한다.

선택 옵션

- DEM_FF_RECNUM_CONFIGURED
: 발생 순서에 따라 자동으로 번호를 매기는 방식이 아니라, Configuration 시 사용자가 미리 정의해둔 레코드 번호를 사용하도록 설정한다.

- DEM_FF_RECNUM_CALCULATED
: 설정된 순서와 상관없이, 저장된 순서에 따라 0x01, 0x02, 0x03... 식으로 번호가 자동 계산되어 부여하는 방식이다.

 

 

Step 3. DTC Attribute 생성

 

DTC Attribute는 해당 Fault의 동작 정책을 정의하는 핵심 설정이다.
여기서 아래와 같은 항목들이 결정된다.


- Aging Allowed: Aging 기능 사용 여부를 설정한다.

true로 설정하면 해당 DTC는 정상 주행 사이클이 누적될 때 Aging 조건을 만족할 수 있으며, Confirmed 상태 해제 또는 메모리에서 제거될 수 있다. 즉, Fault가 더 이상 재발하지 않을 경우 일정 조건 후 자동 복구되도록 하는 기능이다.

 

- Aging Cycle Counter Threshold: Aging 완료로 판단하기 위해 필요한 정상 Cycle 횟수를 설정한다.
예를 들어 30으로 설정하면, Fault 재발 없이 30번의 유효 Cycle이 지나야 Aging 조건을 만족한다.

 

- DTC Priority: DTC의 우선순위를 설정한다. 일반적으로 값이 작을수록 높은 우선순위를 의미한다.

 

- Aging Cycle Ref: Aging 판단에 사용할 Operation Cycle을 지정한다.

(위의 Step 2에서 설정한 Operation Cycle 을 지정한다.)

 

- Freeze Frame Class Ref: Fault 발생 시 저장할 Snapshot(Freeze Frame) 데이터 구조를 참조한다.
어떤 데이터를 저장할지 정의된 Freeze Frame Class를 연결하는 항목이다.

(앞전 글에서 설명했던 Freeze Frame Class 를 지정한다.)

 

- Freeze Frame Rec Num Class Ref: Freeze Frame Record Number 관리 정보를 참조하는 항목이다.
저장 가능한 Record 번호 또는 Record 매핑 구조를 정의한 Class를 연결한다.

(앞전 글에서 설명했던 Freeze Frame Rec Num Class 를 지정한다.)

프로젝트에 따라 다중 Snapshot 관리 시 사용된다.

- Memory Destination Ref: DTC와 관련 데이터를 저장할 Event Memory 영역을 지정한다.

(위의 Step 2에서 설정한 Memory Destination 을 지정한다.)

Step 4. DTC 생성

 

Dem > DemConfigSet > DTC 탭에서 실제 진단 코드(DTC)를 등록하는 단계이다.

 

- Severity: DTC의 중요도(Severity) 정보를 설정하는 항목이다.
이 값은 주로 진단기 표시, 정비 우선순위 판단, 서비스 정보 제공 등에 사용되는 메타 정보이며,

일반적으로 DTC Fail/Pass 판정 로직 자체에는 직접적인 영향을 주지 않는다.
즉, 진단 동작 조건보다는 정비 관점의 중요도 표시에 가깝다.

설정 가능한 대표 값은 아래와 같다.


- DEM_DTC_SEV_CHECK_AT_NEXT_HALT : 다음 차량 정지(Halt) 시 점검이 필요함을 의미한다.
- DEM_DTC_SEV_IMMEDIATELY: 즉시 점검이 필요함을 의미한다.
- DEM_DTC_SEV_MAINTENANCE_ONLY: 즉각적인 점검보다는 정비 또는 유지보수가 필요함을 의미한다.
- DEM_DTC_SEV_NO_SEVERITY: 별도의 중요도 정보가 없음을 의미한다.

- DTC Value: 외부 진단기에서 읽게 되는 실제 고장 코드 값을 설정하는 항목이다.
프로젝트 규격 및 표준(예: OEM 규격, ISO 15031-6, ISO 14229 등)에 따라 정의된 값을 사용한다.
예시로 0xABC123 으로 설정했다. (일반적으로 3Byte UDS DTC 형식을 많이 사용한다.)

- Nv Storage Strategy: DTC 상태 변경 또는 최초 발생 시 비휘발성 메모리(NvM)에 저장 요청을 어떻게 처리할지 결정하는 항목이다. 예를 들어 “최초 발생 즉시 저장”, “주기 저장”, “조건 만족 시 저장” 등의 전략으로 구성될 수 있다.
단, 여기서 중요한 점은 저장 요청과 실제 Flash/EEPROM 기록 시점은 다를 수 있다.

- Attributes Ref: 앞 단계에서 생성한 DTC Attribute를 현재 DTC에 연결하는 참조 항목이다.

(위의 Step 3에서 설정한 DTC Attribute 를 지정한다.)

즉, DTC 번호만 생성하는 것으로는 충분하지 않으며, 반드시 Attribute 연결까지 해야 실제 동작 정책이 완성된다.

 

Step 5. Event Parameter 생성

 

이 단계가 실제 동작의 중심이다.

Event Parameter는 DEM에서 실제 진단 이벤트를 동작시키는 핵심 설정 영역이다.
DTC만 생성하는 것으로는 Fault가 동작하지 않으며, Event Parameter까지 연결되어야 ECU에서 Fail / Pass 처리가 가능하다.

 

즉, Application Code는 Event를 사용하고, DEM은 Event와 연결된 DTC를 관리하며, 진단기는 최종적으로 DTC를 읽는다.

Event Parameter에는 일반적으로 아래 항목이 포함된다.

 

- Event Available: 해당 Diagnostic Event의 사용 여부를 설정한다.
일반적으로 실제 적용 대상 Event는 true로 설정한다.

- Event Confirmation Threshold: Event가 Confirmed 상태로 전환되기까지 필요한 Confirm 횟수 또는 조건을 설정한다.
예를 들어 1로 설정하면 조건 충족 시 첫 Confirm 기회에서 Confirmed DTC가 될 수 있다.
3으로 설정하면 지정된 Cycle 또는 판단 기준에서 여러 번 Fail이 누적되어야 Confirm 될 수 있다.

- Event Id: Diagnostic Event를 식별하기 위한 고유 ID이다.
Application Code에서는 보통 이 Event ID를 사용하여 DEM에 상태를 보고한다.

 

- Event Kind: Event의 발생 주체 또는 유형을 구분하는 항목이다.
일반적으로 BSW Event와 SW-C(Application) Event 등으로 구분된다.
    BSW : Basic Software 모듈에서 관리하는 Event
    SWC / ASW : Application Software에서 관리하는 Event

실무에서는 Application 코드에서 Dem_SetEventStatus()를 직접 호출하는 경우, 해당 구조에 맞는 Event Kind로 설정해야 정상 동작한다.

※ 프로젝트별 DEM 구현 방식에 따라 동작 차이가 있을 수 있으므로 사용 중인 Stack 가이드를 함께 확인하는 것이 좋다.

- DTC Ref: 앞 단계에서 생성한 DTC를 참조하는 항목이다.
이 연결을 통해 해당 Event가 Fail 되었을 때 어떤 DTC를 발생시킬지 결정된다.

(위의 Step 4에서 설정한 DTC를 지정한다.)

 

- Enable Condition Group Ref: 특정 조건에서만 진단을 수행하도록 제한하는 기능이다.

(사전에 Enable Condition 과 Enable Condition Group 설정이 되어 있다면, Ref 를 설정하면 된다.)

 

- Operation Cycle Ref: 해당 Event가 어떤 Operation Cycle 기준으로 동작할지 설정한다.

(위의 Step 1에서 설정한 Operation Cycle 을 지정한다.)

 

- Debounce Algorithm Class 설정

Fault를 한 번 감지했다고 바로 DTC를 올리면 노이즈나 순간 오류에도 오진단이 발생할 수 있다.
이를 방지하기 위해 Debounce 설정을 사용한다. 보통 Event Parameter에서 Debounce Class를 연결한다.

1. Debounce Counter Based: 카운터 기반 디바운싱 방식이다.
고장 조건이 만족될 때 카운터를 증가시키고, 정상 조건이면 감소시킨다.
설정된 임계값에 도달했을 때 최종 Fail로 판단한다.
(예: Fail 감지 5회 누적 시 DTC 발생)
순간적인 노이즈 제거에 효과적이다.

 

2. Debounce Time Based: 시간 기반 디바운싱 방식이다.
고장 조건이 일정 시간 이상 지속될 때만 Fail로 판단한다.
(예: 500ms 이상 Fault 지속 시 DTC 발생)
센서 신호 튐이나 짧은 순간 오류 방지에 적합하다.

 

3. Debounce Monitor Internal: DEM이 직접 카운터/시간을 계산하지 않고, 외부 Monitor(Application Logic)가 자체적으로 판단한 결과를 DEM에 전달하는 방식이다.
즉, 진단 로직은 Application 내부에 있고 DEM은 최종 결과만 관리한다.
(예: 센서 이상 여부를 Application에서 자체 판단 → 최종 Fail 상태만 DEM에 보고)
복잡한 진단 로직이나 별도 필터가 필요한 경우 많이 사용된다.

 

Event Parameter는 DEM 진단의 실제 동작 중심이며,

Event ID, DTC 연결, Cycle, Debounce, Enable Condition 까지 모두 설정해야 Fault가 정상 동작한다.

 

Step 6. Snapshot 연결

 

이전 글에서 생성한 Snapshot(Freeze Frame Record)은 여기서 Event와 연결된다.
즉, 이전 글의 내용이 이번 단계에서 실제로 사용된다.

동작 흐름은 아래와 같다.

Event Fail
→ DTC 발생
→ Snapshot 저장

따라서 Snapshot 글과 이번 글은 반드시 연결되는 구조이다.

 

Step 7. 하모나이스 수행 후 Generate

 

모든 Reference 설정이 완료되면 먼저 Harmonize를 수행하여 설정 간 연결 상태를 정리한다.

이후 Generate를 수행한다.

 

Generated 를 수행하면 Error 가 발생할 것이다.

이유는? 다음 장에서 확인..

 

정리

 

이전 글에서는 Snapshot 저장 구조를 만들었다면,
이번 글에서는 그 Snapshot이 실제로 동작하도록 DTC와 Event를 구성하는 과정까지 이어서 살펴보았다.

 

이 두 내용을 함께 이해해야 AUTOSAR DEM 구조가 완성된다.

반응형