서비스 인스턴스 매핑
이 장에서 할 일
이 장에서는 컴포지션 HPC 안의 Sensor, Fusion, Actuator 를 차례로 더블클릭해 AA Internal Behavior 다이얼로그를 열고, 캔버스의 본체를 우클릭해 Add Instance › ara::com › Service Instance 로 매핑 박스를 만든다. 그 다음 오른쪽 SERVICE INSTANCE MAPPING 패널에서 PORT 와 SERVICE INSTANCE 를 고른다. Sensor 의 P 포트는 제공자 인스턴스 Provider_Sensor 에, Fusion 과 Actuator 의 R 포트는 소비자 인스턴스 Fusion_Sensor 와 Actuator_Sensor 에 매핑한다. 소비자 둘에는 CLIENT ID 로 2 와 1 을 입력한다. Sensor 를 절차로 보이고, Fusion 은 CLIENT ID 가 더해지는 부분만 보이며, Actuator 는 표로 반복한다.
이 장을 마치면 Sensor.swc.io.model, Fusion.swc.io.model, Actuator.swc.io.model 에 service-instance-mappings 가 하나씩 저장된다. 이것이 ARXML 익스포트에서 참조 설계의 SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING 세 개 Sensor_AA_Sensor, Fusion_AA_Sensor, Actuator_AA_Sensor 가 된다.
시작하기 전에
- Executable 과 Process를 마친 상태에서 시작한다.
design/SWC/AdaptiveApplication/의 다섯 파일에는ports,executable,process가 있고service-instance-mappings는 아직 없다. - SOME/IP 배포와 서비스 인스턴스에서 만든 서비스 인스턴스
Provider_Sensor(제공자, Instance ID1),Fusion_Sensor,Actuator_Sensor(소비자, Required Instance IDANY) 가SERVICE.io.model에 있다. 셋 다 서비스Sensor의 인스턴스이다. - 커넥터에 서비스 인스턴스 바인딩에서 세 인스턴스를 커넥터
eth0의 UDP 포트20003,20002,20001에 바인딩했다. 이 장의 되읽기 블록에 그 엔드포인트가 그대로 나온다. - VALIDATION 패널은
No validation issues.이다. - 매핑은 포트가 있는
Sensor,Fusion,Actuator셋에만 한다.CM과EM은 포트가 없으므로 이 장에서 열지 않는다.
이 장에서 키보드로 입력하는 값은 CLIENT ID 두 번(2, 1)뿐이다. 나머지는 우클릭, 마우스 올림, 클릭, 드롭다운 선택, Ctrl+S, Close 이다. 매핑 박스의 이름과 저장 이름은 제품이 짓고, 독자는 짓지 않는다.
Sensor | Fusion | Actuator | |
|---|---|---|---|
| PORT | Sensor (P) | Sensor (R) | Sensor (R) |
| SERVICE INSTANCE | Provider_Sensor (SOME/IP) | Fusion_Sensor (SOME/IP) | Actuator_Sensor (SOME/IP) |
| CLIENT ID | 칸 없음 | 2 → 0x2 | 1 → 0x1 |
| 매핑 박스 / INSTANCE SPECIFIER | Sensor/AA/Sensor | Fusion/AA/Sensor | Actuator/AA/Sensor |
| PROCESS (자동) | Sensor | Fusion | Actuator |
| 되읽기 SERVICE ID / VERSION | 0x000B / 1.0 | 같음 | 같음 |
| 되읽기 INSTANCE ID | 0x0001 | 0xFFFF | 0xFFFF |
| 되읽기 ENDPOINT | 127.0.0.1:20003 | 127.0.0.1:20002 | 127.0.0.1:20001 |
| 저장 이름 (자동) | Sensor_AA_Sensor | Fusion_AA_Sensor | Actuator_AA_Sensor |
세 Adaptive Application 은 서로 독립이어서 어느 순서로 해도 된다. 이 장은 제공자 Sensor 를 먼저, 소비자 Fusion, Actuator 를 뒤에 둔다.
Sensor 의 포트를 Provider_Sensor 에 매핑하기
AA Internal Behavior 다이얼로그 열기
-
왼쪽 EDITOR 뷰의 DESIGN 아래에서 VFB 를 클릭한다. 탭
AADesign:VFB가 열리고 루트 캔버스에 컴포지션 노드HPC [Ecu]가 보인다. 노드HPC [Ecu]를 더블클릭한다. 빵부스러기가System > HPC로 바뀌고 프레임HPC안에 8장에서 만든 노드 다섯 개와 커넥터 두 개가 보인다.
그림 10-1. 컴포지션
HPC안으로 들어간 VFB 편집기. ① 먼저 더블클릭할 노드Sensor, ② 노드Fusion, ③ 노드Actuator. 이 셋에만 포트가 있고Sensor의P에서 두R로 커넥터가 이어져 있다.CM과EM은 이 장에서 열지 않는다. 노드 배치는 8장에서 Auto Layout 을 누른 결과에 따라 그림과 다를 수 있으며 설계 값에는 영향이 없다. -
노드
Sensor를 더블클릭한다. 다이얼로그 AA Internal Behavior [Sensor] 가 열린다. 왼쪽 캔버스에Sensor본체와 경계의P포트Sensor가 있고 매핑 박스는 아직 없다. 오른쪽 패널은 PROPERTIES 탭이 열려 NAMESensor, AS PROTOTYPESensor, DESCRIPTION-, PORTS 행PSensorSensor를 보여 준다.![매핑 전의 AA Internal Behavior [Sensor] 다이얼로그](/docs/ko/assets/images/10-02-sensor-dialog-before-mapping-18b59d00c6a5c22f464f444a12ce8ab8.png)
그림 10-2. 막 열린 다이얼로그. ① 제목 AA Internal Behavior [Sensor], ② 캔버스의
Sensor본체, ③ 오른쪽 경계의P포트 라벨Sensor. 본체 안에는 아직 아무 박스도 없다.
Add Instance 메뉴로 매핑 박스 만들기
-
캔버스의
Sensor본체 빈 곳을 마우스 오른쪽 버튼으로 클릭한다. 메뉴에 Add Port 와 Add Instance 두 항목이 보인다. -
Add Instance 에 마우스를 올린다. 서브메뉴에 기능 클러스터가 ara::com, ara::log, ara::sm, ara::phm, ara::nm, ara::tsync, ara::crypto, ara::idsm, ara::diag, ara::per, ara::rds 순서로 열한 개 보인다.
-
ara::com 에 마우스를 올린다. 서브메뉴 항목은 Service Instance 하나이다.

