커넥터에 서비스 인스턴스 바인딩
이 장에서 할 일
이 장에서는 SOME/IP 배포와 서비스 인스턴스에서 만든 서비스 인스턴스 세 개를 토폴로지 — Ethernet 커넥터와 엔드포인트에서 만든 Ethernet 커넥터 eth0 에 바인딩한다.
System 편집기에서 커넥터 eth0 를 선택하고 ETHERNET CONNECTOR 패널의 SERVICE INSTANCES 섹션에서 + 버튼을 눌러 모달 Select Service Instance 를 연다. 세 인스턴스를 모두 체크해 Bind 하고, 인스턴스 카드마다 UDP PORT 를 3장에서 만든 UDP 엔드포인트 가운데 하나로 고른 뒤 저장한다.
이 장을 마치면 design/IVC.io.model 의 커넥터 eth0 에 바인딩 세 개 — Provider_Sensor 는 UDP 20003, Actuator_Sensor 는 UDP 20001, Fusion_Sensor 는 UDP 20002 — 가 저장된다. 이 바인딩이 ARXML 익스포트에서 참조 설계의 SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING 세 개가 된다.
시작하기 전에
- SOME/IP 배포와 서비스 인스턴스를 마친 상태에서 시작한다.
design/폴더에IVC.io.model(커넥터eth0, UDP 엔드포인트20001,20002,20003)과SERVICE.io.model(제공자Provider_Sensor, 소비자Actuator_Sensor와Fusion_Sensor)이 있다. 커넥터eth0에 바인딩된 서비스 인스턴스는 아직 없다. - VALIDATION 패널은
No validation issues.이다. Bind 직후에는 아직 UDP 포트가 없는 바인딩마다 오류가 하나씩 보이고, 포트를 하나 고를 때마다 하나씩 사라지므로 이 장은 다시No validation issues.로 끝난다. - 6장에서 열어 둔
AADesign:Interface탭은 닫아도 된다. 이 장은 EDITOR 뷰의 DESIGN 에서 System 을 열어 시작한다.
이 장에서 키보드로 입력하는 값은 없다. 바인딩할 인스턴스와 포트는 모두 목록에서 클릭해 고른다.
| 인스턴스 | 역할 | 고를 UDP PORT | TCP PORT |
|---|---|---|---|
Provider_Sensor | 제공자(배지 P) | 20003 | 비워 둠 |
Actuator_Sensor | 소비자(배지 C) | 20001 | 비워 둠 |
Fusion_Sensor | 소비자(배지 C) | 20002 | 비워 둠 |
커넥터 eth0 의 SERVICE INSTANCES 열기
System 편집기를 열고 커넥터를 선택하기
-
왼쪽 EDITOR 뷰의 DESIGN 아래에서 System 을 클릭한다. 탭
AADesign:System이 열리고 캔버스에 3장에서 만든 HPC 노드Ecu [HPC], 그 안의 초록 사각형(컨트롤러), 노드 경계의 사각형(커넥터eth0), 그것과 파란 선으로 이어진 작은 파란 사각형(클러스터)과 그 밑의 이름EthernetCluster가 보인다. -
노드 경계의 커넥터
eth0를 클릭한다. 오른쪽에 ETHERNET CONNECTOR 패널이 열리고 NAMEeth0, CONTROLLEREcu_EthernetController, CONNECTED CHANNELEthernetCluster / PhysicalChannel이 보인다. 아래에 섹션 NETWORK ENDPOINT, APPLICATION ENDPOINTS, SERVICE INSTANCES, SOCKET CONNECTIONS, PARTIAL NETWORK, TX PDUS, RX PDUS 가 있다. -
NETWORK ENDPOINT 머리글을 클릭해 접는다. APPLICATION ENDPOINTS 는 이미 접혀 있으며, 펼쳐져 있다면 같은 방법으로 접는다. 화면을 정리하기 위한 선택 사항이다.
-
SERVICE INSTANCES 머리글을 클릭해 펼친다. 본문에
No service instances defined가 보이고 머리글 오른쪽 끝에 + 버튼(툴팁Add Service Instance)이 있다.
그림 7-1. 커넥터
eth0를 선택한 System 편집기. ① 노드Ecu [HPC]경계의 커넥터eth0(선택됨), ② 펼친 SERVICE INSTANCES 머리글, ③ 머리글 오른쪽의 + 버튼(툴팁Add Service Instance). 본문은No service instances defined이다.
서비스 인스턴스 세 개 바인딩하기
모달에서 인스턴스를 고르기
-
SERVICE INSTANCES 머리글의 + 버튼을 클릭한다. 모달 Select Service Instance 가 열린다. 첫 열에는 머리글 없이 행마다 체크박스가 있고, 나머지 열 머리글은 PROTOCOL, ROLE, INSTANCE, SERVICE, SERVICE ID, INSTANCE ID 이며, 행 세 개가 있다.
SOME/IPPROVIDERProvider_SensorSensor111SOME/IPCONSUMERActuator_SensorSensor11ANYSOME/IPCONSUMERFusion_SensorSensor11ANY
-
세 행의 체크박스를 모두 체크한다. 행의 아무 곳을 클릭해도 체크가 토글된다.
-
모달 오른쪽 아래의 Bind 버튼을 클릭한다. 왼쪽의 Cancel 은 누르지 않는다.

