본문 바로가기
mobilgene/DEM

[DEM] Application Port 연결 및 Mapping 설정 방법

by Autosar 2026. 4. 18.
반응형

이전 글에서는 DEM Event 생성 후 Generate 단계에서 발생한 SAFERTE_ERR_0310 오류 원인과 해결 방법을 정리했다.

또한 DEM 설정만으로는 끝나지 않으며, Application 영역에서 Port 생성, Runnable 연결,

Composition Wiring, Mapping 까지 완료되어야 실제 동작한다는 점도 확인했다.

이번 글에서는 이어서 App SWC에서 DEM Event용 Client Port와 Snapshot Data 제공용 Server Port를 생성하고,

Runnable 연결 및 Mapping까지 진행하는 전체 과정을 정리한다.

 

이번 글에서 다루는 2가지 Port

 

이번 설정에서는 Application SWC에서 아래 두 가지 Port를 사용한다.

 

1. Client Port  : DEM Event 상태 보고용
2. Server Port  : Snapshot Data 제공용

즉, Fault 발생 여부는 DEM에 전달하고

Snapshot 데이터는 DEM 요청 시 Application이 제공한다.

 

전체 작업 순서
1. Client Port 생성 (DiagnosticMonitor)
2. Server Port 생성 (DataServices_TEST_DID_0x0123_Snapshot_DataElement)
3. Required / Provided Operation 설정
4. Runnable 설정
5. Composition Connector 연결
6. Generate

 

1. Client Port 생성 (DiagnosticMonitor)

 

이제 DEM 서비스를 사용할 Application SWC 에서 Ports 탭으로 이동한다.
예: SWC_APP_DIAGNOSTIC 또는 SWC_APP_DEM

(SWC 명은 정해져 있는 것이 아니다.)


신규 Port를 추가하고 Interface Type은 Client Interface를 선택한다.
DEM Event 상태를 보고하기 위해 이번 예제에서는 'DiagnosticMonitor' Interface를 사용한다.

 

생성한 Port에서 사용할 Operation을 선택해야 하는데,
이번 예제에서는 Fault 상태를 DEM에 전달하기 위해 아래 'SetEventStatus' Operation을 사용한다.

 

그리고 반드시 Enable Required Com Specs 를 체크한다.
이 설정이 있어야 RTE가 해당 Operation 호출 사양을 생성한다.

 

2. Server Port 생성 (DataServices_TEST_DID_0x0123_Snapshot_DataElement)

 

이제 Snapshot 데이터를 DEM에 전달하기 위한 Server Port를 생성한다.
이번 예제에서는 Generate 해서 생긴 아래 Interface를 사용한다.
DataServices_TEST_DID_0x0123_Snapshot_DataElement

 

Server Port에는 일반적으로 아래 'ReadData' Operation이 포함된다.
Queue Length 를 1로 설정하여, DEM이 Snapshot 저장 시 아래 형태 API를 호출하도록 한다.

Rte_Call_DataServices_TEST_DID_0x0123_Snapshot_DataElement_ReadData

 

DEM이 Snapshot 저장 시 Data를 요청하면, Application SWC가 이 Server Port를 통해 값을 반환하게 된다.

즉 구조는 아래와 같다.

DEM 요청
→ ReadData 호출
→ Application 값 전달
→ Snapshot 저장

 

3. Runnable 설정

 

Task에서 주기적으로 실행되는 Main Runnable의 Operation / Mode / Trigger Access 항목으로 이동한 뒤,

Synchronous Server Call Points에 SetEventStatus를 추가한다.

 

그리고, 추가로 신규 Runnable을 추가한다.
이번 예제에서는 'TEST_DID_0x0123_Snapshot' 이름으로 생성한다.
이 Runnable은 DEM이 Snapshot Data를 요청할 때 실행되는 함수가 된다.

이후 생성한 Runnable의 RTE Event > Operation Invoked Event 항목에 Event를 추가한다.

 

