본문으로 건너뛰기

서비스 인스턴스 매핑

이 장에서 할 일​

이 장에서는 컴포지션 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 ID 1), Fusion_Sensor, Actuator_Sensor(소비자, Required Instance ID ANY) 가 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 이다. 매핑 박스의 이름과 저장 이름은 제품이 짓고, 독자는 짓지 않는다.

SensorFusionActuator
PORTSensor (P)Sensor (R)Sensor (R)
SERVICE INSTANCEProvider_Sensor (SOME/IP)Fusion_Sensor (SOME/IP)Actuator_Sensor (SOME/IP)
CLIENT ID칸 없음2 → 0x21 → 0x1
매핑 박스 / INSTANCE SPECIFIERSensor/AA/SensorFusion/AA/SensorActuator/AA/Sensor
PROCESS (자동)SensorFusionActuator
되읽기 SERVICE ID / VERSION0x000B / 1.0같음같음
되읽기 INSTANCE ID0x00010xFFFF0xFFFF
되읽기 ENDPOINT127.0.0.1:20003127.0.0.1:20002127.0.0.1:20001
저장 이름 (자동)Sensor_AA_SensorFusion_AA_SensorActuator_AA_Sensor

세 Adaptive Application 은 서로 독립이어서 어느 순서로 해도 된다. 이 장은 제공자 Sensor 를 먼저, 소비자 Fusion, Actuator 를 뒤에 둔다.

Sensor 의 포트를 Provider_Sensor 에 매핑하기​

AA Internal Behavior 다이얼로그 열기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 VFB 를 클릭한다. 탭 AADesign:VFB 가 열리고 루트 캔버스에 컴포지션 노드 HPC [Ecu] 가 보인다. 노드 HPC [Ecu] 를 더블클릭한다. 빵부스러기가 System > HPC 로 바뀌고 프레임 HPC 안에 8장에서 만든 노드 다섯 개와 커넥터 두 개가 보인다.

    컴포지션 HPC 안의 노드 다섯 개. Sensor, Fusion, Actuator 가 강조됨

    그림 10-1. 컴포지션 HPC 안으로 들어간 VFB 편집기. ① 먼저 더블클릭할 노드 Sensor, ② 노드 Fusion, ③ 노드 Actuator. 이 셋에만 포트가 있고 Sensor 의 P 에서 두 R 로 커넥터가 이어져 있다. CM 과 EM 은 이 장에서 열지 않는다. 노드 배치는 8장에서 Auto Layout 을 누른 결과에 따라 그림과 다를 수 있으며 설계 값에는 영향이 없다.

  2. 노드 Sensor 를 더블클릭한다. 다이얼로그 AA Internal Behavior [Sensor] 가 열린다. 왼쪽 캔버스에 Sensor 본체와 경계의 P 포트 Sensor 가 있고 매핑 박스는 아직 없다. 오른쪽 패널은 PROPERTIES 탭이 열려 NAME Sensor, AS PROTOTYPE Sensor, DESCRIPTION -, PORTS 행 P Sensor Sensor 를 보여 준다.

    매핑 전의 AA Internal Behavior [Sensor] 다이얼로그

    그림 10-2. 막 열린 다이얼로그. ① 제목 AA Internal Behavior [Sensor], ② 캔버스의 Sensor 본체, ③ 오른쪽 경계의 P 포트 라벨 Sensor. 본체 안에는 아직 아무 박스도 없다.