그림 7-2. 모달 Select Service Instance. ① 모두 체크한 행 세 개 —
Provider_Sensor(PROVIDER, INSTANCE ID1),Actuator_Sensor와Fusion_Sensor(CONSUMER, INSTANCE IDANY), ② 클릭할 Bind 버튼. SERVICE 열은 배포 이름Sensor, SERVICE ID 열은11이다.
모달은 design/SERVICE.io.model 의 인스턴스를 제공자, 소비자 순으로 나열한다. 소비자의 INSTANCE ID ANY 는 6장에서 그대로 둔 REQUIRED INSTANCE ID ANY(모델 값 65535)이다. 세 행을 한꺼번에 Bind 하면 카드도 이 순서로 생긴다.
바인딩 결과를 확인하기
-
모달이 닫히고 SERVICE INSTANCES 섹션에 카드 세 장이 생긴다. 요약 줄은 배지
SOME/IP, 역할 배지 P(제공자) 또는 C(소비자), 인스턴스 이름, 삭제 × 순이고, 요약 줄 오른쪽의 포트 자리는 아직 비어 있다. -
탭
AADesign:System에 수정됨 표시 ● 가 붙고, 푸터의 V 아이콘에 빨간 배지3이 붙는다.
그림 7-3. 바인딩 직후의 SERVICE INSTANCES 섹션. ① 카드
SOME/IPPProvider_Sensor, ② 카드SOME/IPCActuator_Sensor, ③ 카드SOME/IPCFusion_Sensor. 세 카드 모두 요약 줄 오른쪽에 포트가 없다.
배지 3 은 아직 UDP 포트가 없는 바인딩마다 하나씩 생긴 검증 오류 세 건이다. VALIDATION 패널(닫혀 있으면 V 아이콘을 클릭한다)에는 제목 옆에 배지 3 이 있고, 인스턴스마다 한 행씩 세 행이 있다. ELEMENT TYPE 은 SomeipServiceInstanceToMachineMapping, NAME 은 인스턴스 이름, CONSTR 은 빈칸이고, DESCRIPTION 은 Service "Sensor" uses UDP, but the mapping of "Provider_Sensor" on "Ecu/eth0" defines no UDP port. 와 같다. 기본 열 너비에서는 ELEMENT TYPE 과 DESCRIPTION 이 … 로 잘려 보인다. 다음 절에서 포트를 하나 고를 때마다 이 오류가 하나씩 사라진다.
참고. Bind 는 체크한 행을 한 번의 편집으로 묶는다. 제공자 인스턴스는 프로젝트의 Ethernet 커넥터 가운데 하나에만 바인딩할 수 있고, 소비자 인스턴스는 커넥터마다 바인딩할 수 있다. 이미 이 커넥터에 바인딩된 인스턴스는 모달에 다시 나오지 않는다.
제공자 Provider_Sensor 에 UDP 포트 정하기
세 인스턴스 가운데 제공자를 절차로 보인다. 포트는 카드 안의 UDP PORT 칸에서 3장에서 만든 엔드포인트 목록을 열어 고른다.
카드를 펼치고 포트 목록을 열기
-
카드
SOME/IPPProvider_Sensor의 요약 줄을 클릭해 펼친다. 칸 세 개 IP ADDRESS127.0.0.1(읽기 전용), TCP PORT(비어 있음, 안내Unsigned Integer (0..65535)), UDP PORT(비어 있음, 같은 안내)가 보이고, 그 아래에 줄 TLS (TCP) 와 TLS (UDP) 가 각각 + 버튼(툴팁Add TLS)과 함께 있다. -
UDP PORT 칸 오른쪽의 ▾ 버튼(툴팁
Select from Application Endpoints)을 클릭한다. 칸 아래에 목록20001,20002,20003이 열린다.
그림 7-4. 펼친
Provider_Sensor카드와 열린 UDP PORT 목록. ① IP ADDRESS =127.0.0.1(읽기 전용), ② UDP PORT 칸 오른쪽의 ▾ 버튼, ③ 목록에서 클릭할20003. TCP PORT 칸에는 ▾ 버튼이 없고, 열린 목록이 줄 TLS (TCP) 와 TLS (UDP) 의 + 버튼을 가린다.
IP ADDRESS 는 커넥터 eth0 의 유니캐스트 주소가 그대로 들어오며 바꿀 수 없다. 목록의 세 항목은 이 커넥터의 APPLICATION ENDPOINTS 에 있는 UDP 엔드포인트의 포트이다. TCP 엔드포인트는 만들지 않았으므로 TCP PORT 칸에는 ▾ 버튼이 붙지 않는다. 줄 TLS (TCP) 와 TLS (UDP) 는 이 바인딩의 TCP 와 UDP 각각의 TLS 설정을 담는다. 참조 설계에는 TLS 설정이 없으므로 이 장에서는 비워 둔다.
포트 20003 을 고르기
-
목록의
20003을 클릭한다. UDP PORT 칸에20003이 들어가고 카드는 펼쳐진 채 남는다. 푸터 V 아이콘의 배지는2로 바뀐다. -
캔버스의 커넥터
eth0를 다시 클릭해 패널을 새로 그린 뒤, 카드Provider_Sensor의 요약 줄을 클릭해 다시 펼친다. 요약 줄 오른쪽에UDP:20003이 보이고 UDP PORT 칸은20003이다. -
TCP PORT 와 줄 TLS (TCP), TLS (UDP) 는 비워 둔다.

