AUTOSAR

AUTOSAR Port(2) - Sender Receiver Inferface

기록해연 2025. 7. 10. 17:11

 

Sender Receiver Inferface

Data Element : Sender Receiver 포트를 통해 주고받는 정보를 데이터.

Data Element와 별개로 Port Interface를 하나 설계했으면 해당 Port Interface의 이름도 별도로 지정해야 함.

 

포트 인터페이스 만드는 단계에서는 어떤 정보를 주고받을 지에 대한 설계, 

 

P Port (Provide Port) : 데이터를 보내는 쪽의 Port Prototype

R Port (Require Port) : 데이터를 받는 쪽의 Port Prototype

 

※ P포트용 인터페이스, R포트용 인터페이스가 따로 있는게 아니고, 동일한 포트 인터페이스를 사용해서 소프트웨어 컴포넌트에 포트를 추가하는데 그 포트가 연결되는 소프트웨어 컴포넌트의 역할에 따라 P포트, R포트라고 지정해서 Port Prototype을 만드는 것.

 

Sender(P Port) → Receiver(R Port)는 1:N 연결 가능(N:1은 불가능)

 

포트와 포트를 연결하는 작업은 SWC Type상태에서 X.

컴포지션의 SWC를 Prototype으로 만들어놓고 컴포지션 상에서 연결.


 

Sender Receiver Inferface 설계 과정

1. 포트 설계
S/R 포트 인터페이스를 만들고 이름을 지정.

 - 해당 포트로 주고받을 데이터 엘리먼트 설계.

 - 엘리먼트의 이름을 정하고, 데이터 타입을 정함.

BeltStatePort 
- Belt_State : uint32
  • BeltStatePort → 포트 인터페이스 이름
  • Belt_State →  엘리먼트 이름
  • uint32 → 데이터 타입

2. SWC에 포트 추가

  • 포트 인터페이스를 사용하여 SWC에 Port Prototype 생성.
    (Sender SWC에는 P Port, Receiver SWC에는 R Port 생성)

3. 컴포지션 상에서 P port 와 R Port를 연결.

4. Runnable 추가

  • 툴의 Code Generation 기능을 이용하여 실제 C코드 구현

5. 컴포넌트에 정의된 Runnable마다 해당 Runnable이 실제로 포트를 통해 정보를 주고 받을지(Variable Access) 세팅.

  • 해당 세팅을 해줘야 실제 정보를 주고받기 위한 RTE API Code를 툴이 생성해줌.
  • SWC에 포트를 추가하고 컴포지션 상의 포트연결까지 했더라도 Variable Access가 세팅되어 있지 않다면, 이 포트를 사용하는 Runnable 이 없다고 판단해 RTE API Code를 생성하지 않음.
  • 세팅방법
    툴을 사용하여 각 Runnable 별로 사용하려는 Port의 데이터 엘리먼트에 대한 Variable Access를 이 Runnable에 세팅.(정확히는 포트별로 세팅하는게 아니라 데이터 엘리먼트 별로 세팅)
    • [Explicit] Variable Access를 Sender에서는 Data Send Point, Recei ver에서는 Data Receive Point 라고 지칭.
    • [Implicit] Variable Access를 Sender에서는 Data Write Access, Recei ver에서는 Data Read Access 라고 지칭.

※ 설계한 결과물은 모두 arxml형태.

 


사용방식: Explicit 방식 VS Implicit 방식

21강 교육자료 참조

파일명: 04_03_Port - Sender Receiver Port - 보충( Implicit & Explicit)_워터마크.pdf

 

Explicit 방식

SWC간에 주고 받을 데이터가 RTE변수로 선언되고 RTE Write API 호출시 곧바로 RTE 변수값이 업데이트, RTE Read API 호출시 현재RTE 변수에 쓰여있는 값(최신값)을 읽어가는 방식.

// 네이밍
Rte_Write_BeltState_Belt_State(1); // Explicit Write 
//Rte_Write_포트프로토타입명_데이터엘리먼트명

Rte_Read_BeltState_Belt_State($read_data); // Explicit Read
//Rte_Read_포트프로토타입명_데이터엘리먼트명

Implicit 방식

(OS Task 스케줄 정책에 의해 특정 러너블 실행 도중, 다른 러너블이 중간에 먼저 실행되는 경우) 여러 데이터를 주고 받을 때, 데이터들의 일관성을 보장 받기 위해 사용.

 

정보를 주고 받기 위한 RTE 변수 외에 추가로 버퍼 하나 더 추가.

#include "Rte_Type.h"

unit3 Rte_OutBuffer; // Implicit Write를 위한 버퍼

unit3 Rte_SeatBeltState_Data; // RTE변수. 러너블 종료 후 버퍼값 반영

unit3 Rte_InBuffer; // Implicit Read를 위한 버퍼

Implicit Write

RTE API 호출시 Write 요청값이 버퍼에 담겨있다가 러너블이 종료된 후 RTE데이터에 반영.

// 네이밍
Rte_IWrite_Seatbelt_MainFunction_BeltState_data(1); // Implicit Write
// Rte_IWrite_러너블명_포트프로토타입명_데이터엘리먼트명

Rte_IRead_Cluster_MainFunction_BeltState_data(&read_data);
// Rte_IRead_러너블명_포트프로토타입명_데이터엘리먼트명

Implicit Read

RTE API를 호출하는 러너블이 실행되기 직전에 RTE 변수에 담겨있는 값을 버퍼로 옮겨놓고, 러너블 내부에서 RTE API를 호출했을 때 RTE 변수에 쓰여있는 최신값 대신 미리 옮겨둔 버퍼 값을 읽어감.

'AUTOSAR' 카테고리의 다른 글

AUTOSAR Basic Software(BSW) 모듈  (1) 2025.07.15
AUTOSAR Port(3) - Client Server Inferface  (0) 2025.07.14
AUTOSAR Port(1)  (0) 2025.07.10
AUTOSAR Software Architeture  (2) 2025.07.10
CAN통신, LIN통신, DBC, LDF  (4) 2025.07.09