Add Instance 메뉴로 매핑 박스 만들기​

  1. 캔버스의 Sensor 본체 빈 곳을 마우스 오른쪽 버튼으로 클릭한다. 메뉴에 Add Port 와 Add Instance 두 항목이 보인다.

  2. Add Instance 에 마우스를 올린다. 서브메뉴에 기능 클러스터가 ara::com, ara::log, ara::sm, ara::phm, ara::nm, ara::tsync, ara::crypto, ara::idsm, ara::diag, ara::per, ara::rds 순서로 열한 개 보인다.

  3. ara::com 에 마우스를 올린다. 서브메뉴 항목은 Service Instance 하나이다.

    본체 우클릭 메뉴 Add Instance › ara::com › Service Instance

    그림 10-3. 세 단계 메뉴가 한 화면에 보인다. ① Add Instance, ② 클러스터 ara::com, ③ Service Instance. Add Instance 아래에 ara::com 부터 ara::rds 까지 열한 클러스터가 있다.

  4. Service Instance 를 클릭한다. 본체 안에 매핑 박스 Sensor/AA/ 가 생겨 선택된 상태가 되고, 제목에 수정됨 표시가 붙어 ● AA Internal Behavior [Sensor] 가 된다. 오른쪽 패널이 SERVICE INSTANCE MAPPING 으로 바뀐다. 필드는 INSTANCE SPECIFIER Sensor/AA/(읽기 전용), PROCESS Sensor(읽기 전용), 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 고르기​

  1. PORT 칸을 클릭한다. 드롭다운에 이 Adaptive Application 의 포트 Sensor 하나가 보인다.

    매핑 박스 Sensor/AA/ 와 열린 PORT 드롭다운

    그림 10-4. 매핑 박스를 만든 직후. ① 본체 안의 매핑 박스 Sensor/AA/, ② 패널 제목 SERVICE INSTANCE MAPPING, ③ PORT 칸, ④ 드롭다운 항목 Sensor. INSTANCE SPECIFIER 는 Sensor/AA/, PROCESS 는 Sensor 이고 SERVICE INSTANCE 는 비어 있다. PORT 와 SERVICE INSTANCE 의 라벨이 빨갛고, 열린 목록 오른쪽에 메시지 Service Instance is required 가 보인다.

  2. 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 고르기​

  1. SERVICE INSTANCE 칸을 클릭한다. 드롭다운에 Provider_Sensor (SOME/IP) 하나가 보인다. P 포트이므로 제공자만 걸러진 결과이다.

    박스 Sensor/AA/Sensor 와 열린 SERVICE INSTANCE 드롭다운

    그림 10-5. 포트를 고른 뒤의 화면. ① SERVICE INSTANCE 칸, ② 드롭다운 항목 Provider_Sensor (SOME/IP). 캔버스의 박스는 Sensor/AA/Sensor 이고 P 포트로 가는 점선 화살표가 보인다. SERVICE INSTANCE 라벨은 아직 빨갛고, 그 메시지는 열린 목록에 가려 있다.

  2. 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, 행 SensorData 0x0001 0x0001 UDP)와 METHODS(열 METHOD, METHOD ID, TRANSPORT, 행 Calculation 0x0001 UDP)가 있다. 제공자이므로 CLIENT ID 칸은 없다.

    Provider_Sensor 를 고른 뒤의 SERVICE INSTANCE MAPPING 패널과 되읽기 블록

    그림 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 ID 11, 0x0001 은 6장 Provider_Sensor 의 Instance ID 1, 127.0.0.1 은 3장 eth0 의 유니캐스트 주소, 20003 은 7장에서 바인딩한 UDP 포트이다. 여기서 값을 바꿀 수는 없고, 바꾸려면 6장과 7장의 편집기로 돌아간다.

저장하고 닫기​

  1. 다이얼로그 안에서 Ctrl+S 를 누른다. 제목의 ● 가 사라져 AA Internal Behavior [Sensor] 가 된다. 매핑 박스와 패널 값은 그대로 보인다.
  2. 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 입력이 하나 더해진다.

  1. 노드 Fusion 을 더블클릭한다. AA Internal Behavior [Fusion] 이 열리고 캔버스에 Fusion 본체와 경계의 R 포트 Sensor 가 보인다. PORTS 행은 R Sensor Sensor 이다.

  2. 본체를 우클릭하고 Add Instance › ara::com › Service Instance 를 클릭한다. 박스 Fusion/AA/ 가 생기고 PROCESS 는 Fusion 이다. Sensor 때와 같이 빈 PORT 와 SERVICE INSTANCE 가 빨갛다.

  3. PORT 칸을 클릭해 Sensor 를 고른다. 박스가 Fusion/AA/Sensor 가 된다.

  4. SERVICE INSTANCE 칸을 클릭한다. 드롭다운에 Actuator_Sensor (SOME/IP), Fusion_Sensor (SOME/IP) 둘이 보인다. R 포트이므로 소비자 둘만 걸러진 결과이다. Fusion_Sensor (SOME/IP) 를 클릭한다.

  5. 되읽기 블록을 확인한다. SERVICE ID = 0x000B, VERSION = 1.0, INSTANCE ID = 0xFFFF, ENDPOINT = 127.0.0.1:20002 이다. EVENTS 와 METHODS 표는 Sensor 와 같다. METHODS 머리글과 표 사이에 CLIENT ID 칸이 있고, 라벨 오른쪽에 토글 DEC / HEX 가 있으며 기본값은 HEX 이다. 칸은 비어 있다.

  6. CLIENT ID 칸에 2 를 입력하고 Tab 을 누른다. 칸에 0x2 로 표시된다.

    Fusion 의 매핑. SERVICE INSTANCE Fusion_Sensor, INSTANCE ID 0xFFFF, ENDPOINT 20002, CLIENT ID 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] 이다.

  7. 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 순서로 마친다.

노드PORTSERVICE INSTANCECLIENT ID되읽기 INSTANCE ID / ENDPOINT
ActuatorSensorActuator_Sensor (SOME/IP)1 → 0x10xFFFF / 127.0.0.1:20001

SERVICE INSTANCE 드롭다운에는 Fusion 과 같이 Actuator_Sensor (SOME/IP), Fusion_Sensor (SOME/IP) 둘이 보인다. 여기서는 Actuator_Sensor (SOME/IP) 를 고른다.

저장한 뒤의 Actuator 다이얼로그. 박스 Actuator/AA/Sensor, CLIENT ID 0x1

그림 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 캔버스는 겉보기에 달라지지 않는다. 매핑 박스는 다이얼로그 안에서만 보인다.

세 다이얼로그를 닫은 뒤의 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 시각뿐이다.

검증 결과 보기​

  1. 화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지가 붙어 있지 않다.

  2. VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다. 헤더에 배지가 없고, 열 머리글 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 아래 본문이 No validation issues. 이다.

    No validation issues. 를 보여 주는 Validation 패널

    그림 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 이다. 익스포트에서는 Executable Sensor 의 루트 프로토타입 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 컨텍스트를 입력한다.