얼결에 AUTOSAR Platform을 공부해야 하는 상황이 생겼습니다. 늘 가져다 사용만 해왔는데, 이번은 이해를 해야 어느 정도 활용이 가능 할 것으로 생각되어 공부한 내용을 정리하고자 합니다.
Composition Component란?
생소한 개념입니다. 자동차 엔지니어들은 대부분 ASW component 만 고민을 해왔을 거라 생각됩니다. 우선 ASW의 정의와 Composition component의 정의를 통해 각 차이점을 확인 해 보겠스빈다.
- Application Software Component (SWC) : 실제 기능을 수행하는 소프트웨어 단위. 예: BrakeController, SpeedSensor 등
- Composition Component : 여러 SWC들을 묶어서 하나의 상위 컴포넌트처럼 다루는 구조. 이 안에는 SWC뿐 아니라 다른 Composition이 포함될 수도 있음 (Nested Composition 가능)
개인적으로 정리하면 하나의 기능을 내기 위한 컴포넌트의 논리 추상화 집합체라고 생각됩니다. 예를 들어 모터 제어 composition component라면, 구성 component로 필요한 전류 제어기, 속도 제어기, 센서 신호처리(위치, 전류, 전압)들을 묶어서 하나의 composition component로 만들지 않을까 싶습니다. 추가적으로 아래의 그림의 예를 들면 크루즈 컨트롤이 하나의 컴포지션 컴포넌트 레이어가 되고, 구성 요소인 시그날 프로세싱 컴포넌트, 제동 제어 컴포넌트, 스로틀 컨틀롤 컴포넌트로 구성된다고 보면 좋을 듯 싶습니다.
Composition Component의 목적
결국 핵심은 재 사용성과 확장 전개를 위한 편의성 아닐까 싶습니다. 아직 오토사 초보이기 때문에 틀릴 수 있습니다.
- 계층적 설계 지원 : 복잡한 기능을 작은 단위로 나누고, 이들을 다시 하나의 컴포지션으로 묶어 구조화 가능
- 재사용성 향상 : 한 번 정의된 Composition은 다른 프로젝트나 ECU에서 재사용 가능
- 인터페이스 명확화 : 외부와의 통신은 Composition Level에서 정의된 포트만 사용 → 모듈 간 결합도 낮춤
- 기능 분할 : 시스템 기능을 논리적으로 나누어 설계하고 유지보수를 쉽게 만듦
여기서 또 특이한 포인트가 하나 더 있습니다. 이전에는 RTE에서 나온 포트들을 component별로 모두 전달 하고 연결해 줬으나, 입력과 출력에 대해서 Composition component에만 정의가 되고, 나머지는 내부 포트로 연결을 하는 형태입니다. 직접 해보시면 알겠지만, 예를 들어 모터 제어에서 토크 신호를 전달 할 때 토크 제어기, 토크 신호처리기, 토크 지령 생성기 등에 모두 직접 연겨을 해야 하는데 그런 수고 없이 맨 위 상단의 Composition component에만 연결을 하고 나머지는 내부 포트로 연결하면 된다는 뜻입니다.
적용사례
실제 적용을 해보면 다음과 같습니다.
Composition Component: CruiseControlSystem
├── SWC: SpeedSensor
├── SWC: BrakeControl
├── SWC: ThrottleControl
실제 ARXML 생성된 파일을 확인해 보면 더욱 쉽게 이햐기 갑니다. 외부 통신과 하는 포트에 대해서 composition component에서 관리를 하고, 들어온 신호에 대해서 내부 포트로 한 번 더 연결해 주는 형태입니다. 생각 보다 처음에는 귀찮을 수 있지만, 유사 시스템 확장 시에는 내부 component만 잘 정리 해주면 손쉽게 확장이 될 것으로 생각됩니다. 이전 처럼 내부 component를 직접 연결하다 겪는 human error 도 최소화 될 것으로 생각 됩니다.
<AUTOSAR>
<AR-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>ExamplePkg</SHORT-NAME>
<ELEMENTS>
<!-- Composition Component 정의 -->
<COMPOSITION-SW-COMPONENT-TYPE>
<SHORT-NAME>CruiseControlSystem</SHORT-NAME>
<PORTS>
<!-- 외부와 통신하는 포트 정의 -->
<P-PORT-PROTOTYPE>
<SHORT-NAME>VehicleSpeedOutput</SHORT-NAME>
<REQUIRED-INTERFACE-TREF DEST="SOME-INTERFACE">SpeedInterface</REQUIRED-INTERFACE-TREF>
</P-PORT-PROTOTYPE>
</PORTS>
<INTERNAL-BEHAVIOR>
<!-- 내부 SWC 인스턴스들 정의 -->
<COMPONENTS>
<SWC-IMPLEMENTATION>
<SHORT-NAME>SpeedSensor</SHORT-NAME>
</SWC-IMPLEMENTATION>
<SWC-IMPLEMENTATION>
<SHORT-NAME>BrakeControl</SHORT-NAME>
</SWC-IMPLEMENTATION>
</COMPONENTS>
<!-- 내부 연결 정의 (Connector) -->
<CONNECTORS>
<ASSEMBLY-CONNECTOR>
<SHORT-NAME>SpeedToBrake</SHORT-NAME>
<PROVIDER-IREF>
<CONTEXT-COMPONENT-REF DEST="APPLICATION-SW-COMPONENT-TYPE">SpeedSensor</CONTEXT-COMPONENT-REF>
<TARGET-P-PORT-REF DEST="P-PORT-PROTOTYPE">SpeedOut</TARGET-P-PORT-REF>
</PROVIDER-IREF>
<REQUIRER-IREF>
<CONTEXT-COMPONENT-REF DEST="APPLICATION-SW-COMPONENT-TYPE">BrakeControl</CONTEXT-COMPONENT-REF>
<TARGET-R-PORT-REF DEST="R-PORT-PROTOTYPE">SpeedIn</TARGET-R-PORT-REF>
</REQUIRER-IREF>
</ASSEMBLY-CONNECTOR>
</CONNECTORS>
</INTERNAL-BEHAVIOR>
</COMPOSITION-SW-COMPONENT-TYPE>
</ELEMENTS>
</AR-PACKAGE>
</AR-PACKAGES>
</AUTOSAR>
마무리
팔자에도 없는 AUTOSAR를 스터디 하게 되었습니다. 약간은 OPP 같기도 하고, 아닌 것 같기도 하지만, 결국 목적은 재활용성과 관리 목적이 큰 듯 싶습니다.