그림 7-5. 포트를 고른 뒤의
Provider_Sensor카드. ① 요약 줄 오른쪽의UDP:20003, ② IP ADDRESS =127.0.0.1, ③ 비워 둔 TCP PORT, ④ UDP PORT =20003. 그 아래 줄 TLS (TCP) 와 TLS (UDP) 는 비어 있어 각각 + 버튼만 보인다. 아래 두 카드Actuator_Sensor와Fusion_Sensor는 접혀 있고 아직 포트가 없다.
참고. 포트를 고른 직후에는 요약 줄이 바로 바뀌지 않고 UDP PORT 칸에만 값이 들어간다. 커넥터를 다시 클릭해 패널이 다시 그려지면 요약 줄에
UDP:20003이 붙는다. 목록에서 고르는 대신 UDP PORT 칸에 번호를 직접 입력할 수도 있지만, 이 장에서는 목록에서 고르는 방법만 쓴다.
소비자 Actuator_Sensor 와 Fusion_Sensor 에 포트 정하기
같은 방법으로 소비자 둘의 포트를 고른다. 고르는 항목만 다르다.
| 카드 | UDP PORT 목록에서 클릭할 항목 | 요약 줄 |
|---|---|---|
SOME/IP C Actuator_Sensor | 20001 | UDP:20001 |
SOME/IP C Fusion_Sensor | 20002 | UDP:20002 |
-
카드
Actuator_Sensor의 요약 줄을 클릭해 펼치고, UDP PORT 칸의 ▾ 버튼을 클릭한 뒤 목록의20001을 클릭한다. V 아이콘의 배지가1로 바뀐다. -
카드
Fusion_Sensor의 요약 줄을 클릭해 펼치고, UDP PORT 칸의 ▾ 버튼을 클릭한 뒤 목록의20002를 클릭한다. V 아이콘의 배지가 사라진다. -
커넥터
eth0를 다시 클릭한다. 카드 세 장이 접힌 채 요약 줄에Provider_SensorUDP:20003,Actuator_SensorUDP:20001,Fusion_SensorUDP:20002가 보인다. -
APPLICATION ENDPOINTS 머리글을 클릭해 펼친다. 3장에서 만든 카드 세 장
UDPeth0, 127.0.0.1:20001,UDPeth0, 127.0.0.1:20002,UDPeth0, 127.0.0.1:20003이 그대로 있고 새로 생긴 엔드포인트는 없다.
그림 7-6. 포트를 모두 정한 뒤의 패널. ①
Provider_SensorUDP:20003, ②Actuator_SensorUDP:20001, ③Fusion_SensorUDP:20002, ④ 펼친 APPLICATION ENDPOINTS — 카드 세 장UDPeth0, 127.0.0.1:20001/:20002/:20003이 3장 그대로이다.
목록에서 고른 포트는 같은 번호의 UDP 엔드포인트를 그대로 참조한다. 그래서 APPLICATION ENDPOINTS 의 카드 수는 세 장에서 늘지 않는다.
저장하기
-
캔버스의 빈 곳을 클릭해 커넥터 선택을 해제한다.
-
Ctrl+S를 누른다. 탭AADesign:System의 수정됨 표시 ● 가 사라지고design/IVC.io.model이 저장된다. -
커넥터
eth0를 다시 클릭한다. SERVICE INSTANCES 에 카드Provider_SensorUDP:20003,Actuator_SensorUDP:20001,Fusion_SensorUDP:20002가 보인다. TX PDUS 와 RX PDUS 머리글을 펼치면 둘 다No PDUs referenced이다.
그림 7-7. 저장한 뒤의 System 편집기. ① 다시 선택한 커넥터
eth0, ② SERVICE INSTANCES 섹션의 카드 세 장 —Provider_SensorUDP:20003,Actuator_SensorUDP:20001,Fusion_SensorUDP:20002. 탭AADesign:System에 수정됨 표시 ● 가 없고, 푸터의 V 아이콘에는 배지가 없다.
저장된 design/IVC.io.model 의 커넥터 eth0 에는 다음 항목이 추가된다. 그 밖의 값(NETWORK ENDPOINT, APPLICATION ENDPOINTS 등)은 3장에서 저장한 그대로이다.
"service-instances": [
{ "instance-type": "someip", "instance-ref": "Provider_Sensor", "role": "provider", "udp-port": 20003 },
{ "instance-type": "someip", "instance-ref": "Actuator_Sensor", "role": "consumer", "udp-port": 20001 },
{ "instance-type": "someip", "instance-ref": "Fusion_Sensor", "role": "consumer", "udp-port": 20002 }
]
비워 둔 TCP PORT 는 tcp-port 키 자체가 쓰이지 않고, 비워 둔 줄 TLS (TCP) 와 TLS (UDP) 도 아무것도 쓰지 않는다. design/SERVICE.io.model 은 바뀌지 않는다.
검증 결과 보기
-
화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지는 없지만 툴팁에는 0이 아니던 마지막 건수
Validation: 1 error(s), 0 warning(s), 0 info(s)가 그대로 남아 있다. 현재 결과는 VALIDATION 패널에서 확인한다. -
VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다.
그림 7-8. 저장한 뒤의 VALIDATION 패널. 헤더에 배지가 없고, 열 머리글 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 아래에
No validation issues.한 줄만 있다.
참고. Bind 직후에 생긴 오류 세 건은 바인딩마다 UDP 포트를 정하면서 하나씩 사라졌다. 이 장에서 만든 바인딩 세 개와 커넥터
eth0, 엔드포인트Ecu_eth0_UDP_20001,Ecu_eth0_UDP_20002,Ecu_eth0_UDP_20003, 자동 파생된 신호의 PDU 에 대한 행도 없다. 6장을 건너뛰고 이 장부터 따라 하더라도 Bind 를 누르는 순간 같은 자동 파생이 돌고, 그로 인한 검증 결과도 생기지 않는다.
왜 이렇게 설계하는가
- 바인딩 세 개는 참조 설계의
SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING세 개이다. 참조 설계는Ecu_ProviderMapping_Provider_Sensor(SERVICE-INSTANCE-REFProvider_Sensor,UDP-PORT-REFEcu_eth0_UDP_20003),Ecu_ConsumerMapping_Actuator_Sensor(Actuator_Sensor,Ecu_eth0_UDP_20001),Ecu_ConsumerMapping_Fusion_Sensor(Fusion_Sensor,Ecu_eth0_UDP_20002) 세 매핑을 갖고, 셋 다COMMUNICATION-CONNECTOR-REF로Ecu/eth0를 가리킨다. 이 장의 인스턴스와 포트 조합이 그 값이다. - 매핑 이름은 입력하지 않는다.
{HPC}_{Provider|Consumer}Mapping_{인스턴스}이름은 ARXML 익스포트의 익스포터가 붙인다. 화면에는 인스턴스 이름과 포트만 보인다. - 포트는 3장의 엔드포인트에서 고른다. 참조 설계의
AP-APPLICATION-ENDPOINT는Ecu_eth0_UDP_20001,Ecu_eth0_UDP_20002,Ecu_eth0_UDP_20003세 개뿐이고 매핑은 이 셋을 참조한다. 목록에서 고르면 같은 번호의 엔드포인트를 그대로 참조하므로 엔드포인트가 늘지 않는다. - TCP PORT 는 비워 둔다. 참조 설계에는 TCP 엔드포인트가 없고 매핑에
TCP-PORT-REF도 없다. 비워 두면tcp-port키가 쓰이지 않는다. - 제공자가
20003, 소비자가20001과20002이다. 참조 설계의UDP-PORT-REF가 그렇게 돼 있다. 6장의 배포에서 이벤트SensorData와 메서드Calculation의 TRANSPORT 가 UDP 이므로 UDP 포트만 필요하다.
확인하기
- 커넥터
eth0의 SERVICE INSTANCES 에 카드 세 장SOME/IPPProvider_Sensor,SOME/IPCActuator_Sensor,SOME/IPCFusion_Sensor가 이 순서로 있다. - 요약 줄 오른쪽이 각각
UDP:20003,UDP:20001,UDP:20002이다. - 카드를 펼치면 IP ADDRESS 가
127.0.0.1, TCP PORT 가 비어 있고, UDP PORT 가 각각20003,20001,20002이며, 줄 TLS (TCP) 와 TLS (UDP) 는 비어 있다. - APPLICATION ENDPOINTS 에는 3장에서 만든
UDPeth0, 127.0.0.1:20001/:20002/:20003세 장만 있다. - TX PDUS 와 RX PDUS 는
No PDUs referenced이다. - 탭
AADesign:System에 수정됨 표시 ● 가 없다. - VALIDATION 패널에
No validation issues.가 보이고 헤더에 배지가 없다.
다음 단계
Adaptive Application 과 포트에서 Adaptive Application 다섯 개 Sensor, Fusion, Actuator, CM, EM 을 만들고 서비스 인터페이스 Sensor 의 포트를 붙인다.