AUTOSAR CAN 통신을 설정하다 보면 반드시 한 번은 만나게 되는 기능이 있다.
바로 Com Timeout 기능이다.
처음 AUTOSAR를 접하면 Timeout을 단순히 CAN 메시지가 일정 시간 동안 안 들어오면 에러를 판단하는 기능 정도로 이해하는 경우가 많다. 하지만 실제 차량 SW에서는 단순 에러 감시 이상의 역할을 수행한다.
왜냐하면 자동차 ECU는 단순히 “메시지가 끊겼다”는 사실보다도,
끊어진 데이터를 정상 데이터처럼 계속 사용하는 상황을 훨씬 더 위험하게 보기 때문이다.
AUTOSAR Com Timeout은 단순 Timer 기능이 아니라,
CAN 데이터의 신뢰성과 유효성을 관리하는 기능이라고 이해하는 것이 맞다.
실제 차량에서는 CAN 메시지가 끊기는 상황이 생각보다 자주 발생한다.
- 송신 ECU Reset
- CAN Bus-Off
- Gateway 오류
- 배선 접촉 불량
- 네트워크 혼잡
- 전원 문제
같은 이유로 특정 메시지가 사라질 수 있다.
이때 중요한 것은 '현재 ECU가 그 데이터를 아직도 신뢰해도 되는가'이다.
AUTOSAR의 Timeout 기능은 바로 이 부분을 판단하기 위해 존재한다.
많은 초보자들이 Timeout을 "Signal 값 자체를 감시하는 기능"으로 오해하기도 한다.
하지만 실제로 AUTOSAR Com은 Signal 값이 0인지 100인지 같은 데이터 내용 자체를 감시하지 않는다.
대신 "메시지가 정상 주기로 계속 수신되고 있는가"를 감시한다.
예를 들어 아래와 같은 메시지가 있다고 가정해보자.
| 메시지 | 주기 |
| WHL_01_10ms | 10ms |
정상 상황이라면 이 메시지는 10ms마다 계속 들어와야 한다.
AUTOSAR Com 내부에서는 메시지가 수신될 때마다 Timeout Counter를 갱신하거나 초기화하고,
주기적으로 내부 카운터를 감소시키면서 메시지 수신 여부를 계속 감시하게 된다.
그리고 일정 시간 이상 새로운 메시지가 들어오지 않으면 정상 주기에서 벗어났다고 판단하게 된다.
즉, Timeout은 메시지 수신 주기가 정상인지 감시하는 기능이지,
Signal 값 자체를 검사하는 기능은 아니다.
이 개념을 이해하지 못하면 실무에서 굉장히 많이 헷갈리게 된다.
예를 들어 값은 계속 보이는데 실제 통신은 이미 끊긴 상태같은 현상이 발생할 수 있기 때문이다.

특히 ComRxDataTimeoutAction = NONE으로 설정된 경우에는
Timeout이 발생하더라도 마지막 값이 그대로 유지될 수 있다.
그래서 단순히 "값이 보인다"만으로는 정상 통신 여부를 판단할 수 없다.
반드시 Timeout 발생 여부, Deadline Monitoring 상태, 데이터 갱신 여부, Notification 호출 여부까지 함께 확인해야 한다.
1. AUTOSAR Com Timeout은 정확히 무엇인가
AUTOSAR에서는 CAN 메시지가 정상적으로 수신되고 있는지를 지속적으로 감시한다.
이 기능을 AUTOSAR 내부에서는 보통
Rx Deadline Monitoring
이라고 부른다.
이름 그대로 "정해진 시간(Deadline) 안에 데이터가 도착했는가"를 확인하는 기능이다.
예를 들어 10ms 주기의 CAN 메시지가 있다고 가정해보자.
정상 상황이라면 ECU는 약 10ms마다 새로운 데이터를 계속 받아야 한다.
하지만 실제 차량에서는
- 송신 ECU 이상
- CAN 배선 문제
- Gateway 통신 오류
- Bus-Off
- Sleep 상태 진입
등의 이유로 메시지가 갑자기 끊길 수 있다.
이때 AUTOSAR Com은 내부적으로 시간을 계속 카운트하면서
"마지막 메시지를 받은 이후 얼마나 시간이 지났는가"를 지속적으로 감시한다.
그리고 설정된 시간 이상 새로운 메시지가 들어오지 않으면 Timeout 상태로 판단하게 된다.
즉, AUTOSAR의 Timeout은 단순히 "메시지가 안 들어온다"를 의미하는 것이 아니라,
"현재 데이터가 더 이상 최신 데이터가 아닐 가능성이 높다"는 것을 의미한다.
그래서 Timeout 이후에는
- 현재 데이터를 무효 처리하거나
- 초기값으로 변경하거나
- Fail-safe 상태로 전환하거나
- DTC를 설정하거나
- Notification 함수를 호출하는
등의 후속 동작이 수행될 수 있다.
실제로 차량 제어에서는 최신 데이터가 아닌 값을 계속 사용하는 것이 매우 위험하기 때문에,
AUTOSAR는 Timeout 기능을 통해 데이터 유효성을 관리하게 된다.
2. Timeout은 어디에서 설정하는가
Mobilgene 기준으로는 보통 아래 위치에서 설정한다.

