Automotive Software

오토사 캔(CAN) - 통신 개시를 위한 모드 변경하기 본문

클래식 오토사 (Classic AUTOSAR)/CAN Communication

오토사 캔(CAN) - 통신 개시를 위한 모드 변경하기

AutoSW 2021. 3. 31. 18:19

사실 캔 통신을 위하여 오토사 스택의 일부분(드라이버, 인터페이스)만 사용하는 경우라면 상위 계층에서의 모드 관리가 필수적이진 않으나, 대부분의 경우 매니저 모듈들을 포함하는 오토사 전체 스택을 사용하는 경우가 많으므로 소프트웨어 컴포넌트(SWC)에 사용할 수 있는 서비스들과 베이직 소프트웨어(BSW)에서 고려될만한 최소의 설정을 소개하고자 한다.

상기 그림에서 나타낸바와 같이 캔 통신 개시를 위해 소프트웨어 컴포넌트에서 사용하는 서비스는 ComM에서 제공하는 아래의 두 함수이다.

void ComM_CommunicationAllowed( NetworkHandleType Channel, boolean Allowed );
Std_ReturnType ComM_RequestComMode( ComM_UserHandleType User, ComM_ModeType ComMode );

그림에 나타낸 EcuM 과 BswM은 제어기 상태(모드) 천이에 따른 하위 모듈 및 서비스 제어를 위해 필요한 모듈이며, Com 서비스를 사용코자 한다면 그림에 나타낸 바와 같이 BswM을 통해 필요 기능을 제어할 수 있다.

상기 예제 그림을 토대로 캔 통신 개시 절차를 설명해보면,

우선 통신 허가를 요청해야 하는데 이는 ComM에게 해당 채널의 사용을 알리는 것으로 향후 ComM에서 발생되는 상태천이와 그 상태를 다른 모듈(BswM, CanSM 등)에게 알릴 수 있도록 허용하게 된다. 그 방법은 간단히 런어블(Runnable)에서 ComM_CommunicationAllowed()를 호출하는 방법도 있겠으나, 상기 그림의 파란색 화살표로 나타낸 바와 같이 BswM상에 하나의 룰(Rule)을 만들고 그 룰에서 동작하는 액션 리스트(Action List)에서 ComM_CommunicationAllowed(채널번호, TRUE)가 호출되도록 설정하는 것이 오토사 설계 개념에 맞는 방식이 되겠다. 일반적으로 제어기 초기화 시 EcuM의 구동 상태 천이를 위해 하나의 런어블에 의해 EcuM_RequestRUN()이 호출되는데 이 상태 천이는 BswM에게 보고 되고 이 상태 천이를 기반으로 하는 룰들이 평가가 이루어지게 된다. 이때 평가되는 하나의 룰과 액션 리스트로써 ComM_CommunicationAllowed()를 호출하도록 설계할 수 있다.

통신 허가 요청 후 통신 개시를 요청해야 하는데 이는 런어블(Runnable)에서 ComM_RequestComMode(채널번호, COMM_FULL_COMMUNICATION)을 호출함으로써 이루어진다. 상기 그림의 빨간색 화살표로 나타낸 바와 같이 통신에 필요한 하위 모듈의 제어는 CanSM을 통해 모두 이루어지게 되므로 사용자(런어블)는 추가적인 함수 호출(서비스 사용)이 필요 없다. Com을 사용하는 경우 요청 채널을 통해 송수신될 IPduGroup를 활성화해 주어야 하므로 이를 제어해야 할 필요가 있는데, 이 역시 BswM상에 하나의 룰을 설계하고 그 액션 리스트로서 구현할 수가 있다. CanSM은 통신 개시를 위한 하위 모듈들의 상태 변경 완료 시 BswM에 그 상태를 보고하게 되는데, 이 상태 천이를 기반으로 하는 룰의 액션 리스트로 Com의 IPduGroup 관련 필요 함수를 호출하면 된다. 예제는 오토사 버전 4.2를 기반으로 필요한 함수를 나타내었다.

요약하면, 통신개시를 위한 모드천이를 위해 런어블에서는 단지 ComM의 두 함수만 기억하면 된다. 해당 함수의 호출 방식은 제어기 요구사항에 따라 직접 호출하거나 BswM상의 룰(상응하는 액션 리스트)을 통해 호출하도록 설계할 수 있다.