그림 10-3. 세 단계 메뉴가 한 화면에 보인다. ① Add Instance, ② 클러스터 ara::com, ③ Service Instance. Add Instance 아래에 ara::com 부터 ara::rds 까지 열한 클러스터가 있다.
-
Service Instance 를 클릭한다. 본체 안에 매핑 박스
Sensor/AA/가 생겨 선택된 상태가 되고, 제목에 수정됨 표시가 붙어● AA Internal Behavior [Sensor]가 된다. 오른쪽 패널이 SERVICE INSTANCE MAPPING 으로 바뀐다. 필드는 INSTANCE SPECIFIERSensor/AA/(읽기 전용), PROCESSSensor(읽기 전용), PORT(비어 있음), SERVICE INSTANCE(비어 있음) 넷이고, 아래에 안내Select a port and service instance to view details가 있다. PORT 와 SERVICE INSTANCE 는 필수 입력란이라, 비어 있는 동안 라벨과 밑줄이 빨갛고 그 아래에 메시지Port is required,Service Instance is required가 보인다.
참고. Add Instance 의 다른 클러스터는 그 기능 클러스터의 매핑 박스를 만드는 항목이다. 이 튜토리얼은 ara::com 만 쓴다. 메뉴에는 머신에 무엇이 있든 열한 클러스터가 늘 모두 나온다.
참고. INSTANCE SPECIFIER 는
<Executable 이름>/<ROOT SWC PROTOTYPE>/<포트>이다. 9장에서 EXECUTABLE 의 NAME 을Sensor, ROOT SWC PROTOTYPE 을 기본값AA로 두었으므로Sensor/AA/로 시작하고, 포트를 고르면 마지막 자리가 채워진다. PROCESS 는 9장에서 만든 프로세스가 하나뿐이라 자동으로Sensor가 들어가며 바꿀 수 없다.
PORT 고르기
-
PORT 칸을 클릭한다. 드롭다운에 이 Adaptive Application 의 포트
Sensor하나가 보인다.
그림 10-4. 매핑 박스를 만든 직후. ① 본체 안의 매핑 박스
Sensor/AA/, ② 패널 제목 SERVICE INSTANCE MAPPING, ③ PORT 칸, ④ 드롭다운 항목Sensor. INSTANCE SPECIFIER 는Sensor/AA/, PROCESS 는Sensor이고 SERVICE INSTANCE 는 비어 있다. PORT 와 SERVICE INSTANCE 의 라벨이 빨갛고, 열린 목록 오른쪽에 메시지Service Instance is required가 보인다. -
Sensor를 클릭한다. 매핑 박스가Sensor/AA/Sensor로, INSTANCE SPECIFIER 가Sensor/AA/Sensor로 바뀌고, 박스에서P포트로 점선 화살표가 이어진다. PORT 의 빨간 표시는 사라지고, SERVICE INSTANCE 는 인스턴스를 고를 때까지Service Instance is required와 함께 빨간 채로 남는다.
주의. PORT 를 먼저 고르고 SERVICE INSTANCE 를 나중에 고른다. SERVICE INSTANCE 드롭다운은 고른 포트의 방향과 인터페이스에 맞는 인스턴스만 보여 준다.
P포트에서는 제공자만,R포트에서는 소비자만, 그리고 포트의 인터페이스Sensor와 같은 서비스의 인스턴스만 나온다.
SERVICE INSTANCE 고르기
-
SERVICE INSTANCE 칸을 클릭한다. 드롭다운에
Provider_Sensor (SOME/IP)하나가 보인다.P포트이므로 제공자만 걸러진 결과이다.
그림 10-5. 포트를 고른 뒤의 화면. ① SERVICE INSTANCE 칸, ② 드롭다운 항목
Provider_Sensor (SOME/IP). 캔버스의 박스는Sensor/AA/Sensor이고P포트로 가는 점선 화살표가 보인다. SERVICE INSTANCE 라벨은 아직 빨갛고, 그 메시지는 열린 목록에 가려 있다. -
Provider_Sensor (SOME/IP)를 클릭한다. 패널 아래에 되읽기 블록 REFERENCED INSTANCE 가 SOME/IP 배지와 함께 나타나고, 네 줄SERVICE ID = 0x000B,VERSION = 1.0,INSTANCE ID = 0x0001,ENDPOINT = 127.0.0.1:20003이 보인다. 그 아래에 표 EVENTS(열 EVENT, EVENT ID, EVENTGROUP ID, TRANSPORT, 행SensorData0x00010x0001UDP)와 METHODS(열 METHOD, METHOD ID, TRANSPORT, 행Calculation0x0001UDP)가 있다. 제공자이므로 CLIENT ID 칸은 없다.
그림 10-6. 인스턴스를 고른 뒤의 패널. ① 되읽기 블록 REFERENCED INSTANCE(
SERVICE ID = 0x000B,VERSION = 1.0,INSTANCE ID = 0x0001,ENDPOINT = 127.0.0.1:20003), ② 표 EVENTS, ③ 표 METHODS. SERVICE INSTANCE 칸은 너비 때문에Provider_Sensor (SOME/…로 잘려 보이지만 값은Provider_Sensor (SOME/IP)이다. 제목은 아직● AA Internal Behavior [Sensor]이다.
참고. 되읽기 블록은 모두 읽기 전용이다.
0x000B는 6장에서 정한 Service ID11,0x0001은 6장Provider_Sensor의 Instance ID1,127.0.0.1은 3장eth0의 유니캐스트 주소,20003은 7장에서 바인딩한 UDP 포트이다. 여기서 값을 바꿀 수는 없고, 바꾸려면 6장과 7장의 편집기로 돌아간다.
저장하고 닫기
- 다이얼로그 안에서
Ctrl+S를 누른다. 제목의●가 사라져AA Internal Behavior [Sensor]가 된다. 매핑 박스와 패널 값은 그대로 보인다. - Close 를 클릭한다. 저장했으므로 묻는 창 없이 닫힌다.
참고.
Ctrl+S를 누르기 전까지 편집 내용은 다이얼로그 안에만 있다. 그래서 탭AADesign:VFB에는 수정됨 표시●가 붙지 않고, PORT 와 SERVICE INSTANCE 가 비어 있어도 푸터의 V 아이콘에 배지가 붙지 않는다. 다이얼로그 안의Ctrl+S는Sensor.swc.io.model에service-instance-mappings를 쓰고AADesign:VFB탭까지 함께 저장한다. 닫은 뒤 탭에 수정됨 표시●가 없다.
Fusion 의 포트를 Fusion_Sensor 에 매핑하기
Fusion 은 소비자이다. Sensor 와 같은 절차에 CLIENT ID 입력이 하나 더해진다.
-
노드
Fusion을 더블클릭한다. AA Internal Behavior [Fusion] 이 열리고 캔버스에Fusion본체와 경계의R포트Sensor가 보인다. PORTS 행은RSensorSensor이다. -
본체를 우클릭하고 Add Instance › ara::com › Service Instance 를 클릭한다. 박스
Fusion/AA/가 생기고 PROCESS 는Fusion이다.Sensor때와 같이 빈 PORT 와 SERVICE INSTANCE 가 빨갛다. -
PORT 칸을 클릭해
Sensor를 고른다. 박스가Fusion/AA/Sensor가 된다. -
SERVICE INSTANCE 칸을 클릭한다. 드롭다운에
Actuator_Sensor (SOME/IP),Fusion_Sensor (SOME/IP)둘이 보인다.R포트이므로 소비자 둘만 걸러진 결과이다.Fusion_Sensor (SOME/IP)를 클릭한다. -
되읽기 블록을 확인한다.
SERVICE ID = 0x000B,VERSION = 1.0,INSTANCE ID = 0xFFFF,ENDPOINT = 127.0.0.1:20002이다. EVENTS 와 METHODS 표는Sensor와 같다. METHODS 머리글과 표 사이에 CLIENT ID 칸이 있고, 라벨 오른쪽에 토글 DEC / HEX 가 있으며 기본값은 HEX 이다. 칸은 비어 있다. -
CLIENT ID 칸에
2를 입력하고Tab을 누른다. 칸에0x2로 표시된다.
그림 10-7. CLIENT ID 를 입력한 뒤의
Fusion다이얼로그. ① SERVICE INSTANCE 칸Fusion_Sensor (SOME/IP), ② 되읽기 줄INSTANCE ID = 0xFFFF, ③ 되읽기 줄ENDPOINT = 127.0.0.1:20002, ④ CLIENT ID 칸(0x2, 토글 DEC / HEX 에서 HEX 가 켜짐). 캔버스의 박스Fusion/AA/Sensor는 왼쪽 경계의R포트와 점선으로 이어지며 박스의 왼쪽 끝이 포트 아이콘에 닿아 보인다. 제목은● AA Internal Behavior [Fusion]이다. -
Ctrl+S를 누른 뒤 Close 를 클릭한다.
참고. CLIENT ID 는
0x접두사 없이 쳐도 된다. HEX 가 기본이어서2를 치면0x2로 표시되고 파일에는2가 저장된다. 참조 설계의 값1과2는 10진과 16진이 같으므로 토글을 바꿀 필요가 없다. 소비자의INSTANCE ID = 0xFFFF는 6장에서 Required Instance ID 를ANY로 둔 결과이며, 모델 값은65535이다.
Actuator 의 포트를 Actuator_Sensor 에 매핑하기
같은 방법으로 Actuator 를 매핑한다. 노드를 더블클릭하고 본체를 우클릭해 Add Instance › ara::com › Service Instance 를 클릭한 뒤, 표의 값을 고르고 입력하고 Ctrl+S, Close 순서로 마친다.
| 노드 | PORT | SERVICE INSTANCE | CLIENT ID | 되읽기 INSTANCE ID / ENDPOINT |
|---|---|---|---|---|
Actuator | Sensor | Actuator_Sensor (SOME/IP) | 1 → 0x1 | 0xFFFF / 127.0.0.1:20001 |
SERVICE INSTANCE 드롭다운에는 Fusion 과 같이 Actuator_Sensor (SOME/IP), Fusion_Sensor (SOME/IP) 둘이 보인다. 여기서는 Actuator_Sensor (SOME/IP) 를 고른다.

그림 10-8. Ctrl+S 로 저장한 뒤의 Actuator 다이얼로그. ① 제목 AA Internal Behavior [Actuator](수정됨 표시 없음), ② 매핑 박스 Actuator/AA/Sensor, ③ CLIENT ID 칸 0x1. SERVICE INSTANCE 칸은 Actuator_Sensor (SOME/… 로 잘려 보이고, 되읽기 블록은 INSTANCE ID = 0xFFFF, ENDPOINT = 127.0.0.1:20001 이다. 저장한 뒤에도 박스와 패널 값이 그대로 보인다.
주의.
Fusion과Actuator의 드롭다운 항목은 같다.Fusion에서는Fusion_Sensor (SOME/IP),Actuator에서는Actuator_Sensor (SOME/IP)를 골랐는지 되읽기 블록의 ENDPOINT 로 확인한다.Fusion은127.0.0.1:20002,Actuator는127.0.0.1:20001이어야 한다.
세 다이얼로그를 모두 닫으면 HPC 캔버스는 겉보기에 달라지지 않는다. 매핑 박스는 다이얼로그 안에서만 보인다.

그림 10-9. 매핑을 마친 뒤의 HPC 캔버스. ① Sensor, ② Fusion, ③ Actuator. 마지막으로 연 Actuator 가 선택된 채 강조돼 있고, 탭 AADesign:VFB 에 수정됨 표시 ● 가 없다.
세 파일에 service-instance-mappings 가 하나씩 추가된다. Sensor.swc.io.model 의 항목은 다음과 같다.
"service-instance-mappings": [
{
"name": "Sensor_AA_Sensor",
"port-ref": "Sensor",
"service-instance-ref": "Provider_Sensor",
"instance-type": "someip",
"process-ref": "Sensor",
"position": { "x": 0, "y": 48 },
"size": { "width": 160, "height": 32 }
}
]
Fusion.swc.io.model 은 name 이 Fusion_AA_Sensor, service-instance-ref 가 Fusion_Sensor, process-ref 가 Fusion 이고 client-id 2 가 더 있다. Actuator.swc.io.model 은 Actuator_AA_Sensor, Actuator_Sensor, Actuator 에 client-id 1 이다. 제공자 Sensor 의 항목에는 client-id 키 자체가 없다. name 은 제품이 <Executable>_<ROOT SWC PROTOTYPE>_<포트> 로 짓고, position 과 size 는 박스의 좌표이다. CM.swc.io.model 과 EM.swc.io.model, 그리고 SERVICE.io.model, IVC.io.model 은 바뀌지 않는다. VFB.io.model 은 다이얼로그를 저장할 때 다시 쓰이지만, 바뀌는 것은 metadata 의 modified 시각뿐이다.
검증 결과 보기
-
화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지가 붙어 있지 않다.
-
VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다. 헤더에 배지가 없고, 열 머리글 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 아래 본문이
No validation issues.이다.그림 10-10. 세 다이얼로그를 모두 저장한 뒤의 VALIDATION 패널. 본문은
No validation issues.이다.
참고. 이 장은 PORT 와 SERVICE INSTANCE 를 둘 다 고른 뒤에만 저장한다. 둘 중 하나를 비운 채 저장했을 때 검증이 무엇을 보고하는지는 이 장에서 확인하지 않았다.
왜 이렇게 설계하는가
- 매핑은 포트가 있는 셋에만 한다. 참조 설계의
SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING은Sensor,Fusion,Actuator의Manifest아래에 하나씩, 모두 세 개이다.CM과EM에는 포트도 매핑도 없다. - CLIENT ID 는 제공자에 없고 소비자에
2,1이다. 참조 설계의PARA-SOMEIP-CONFIGURATION아래CLIENT-ID는Sensor가 빈 값,Fusion이2,Actuator가1이다. PAIO 는 제공자 매핑에 CLIENT ID 칸을 두지 않아 익스포트에 빈CLIENT-ID가 나오고, 소비자에 입력한 값은 그대로 나온다. - 이름은
<Executable>_<ROOT SWC PROTOTYPE>_<포트>이다. 참조 설계의 세 이름Sensor_AA_Sensor,Fusion_AA_Sensor,Actuator_AA_Sensor는 이 규칙과 같고, 9장에서 ROOT SWC PROTOTYPE 을 기본값AA로 둔 덕분에 그대로 재현된다. 참조 설계에서CM과EM만RootSwComponent인 것은, 이 둘에 매핑이 없으므로 매핑 이름과 관계가 없다. - 익스포트의
Sensor_AA_Sensor블록은 참조 설계와 한 줄만 다르다. 그 줄은PORT-PROTOTYPE-IREF의CONTEXT-ROOT-SW-COMPONENT-PROTOTYPE-REF이다. 익스포트에서는 ExecutableSensor의 루트 프로토타입AA를 가리키는/Executable/Sensor/Sensor/AA이고, 참조 설계에서는 한 단계 짧아 어떤 요소도 가리키지 않는/Executable/Sensor/AA이다. 그 사정은 ARXML 익스포트에서 본다. - 되읽기 블록은 6장과 7장의 결과를 보여 줄 뿐이다.
SERVICE ID,INSTANCE ID,ENDPOINT는 이 다이얼로그에서 입력하지 않는다. 매핑은 "어느 포트가 어느 인스턴스를 쓰는가" 만 정한다.
확인하기
-
Sensor,Fusion,Actuator를 더블클릭하면 본체 안에 매핑 박스Sensor/AA/Sensor,Fusion/AA/Sensor,Actuator/AA/Sensor가 하나씩 있고, 박스와 포트가 점선 화살표로 이어져 있다. - 박스를 클릭하면 패널 SERVICE INSTANCE MAPPING 의 PORT 가
Sensor, SERVICE INSTANCE 가 각각Provider_Sensor (SOME/IP),Fusion_Sensor (SOME/IP),Actuator_Sensor (SOME/IP)이다. - 되읽기 블록의 ENDPOINT 가
Sensor는127.0.0.1:20003,Fusion은127.0.0.1:20002,Actuator는127.0.0.1:20001이고, INSTANCE ID 가Sensor는0x0001, 나머지 둘은0xFFFF이다. -
Fusion의 CLIENT ID 는0x2,Actuator는0x1이고,Sensor에는 CLIENT ID 칸이 없다. - 다이얼로그 제목과 탭
AADesign:VFB에 수정됨 표시●가 없다. -
CM과EM은 열지 않았고 파일도 바뀌지 않았다. - VALIDATION 패널에
No validation issues.가 보이고 헤더에 배지가 없다.
다음 단계
로그와 DLT에서 다섯 프로세스의 LOG CONFIG 에 Application ID 와 DLT 컨텍스트를 입력한다.