먼저 Com 모듈 화면으로 들어간 뒤 Com → All Contents를 선택하면 별도의 전체 구조 창이 열린다.
여기서 AUTOSAR Com 내부 구조를 트리 형태로 확인할 수 있다.
실제로 들어가 보면 아래와 같은 구조가 보인다.

Timeout 설정은 보통 ComSignal 또는 ComSignalGroup에서 수행하게 된다.
특히 실무에서는 여러 Signal을 하나의 데이터 세트처럼 관리하는 경우가 많기 때문에,
ComSignalGroup 기준으로 Timeout을 설정하는 경우가 매우 많다.
ComSignalGroup 내부로 들어가면 각 SignalGroup별 실제 Timeout 관련 설정 항목들을 확인할 수 있다.
자세한 설정 항목에 대한 설명은 앞전에 설명했던 글을 참고하면 좋다.
https://jjongday.tistory.com/136
즉, 실제 설정 흐름은 Com → All Contents → ComConfig → ComSignalGroup 순서로 들어가서 설정하는 경우가 많다.
개별 Signal 기준으로 관리하는 경우에는 ComSignal 쪽에서 설정하기도 하지만,
휠 속도처럼 여러 데이터가 동시에 유효해야 하는 경우에는 대부분 SignalGroup 기준으로 설정하게 된다.
3. ComFirstTimeout과 ComTimeout 차이
AUTOSAR Timeout 설정에서 가장 많이 헷갈리는 부분 중 하나가 바로 이것이다.

