RTE를 알아보기 전에, 위의 그림을 통해 개발 방법 첫번째 단계인 Configure System 단계에 대해서 상세히 알아보자
- Configure System Concept
(1) 애플리케이션 개발
- 서로 연결된 컴포넌트(SW-C)들의 집합을 통해 어플리케이션을 설계한다.
- 이 때, 제어기를 고려하지는 않는다.
(2) Virtual Functional Bus (VFB) Design
- 연결된 컴포넌트들이 교류하는 가상의 통신 구조(통로)를 의미한다.
- VFB 상에서 SWC를 설계한다. SWC간 Data이동은 Port와 Interface로 정의해서 디자인한다.
(3) 제어기 할당
- 제어기를 고려하여, 컴포넌트를 특정 제어기에 배치한다.
=> 가상의 컴포넌트 간의 연결이 실제 연결로 분류된다. 즉, 가상의 컴포넌트 간의 연결이, 제어기 내의 연결이라던가, (CAN, FlexRay 등 통신 수단을 통한) 제어기 간 연결이라던가 결정되게 된다.
(4) Run-Time Environment (RTE)
- 컴포넌트-컴포넌트 또는 컴포넌트-BSW(Basic Software)간 구체적인(실제) 인터페이스이다.
- VFB 수준에서 설계한 컴포넌트들 및 컴포넌트 간의 관계를 제어기 상에서 동작할 수 있도록 코드화한다.
=> RTE는 VFB를 코드 레벨로 구현한 것이라고 볼 수 있다.
- Configure System 개발 과정(= Software Component Description 작성 과정)
(1) VFB(Virtual Functional Bus) level
- 최상위 (가장 추상화된) 단계
- 컴포넌트 및 컴포넌트 간의 연결을 기술 (포트, 인터페이스)
- 컴포넌트의 통신 속성 및 서로의 관계를 표현
- 구성 요소 : Component / Composition / Port / Interface / Assembly / Delegation Connector
(2) RTE(Run-Time Environment) level
- 중간 단계
- 컴포넌트의 행동(Internal Behavior)을 기술
- Runnable, Event, Access Point
- 구성 요소 : Runnable / Event / Access Point
(3) Implementation level
- 최하위 단계
- Internal Behavior를 구현 (Runnable 코드 작성)
- 구성 요소 : Code
VFB(Virtual Functional Bus) level 구성요소
1. Component
- VFB 수준에서 시스템을 구성할 때 사용되는 중심 구성 요소
- 컴포넌트 간의 상호 작용을 위해 "Port"를 소유
- Port는 정확히 하나의 Component에 속하며, Component와 다른 Component 간의 상호 작용을 하는 지점
2. Component Type과 Component Prototype
- Component Type : Component의 속성을 정의(Ex : 특정 기능을 하는 포트를 소유) - 설계도
- Component ProtoType : Component-Type에 대한 인스턴스 (메모리 할당) - 인스턴스
- Component type의 종류[대표적인 것만]
Component - Type | Description |
Application Software Component | - 애블리케이션을 구성하는 소프트웨어 컴포넌트 - AUTOSAR의 모든 통신 방법과 서비스를 사용 가능하면서 ECU 하드웨어와 독립적 |
Composition Software Component | - SWC간의 집합을 캡슐화 하여, 내부는 숨기고 상위레벨의 작업 생성 - SWC를 모으는 역할과 연결하는 정보를 갖고 있음, 동작에 관련된 정보는 가지고 있지 않음. |
Sensor - Actuator Software Component | - 센서나 엑츄에이터를 제어하는 SWC - Application SWC와 ECU-Abstraction Layer(IO) 사이에서 통신 |
3. Composition
- 컴포지션은, 다른 컴포넌트를 포함하는 컴포넌트이다.
- 컴포넌트는 Composition 내에서 Component-prototype으로 존재한다.
- Component-type에 대한 Component-prototype, Port, Connector를 소유
- Composition도 Component-type이기 때문에 다른 Composition내에 Component-prototype으로 속할 수 있다.
- Root Composition에서 Root Composition Prototype으로 최종적으로 Prototype화
4. Port => Portprototype
- 컴포넌트 간의 상호 작용(통신)을 위한 지점
(1) P-Port (Provide)
- Interface에서 정의된 요소를 제공
(2) R-Port (Require)
- Interface에서 정의된 요소를 요청
5. Interface => Port Interface(Port Type)
- 기능 : Port가 제공하거나 요구하는 타입을 정의한다.
- 인터페이스의 종류[대표적인 것만]
Interface | 설명 |
Client-Server Interface | • 클라이언트는 서버에게 서비스 수행을 요청하는 것으로 통신을 시작한다. (필요한 경우 파라미터를 보낸다.) • 서버는 클라이언트로부터의 요청을 대기하다 요청된 서비스를 수행하고, 그 결과를 클라이언트에게 응답한다. •서비스를 개시하는 방향으로 SW-C가 클라이언트인지 서버인지 결정된다. |
Sender-Receiver Interface | • 컴포넌트 간 시그널(Data Element)의 송신과 수신으로 구성된다. • 단방향이다. • R-Port를 통해 데이터를 받고, P-Port를 통해 데이터를 보낸다. |
Mode Switch Interface | • 모드 간의 전환을 통해 Runnable을 시작한다. • Runnable의 시작 방법에 대해 특정 모드에서 Disable/Enable한다. • 모드 매니저는 모드 스위치를 통해 모드를 조정하며, 모드 유저는 해당 모드를 수신한다 |
Trigger Interface | • SW-C가 다른 SW-C의 실행을 작동시킨다. |
6. Assembly Connector 와 Delegation Connector
- 어셈블리 커넥터(Assembly Connector)
- 컴포넌트의 P-Port와 R-Port가 통신하기 위해 연결
- 일반적으로 Assembly Connector로 연결되는 두 Port는 같은 Interface 속성을 가진다.
- 딜리게이션 커넥터(Delegation Connector)
- Composition을 구성할 때 내부의 Port를 외부에서 사용하기 위해 연결
- P-Port는 P-Port와 R-Port는 R-Port와 연결
RTE(Run-Time Environment) level 구성요소
1. Runnable(= Runnable Entity)
- 컴포넌트의 실제 구현을 구성하는 가장 작은 단위
- Run-Time Environment(RTE)를 통해 시작되는 Intruction Sequence
- 하나의 컴포넌트에 여러 Runnable 포함 가능
- 간단한 알고리즘 이거나 복잡한 프로그램을 실행하는 코드 단위
- Runnable = 함수 = Operation
2. Event(= RTE Event)
- 실질적으로 함수 호출과 같다.
- Runnable은 RTE에 의해서 실행되며, Runnable이 특정 방식으로 실행될 수 있도록 Event를 지정한다.
- Event의 종류
Event
|
설명
|
Timing Event
|
Runnable를 정의된 간격으로 주기적으로 실행된다.
|
Background Event
|
백그라운드 동작을 반복적으로 수행한다.
주기적으로 실행되는 이벤트가 아니며, 가장 낮은 우선순위를 갖는다. |
Data Send Completed Event
|
특정 데이터가 송신이 완료 되었거나 에러 발생
|
Data Write Completed Event
|
Implicit 데이터에 대한 접근 완료 또는 에러 발생
|
Data Received Event
|
특정 데이터 수신 완료
|
Data Receive Error Event
|
네트워크에서 특정 데이터 수신에 에러 발생
|
Operation Invoked Event
|
클라이언트의 Operation 실행 요청을 서버에서 수신
|
Asynchronous Server Call Returns Event
|
Asynchronous Server Call의 완료
|
Swc Mode Switch Event
|
모드의 전환에 따른 Runnable의 실행
|
Mode Switched Ack Event
|
특정 모드를 수신하였거나 에러가 발생
|
External Trigger Occurred Event
|
특정 트리거의 발생
|
Internal Trigger Occurred Event
|
특정 내부 트리거의 발생
|
3. Access Point
- Runnable에서는 RTE가 제공하는 API를 사용하며, Runnable 내에서 사용하려는 API를 Access Point를 통해 지정한다.
- Access Point는 기능과 역할에 따라 다음과 같은 종류가 있다.
Access Point
|
API
|
Data Send Point
|
Rte_Write_<PPortPrototype>_<DataElement> (<data>)
Rte_Send_<PPortPrototype>_<DataElement> (<data>) |
Data Receive Point By Argument
|
Rte_Read_<RPortPrototype>_<DataElement> (<data>)
Rte_Receive_<RPortPrototype>_<DataElement> (<data>) |
Data Receive Point By Values
|
data = Rte_DRead_<RPortPrototype>_<DataElement> ()
|
Synchronous Server Call Point
|
Rte_Call_<RPortPrototype>_<Operation> (<data>…<data>)
|
Asynchronous Server Call Point
|
Rte_Call_<RPortPrototype>_<Operation> (<data>…<data>)
|
Asynchronous Server Call Result Point
|
Rte_Result_<RPortPrototype>_<Operation> (<data>…<data>)
|
Mode Switch Point
|
Rte_Switch_<PPortPrototype>_<ModeDeclarationGroup> (<mode>)
|
Mode Access Point
|
mode = Rte_Mode_<P/RPortPrototype>_<ModeDeclarationGroup> ()
|
Data Write Access
|
Rte_IWrite_<RunnableEntity>_<PPortPrototype>_<DataElement> (data)
|
Data Read Access
|
Rte_IRead_<RunnableEntity>_<PPortPrototype>_<DataElement> ()
|
Internal Triggering Point
|
Rte_IrTrigger_<RunnableEntity>_<InternalTriggeringPoint> ()
|
주요 Point
SRI, CSI
- Sender와 Client Interface에서 흐름이 시작되지만 (Event / Point) 서로 다른 P / R 포트이다.
P Port | R Port | |
Sender Receiver Interface => Data를 보내고 받음 |
Sender (행동의 주체) |
Receiver |
Client Server Interface => Opertation을 제공하거나 요청함 |
Server (서비스 제공) |
Client (행동의 주체) |
Type과 Prototype
- Prototype은 한 단계 더 큰 개념의 Type에 추가될 수 있다.
Type - 설계도 | Prototype - 실제(Instance) | |
Data | Data Type | Data Prototype |
Port | 구두로 부르는 이름 : Interface 원래 이름이여야 할 이름 : Port Type 공식적인 이름 : Port Interface |
구두로 부르는 이름 : Port 실제 이름 : Port Prototype |
SWC | SWC Type | SWC Prototype |
Component SWC | CSWC Type | CSWC Prototype |
Component SWC | CSWC Type | CSWC Prototype |
..... | ... | ... |