AUTOSAR RTE4 실습#
아래 그림은 RTE4 실습의 설계도 입니다.#
목차(실습 과정)#
- Project 생성
- VFB level
- RTE level
- C coding
- ECU Mapping
- ECU Extract
- ECU Configuration
- Generate & Build
1. Project 생성#
-
먼저 다음과 같은 순서로 사용할 base project를 import 합니다.\ File -> import -> General -> Existing Projects into Workspace -> Next
-
다음 사용할 base project를 선택하고 copy projects into workspace를 체크한 후 Finish를 눌러 완료합니다./ (Copy projects into workspace는 원본 project를 보존하기 위함)
2. VFB level#
- Configuration -> System -> Swcd_App로 들어가 우클릭을 합니다. \ 이후 New -> AUTOSAR File로 들어가 클릭합니다.\ Package name 및 Package name을 수정 후 Finish를 눌러 설정을 마무리 합니다.
- 생성한 AUTOSAR 파일로 들어가 화살표를 누릅니다.\ App_Rte 이름의 Package에서 우클릭 후 New -> Application Sw Component Type을 선택하려 SWC를 생성합니다.
-
생성한 SWC를 클릭하여 Short Name을 'SWC_SeatSwitch'로 설정하고 Support Multiple Instantiation을 false로 설정합니다.
-
위와 동일한 과정으로 SWC_SeatHeatingControl을 생성합니다.\ App_Rte[ARPackage] 우클릭 -> New -> Application Sw Component Type 클릭, Short Name을 'SWC_SeatHeatingControl'로, Supports Multiple Instantiation을 false로 설정합니다.
- 다음은 Sender Reciver Interface를 생성합니다.\ App_Rte[ARPackage]우클릭 -> New -> Sender Receiver Interface
-
생성한 Port Interface로 들어가 Short Name을 'If_SeatSwitch'로 설정하고 Is Service를 false로 설정합니다.
-
아래의 Data Elements에서 New 를 눌러 생성해줍니다. Short Name을 PassengerDetected로 설정하고 Type 아래의 ...박스를 누르고 boolean[/AUTOSAR...]을 선택하여 Data Type을 설정합니다.\ (Interface에서 주고 받을 Data에 대한 설정)
- 위와 비슷한 방법으로 Client Server Interface를 생성합니다.\ App_Rte(ARPackage)우클릭 -> New -> Client Server Interface
-
생성한 Port Interface로 들어가 Short Name을 'If_SeatHeatingControl'로 설정하고 Is Service를 false로 설정합니다.
-
아래의 Operations에서 New 를 눌러 생성해줍니다. Short Name을 Heating On으로 설정합니다.\ 그리고 다음과 같이 매개변수를 추가해줍니다. Argument+ -> uint32[/AUTOSAR...]\ 이후 Direction을 In으로 설정하여 완료합니다.\ (Direction에 따하 매개변수를 넘기는 방법이 달라짐, In : CallByValue, Out : CallByReference)
- 이제 생성한 Interface로 P_SeatSwitch Port를 생성합니다.\ 앞에서 생성한 SWC_SeatSwitch로 들어가 하단의 Port를 클릭합니다. 이후 Ports 우측의 + 선택, Sender Receiver Interface -> Sender -> If_SeatSwitch -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 P_SeatSwitch로 변경하고 아래의 Communication Spec에서 Data Elements를 PassengerDetected로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하고 설정을 완료합니다.
- 비슷한 방법으로 P_HeatingControl port를 생성합니다.\ Ports 우측의 + 선택, Client Server Interface -> Server -> If_SeatHeatingControl -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 P_HeatingControl로 변경하고 아래의 Communication Spec에서 Operations를 HeatingOn으로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하여 설정을 완료합니다.\ 이후 아래의 Queue Lenth를 1로 설정하여 마무리합니다.\ (여러 Client가 요청을 할 때, 동시에 들어오는 요청을 몇 개까지 큐로 생성할지 설정)
- 위와 비슷하게 R_IO Port를 추가합니다.\ Ports 우측의 + 선택, Client Server Interface -> Client -> IoHwAb_If_DigDir -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 R_IO로 변경하고 아래의 Communication Spec에서 Operations를 ReadDirect로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하여 설정을 완료합니다.
- 마지막으로 R_HeatingElement Port를 추가합니다.\ Ports 우측의 + 선택, Client Server Interface -> Client -> IoHwAb_If_DigDir -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 R_HeatingElement로 변경하고 아래의 Communication Spec에서 Operations를 WriteDirect로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하여 설정을 완료합니다.
- 다음은 SWC_SeatHeatingControl로 들어가 Port를 생성해줍니다.\ Ports 우측의 + 선택, Send Receiver Interface -> Receiver -> If_SeatSwitch -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 R_SeatSwitch로 변경하고 아래의 Communication Spec에서 Data Elements를 PassengerDetected로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하고 Init Value를 Numerical Value Specification, Value를 0으로 설정하여 설정을 완료합니다.
- R_HeatingControl Port를 생성해줍니다.\ Ports 우측의 + 선택, Client Server Interface -> Client -> If_SeatHeatingControl -> Ok를 눌러 완료합니다.
- 생성한 Port에 Short Name을 R_HeatingControl로 변경하고 아래의 Communication Spec에서 Operations를 HeatingOn으로 선택합니다. 그리고 아래의 Enable Provided Com Specs를 체크하여 설정을 완료합니다.
- 이제 위의 SWC를 묶어서 관리하기 위해 CSWC를 추가해줍니다.\ App_Rte[ARPackage] 우클릭 -> New -> Composition Sw Component Type 클릭, Short Name을 CSWC_SeatHeatingSystem로 설정합니다.
- 아래의 Components and Ports를 선택하고 상단의 Components 우측의 + 선택, 이전에 생성한 SWC_SeatSwitch와 SWC_SeatHeatingControl체크 후 Ok를 눌러 완료합니다.
- 다음 하단의 Automatic Connection을 선택하고 각각의 포트들이 올바르게 연결 되었는지 확인한 후 Ok를 눌러 설정을 완료합니다.
3. Rte level#
-
다시 SWC로 돌아가 Runnable을 설정해줍니다.\ SWC_SeatSwitch에서 하단의 Runnables 선택, 상단 Runnables 우측 + 를 클릭합니다.
-
Short Name을 'RE_SeatSwitch'로, Symbol을 SeatSwitch_func로 설정합니다. 이후 Can Be Invoked Concurrently를 false로 설정합니다.\ 이어서 Runnable 3번에 대한 설정입니다.
- RTE Event -> Add -> Timing Event 순서로 클릭하여 Event를 생성합니다.\ 생성된 Timing Event 더블클릭 -> 주기를 100msec로 설정한 후 Ok를 눌러 완료합니다.
- Operation/Mode/Trigger Access에서 Add -> Synchronuous Server Call Points(SSCP) -> R_IO.ReadDirect를 선택하여 완료합니다.
- Data/Parameter Access -> Add -> Data Sent Points(DSP) -> P_SeatSwitch.PassengerDetected를 선택하여 완료합니다.
-
이제 RE_HeatingControl Runnable을 추가해줍니다.\ SWC_SeatSwitch에서 하단의 Runnables 선택, 상단 Runnables 우측 + 를 클릭합니다.
-
Short Name을 'RE_HeatingControl'로, Symbol을 HeatingControl_func로 설정합니다. 이후 Can Be Invoked Concurrently를 false로 설정합니다.
- Runnable에 대한 세부설정 입니다.\ RTE Event -> Add -> Operation Invoked Event -> P_HeatingControl.HeatingOn 순서로 클릭하여 Event를 생성합니다.
- Operation/Mode/Trigger Access -> Add -> Synchronous Server Call Points(SSCP) -> R_HeatingElement.WriteDirect를 선택하여 완료합니다.
-
이번에는 SWC_SeatHeatingControl로 이동하여 Runnable을 설정해줍니다.\ SWC_SeatHeatingControl에서 하단의 Runnables 선택, 상단 Runnables 우측 + 를 클릭합니다.
-
Short Name을 'RE_SeatHeatingControl'로, Symbol을 SeatHeatingControl_func로 설정합니다. 이후 Can Be Invoked Concurrently를 false로 설정합니다.
- Runnable에 대한 세부설정 입니다.\ RTE Event -> Add -> Data Received Event -> R_SeatSwitch.PassengerDetected 순서로 클릭하여 Event를 생성합니다.\
- Operation/Mode/Trigger Access -> Add -> Synchronous Server Call Points(SSCP) -> R_HeatingElement.HeatingOn을 선택하여 완료합니다.
- Data/Parameter Access -> Add -> Data Received Points By Arguments(DRPBA) -> P_SeatSwitch.PassengerDetected을 선택하여 완료합니다.
4. C Coding#
-
이제 SWC 동작을 c 언어로 coding 합니다.\ 왼쪽의 Static_Code -> Reference_Code 우클릭 -> New -> File(AUTOSAR File X)-> File name 설정(SWC와 같은 이름 사용), 동일한 방법으로 File 두 개 생성합니다.
-
이후 아래 그림과 같이 작성해줍니다.
5. ECU Mapping#
- 이전에 생성한 CSWC를 RootComposition에 넣는 과정입니다.\ 왼쪽 Configuration -> System -> Composition -> RootComposition.arxml-> CSWC_RootComposition 더블클릭 순서로 진행하고, 하단의 Components and Ports를 선택합니다.
- 이어서 위쪽 Components 에서 + 선택 후 CSWC_SeatHeatingSystem을 선택해줍니다.
6. ECU Extract#
- 상단의 Auto-Wiz -> System Configuration & ECU Extract -> ECU Software Components Mapping 순서로 선택합니다.
- 우측 하단의 Ok를 누른 후 추가하고자 하는 SWC와 Connector가 적용되는지 확인한 후 Apply를 누릅니다.
7. ECU Configuration#
- 다시 상단의 좌측의 초록색 네모(Configure ECU and Generate Code) -> Generate ECU Configuration 순서로 선택합니다.
- Next -> Service -> Rte 체크 -> Next -> Rte: Generate SwcInstance Configuration 체크 -> Finish
- 이어서 Task Mapping 진행을 위해 상단의 초록색 네모 아이콘을 선택 -> 이어서 창에 Rte를 클릭합니다.
- 하단의 Task Mapping을 클릭하고 이어진 창에서 SWC Instance -> SwcInstance_SWC_SeatSwitch를 선택합니다.
-
해당 SWC의 Event를 Task에 Mapping 해줍니다.\ 아래의 창을 클릭하여 OsTask_ASW_FG1_100ms을 선택해준 후 위의 TE_RE_SeatSwitch -> Add 순서로 클릭하여 추가해줍니다.
-
위와 비슷한 방법으로 SwcInstance_SWC_SeatHeatingControl를 선택합니다.
-
아래의 창을 클릭하여 OsTask_BSW_FG3_ComMModeRequest(비주기 Task)를 선택해준 후 위의 DRE_RE_SeatHeatingControl... -> Add 순서로 클릭하여 추가해줍니다.
-
I/O Mapping을 위해 다시 상단의 초록색 네모를 클릭 후 하단의 Service and I/O를 선택해줍니다.
-
아래의 항목중 Svc_IoHwAb에 화살표 클릭, 아래에서 SW06을 선택한 후 상단의 Automatic Connection 우측에 초록색 화살표를 클릭합니다.
- Respect Naming Rule 체크 해제 후 R_IO를 선택하여 설정을 완료합니다.
- 똑같이 Switch도 설정해줍니다. LED_Red를 선택한 후 우측 상단의 초록색 + 클릭, Respect Naming Rule 체크 해제 후 R_HeatingElement를 선택하여 설정을 완료합니다.
### 8. Generate & Build
- 이후 왼쪽 Build -> Scons.arxml -> SCons 더블클릭 후 하단의 All Contents -> RTSW -> Generation -> Module -> Rte 를 선택합니다.
- 오른쪽 창에서 Input Files List 우측의 Add를 클릭한 후 Value 아래에 'App_Rte'(이전에 생성한 AUTOSAR file이름) 입력 후 Add를 눌러 설정을 완료합니다.
- 죄측 상단 망치의 화살표를 누르고 Clean Build를 통해 Build 결과를 확인합니다.