처음 보면 둘 다 Timeout처럼 보이기 때문에 '왜 굳이 두 개를 따로 설정하는가'라는 의문이 생긴다.
하지만 실제 역할은 서로 다르다.
ComFirstTimeout은 ECU가 시작된 직후 사용하는 Timeout 값이다.
즉, 첫 번째 메시지가 언제까지 들어와야 하는가를 판단하는 용도이다.
예를 들어 ECU가 막 부팅된 직후에는 상대 ECU가 아직 초기화 중일 수도 있다.
그래서 일반 Timeout과 다른 기준 시간을 사용하는 경우가 많다.
예를 들어
| 설정 | 값 |
| 메시지 주기 | 10ms |
| ComFirstTimeout | 100ms |
라고 설정되어 있다면 ECU 부팅 이후 100ms 안에 첫 메시지가 들어와야 한다.
반면 ComTimeout은 첫 메시지를 받은 이후부터 사용하는 일반 Timeout 값이다.
예를 들어
| 설정 | 값 |
| 메시지 주기 | 10ms |
| ComTimeout | 500ms |
라면 정상 동작 중 500ms 동안 메시지가 들어오지 않을 경우 Timeout이 발생하게 된다.
실무에서는 보통 메시지 주기의 3~10배 정도 수준으로 설정하는 경우가 많다.
너무 짧게 설정하면 순간적인 Bus 지연에도 Timeout이 발생할 수 있고,
너무 길게 설정하면 실제 통신 이상 검출이 늦어질 수 있기 때문이다.
4. Timeout 발생 시 ECU 내부 동작
많은 사람들이
Timeout 발생 = 데이터가 안 들어오는 상태
정도로만 생각한다.
하지만 실제 AUTOSAR 내부에서는 생각보다 많은 동작이 수행된다.
일반적인 내부 흐름은 아래와 비슷하다.
CAN 메시지 미수신
→ Deadline Counter 감소
→ Timeout 조건 만족
→ Signal 상태 변경
→ Timeout Action 수행
→ Notification 함수 호출
→ RTE 데이터 상태 변경
즉, 단순 경고 수준이 아니라 내부 데이터 상태 자체가 변경된다.
특히 중요한 것은 'Timeout 이후 ECU가 어떤 값을 사용할 것인가'이다.
AUTOSAR에서는 이를 위해 ComRxDataTimeoutAction 기능을 제공한다.
5. ComRxDataTimeoutAction 설정
이 옵션은 Timeout 발생 이후 데이터를 어떻게 처리할지를 결정한다.
대표적으로 아래와 같은 방식이 많이 사용된다.
| 설정값 | 동작 |
| NONE | 마지막 값 유지 |
| REPLACE | Init Value 적용 |
| SUBSTITUTE | 별도 Substitute 값 적용 |
NONE으로 설정하면 Timeout이 발생하더라도 마지막 수신 값을 계속 유지한다.
그래서 CAN선이 실제로 끊어졌더라도 ECU 내부 값은 계속 살아있을 수 있다.
실제 디버깅 중 'CAN은 안 들어오는데 값은 계속 정상처럼 보인다'라는 현상이 발생하면 대부분 이 설정을 먼저 확인하게 된다.
반면 REPLACE는 Timeout 발생 시 데이터를 Init Value로 변경한다.
예를 들어 Init Value가 0이라면
VehicleSpeed = 0;
으로 자동 변경된다.
실무에서는 차속, 토크, 제동 관련 데이터처럼 이전 값 유지가 위험한 데이터에서 많이 사용한다.
6. Signal Timeout과 SignalGroup Timeout 차이
AUTOSAR에서는 개별 Signal 기준으로 Timeout을 설정할 수도 있고,
SignalGroup 기준으로 설정할 수도 있다.
Signal Timeout은 특정 Signal 하나만 감시한다.
예를 들면
VehicleSpeed
반면 SignalGroup Timeout은 여러 Signal을 하나의 데이터 세트처럼 관리한다.
예를 들어
Wheel_FL
Wheel_FR
Wheel_RL
Wheel_RR
같은 데이터를 하나의 그룹으로 묶어서 관리할 수 있다.
SignalGroup의 가장 중요한 목적은 데이터 일관성 보장이다.
예를 들어 바퀴 속도 4개를 각각 읽는 도중 새로운 CAN 메시지가 들어오면
앞바퀴는 이전 값, 뒷바퀴는 새로운 값처럼 데이터가 섞일 수 있다.
그래서 AUTOSAR는 Shadow Buffer 기반으로 SignalGroup 데이터를 한 번에 업데이트한다.
실무에서는 차량 자세 제어, 조향, 휠 속도처럼 여러 데이터가 동시에 유효해야 하는 경우
SignalGroup Timeout을 많이 사용한다.
7. 실무에서 자주 발생하는 문제
실제 디버깅에서 가장 자주 보는 증상 중 하나는 아래와 같다.
메시지는 끊겼는데 값은 계속 정상처럼 보인다
이 경우 대부분 아래 항목을 확인하게 된다.
- ComTimeout 설정 여부
- Deadline Monitoring Enable 여부
- ComRxDataTimeoutAction 설정
- Init Value 설정
- Timeout Notification 연결 여부
특히 Timeout 발생 자체는 했지만 데이터가 마지막 값으로 유지되는 상황이 매우 자주 발생한다.
그래서 CAN 디버깅 시에는 단순히 '값이 보이는가'만 보는 것이 아니라,
'그 값이 실제 최신 데이터인가'를 반드시 함께 확인해야 한다.
정리
AUTOSAR Com Timeout은 단순 Timer 기능이 아니다.
실제로는 CAN 데이터 유효성 관리, 통신 이상 검출, Fail-safe 진입, DTC 처리, 차량 안전 상태 관리까지 연결되는 매우 중요한 기능이다.
특히 실무에서는 메시지는 끊겼는데 값은 살아있는 상황이 생각보다 자주 발생한다.
그래서 CAN 통신 디버깅을 할 때는 단순 수신 여부만 보는 것이 아니라
- Timeout 설정이 정상인지
- Timeout 이후 데이터가 어떻게 처리되는지
- Notification 함수가 실제 호출되는지
- 현재 데이터가 최신 데이터인지
까지 함께 확인하는 습관이 중요하다.
'mobilgene > CAN' 카테고리의 다른 글
| [CAN] AUTOSAR Rte_COMCbk 함수는 왜 필요한가 (SignalGroup Notification) (0) | 2026.04.29 |
|---|---|
| [CAN] AUTOSAR Com 구조 완전 이해 — ComSignalGroup 중심 실무 설정 방법 (0) | 2026.04.28 |
| [CAN] Mobilgene에서 CAN DB Import 하는 방법 (실무 가이드) (0) | 2026.04.28 |