즉, 특정 주기로 실행되는 Task 방식이 아니라,

DEM 서비스 호출에 의해 직접 실행되는 Event 기반 Runnable 구조이다.

 

4. Composition에서 Port 연결

 

Port만 만들었다고 끝나는 것이 아니다.
Composition 단계에서 실제 연결(Connector)을 해야 한다.

 

아래와 같이 각각의 포트를 알맞게 연결하면 된다.

 

5. Generate 수행

 

모든 연결이 완료되었다면 하모나이즈 후 Generate 를 수행한다.

Error 없이 잘 Finish 됬으면 성공~

 

6. 코드에서 DEM API 사용

 

모든 설정과 Generate가 완료되면, 이제 Application 코드에서 DEM Event를 직접 제어할 수 있다.

즉, Fault 조건이 발생했을 때 DTC를 올리고,
정상 상태로 복귀했을 때 DTC를 해제하는 로직을 구현할 수 있다.

 

1) Event 보고용 Main Runnable


앞에서 App SWC의 Client Port에 SetEventStatus Operation을 연결했기 때문에,

Generate 후 RTE는 호출용 API(매크로 또는 함수)를 자동 생성한다.

 

이번 예제에서는 아래와 같은 형태의 API가 생성된다.

Rte_Call_Event_DEM_E_TEST0123_SetEventStatus

 

이 API는 Application 코드와 DEM 모듈 사이를 연결해주는 표준 인터페이스이다.

즉, 직접 Dem_SetEventStatus()를 호출하는 것이 아니라
RTE를 통해 안전하게 호출하는 AUTOSAR 구조라고 이해하면 된다.

 

코드 예제 - 단순 Fail / Pass

 

배터리 전압이 낮으면 고장으로 판단하는 예제이다.

if (BatteryLowVoltage < 8000U)
{
    Rte_Call_Event_DEM_E_TEST0123_SetEventStatus(DEM_EVENT_STATUS_FAILED);
}
else
{
    Rte_Call_Event_DEM_E_TEST0123_SetEventStatus(DEM_EVENT_STATUS_PASSED);
}

 

2) Snapshot Runnable

 

위에서 생성한 'TEST_DID_0x0123_Snapshot Runnable'은

Main 함수처럼 주기적으로 직접 호출하는 함수가 아니다.

 

이 Runnable은 DEM이 Snapshot 데이터를 저장하거나 읽기 위해

ReadData Operation을 요청할 때 자동으로 실행되는 Callback Runnable이다.

즉 구조는 아래와 같다.

DTC 발생
→ DEM Snapshot 요청
→ RTE가 Runnable 호출
→ TEST_DID_0x0123_Snapshot 실행
→ 데이터 반환

 

코드 예제 - Snapshot Runnable
FUNC(Std_ReturnType, APP_SWC_DIAG) TEST_DID_0x0123_Snapshot
(
    P2VAR(uint8, AUTOMATIC, RTE_APPL_VAR) Data,
    VAR(Dem_MonitorDataType, AUTOMATIC) monitorData0)
)
{
    Data[0] = (uint8)(BatteryLowVoltage >> 8);
    Data[1] = (uint8)(BatteryLowVoltage);
    Data[2] = IgnState;
    Data[3] = TEST0123_Flag;
    Data[4] = DemState;

    return E_OK;
}


위 코드에서는 Fault 발생 순간의 아래 데이터를 Snapshot으로 저장한다.
: BatteryLowVoltage, IGN 상태, Flag 상태, Dem 상태

 

즉, 진단기에서 DTC를 조회할 때 고장 당시 상태를 함께 확인할 수 있다.

 

정리

 

DEM 설정만 완료했다고 진단 기능이 끝나는 것은 아니다.
실제 ECU Application에서 Event를 Fail / Pass 처리하려면 Port 연결과 Mapping까지 반드시 완료되어야 한다.

이번 과정을 이해하면 DEM과 Application 사이의 연결 구조가 훨씬 명확해진다.

반응형