본문으로 건너뛰기

커넥터에 서비스 인스턴스 바인딩

이 장에서 할 일​

이 장에서는 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 PORTTCP PORT
Provider_Sensor제공자(배지 P)20003비워 둠
Actuator_Sensor소비자(배지 C)20001비워 둠
Fusion_Sensor소비자(배지 C)20002비워 둠

커넥터 eth0 의 SERVICE INSTANCES 열기​

System 편집기를 열고 커넥터를 선택하기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 System 을 클릭한다. 탭 AADesign:System 이 열리고 캔버스에 3장에서 만든 HPC 노드 Ecu [HPC], 그 안의 초록 사각형(컨트롤러), 노드 경계의 사각형(커넥터 eth0), 그것과 파란 선으로 이어진 작은 파란 사각형(클러스터)과 그 밑의 이름 EthernetCluster 가 보인다.

  2. 노드 경계의 커넥터 eth0 를 클릭한다. 오른쪽에 ETHERNET CONNECTOR 패널이 열리고 NAME eth0, CONTROLLER Ecu_EthernetController, CONNECTED CHANNEL EthernetCluster / PhysicalChannel 이 보인다. 아래에 섹션 NETWORK ENDPOINT, APPLICATION ENDPOINTS, SERVICE INSTANCES, SOCKET CONNECTIONS, PARTIAL NETWORK, TX PDUS, RX PDUS 가 있다.

  3. NETWORK ENDPOINT 머리글을 클릭해 접는다. APPLICATION ENDPOINTS 는 이미 접혀 있으며, 펼쳐져 있다면 같은 방법으로 접는다. 화면을 정리하기 위한 선택 사항이다.

  4. SERVICE INSTANCES 머리글을 클릭해 펼친다. 본문에 No service instances defined 가 보이고 머리글 오른쪽 끝에 + 버튼(툴팁 Add Service Instance)이 있다.

    커넥터 eth0 를 선택한 System 편집기. SERVICE INSTANCES 섹션이 비어 있다

    그림 7-1. 커넥터 eth0 를 선택한 System 편집기. ① 노드 Ecu [HPC] 경계의 커넥터 eth0(선택됨), ② 펼친 SERVICE INSTANCES 머리글, ③ 머리글 오른쪽의 + 버튼(툴팁 Add Service Instance). 본문은 No service instances defined 이다.

서비스 인스턴스 세 개 바인딩하기​

모달에서 인스턴스를 고르기​

  1. SERVICE INSTANCES 머리글의 + 버튼을 클릭한다. 모달 Select Service Instance 가 열린다. 첫 열에는 머리글 없이 행마다 체크박스가 있고, 나머지 열 머리글은 PROTOCOL, ROLE, INSTANCE, SERVICE, SERVICE ID, INSTANCE ID 이며, 행 세 개가 있다.

    • SOME/IP PROVIDER Provider_Sensor Sensor 11 1
    • SOME/IP CONSUMER Actuator_Sensor Sensor 11 ANY
    • SOME/IP CONSUMER Fusion_Sensor Sensor 11 ANY
  2. 세 행의 체크박스를 모두 체크한다. 행의 아무 곳을 클릭해도 체크가 토글된다.

  3. 모달 오른쪽 아래의 Bind 버튼을 클릭한다. 왼쪽의 Cancel 은 누르지 않는다.

    세 행을 모두 체크한 Select Service Instance 모달

    그림 7-2. 모달 Select Service Instance. ① 모두 체크한 행 세 개 — Provider_Sensor(PROVIDER, INSTANCE ID 1), Actuator_Sensor 와 Fusion_Sensor(CONSUMER, INSTANCE ID ANY), ② 클릭할 Bind 버튼. SERVICE 열은 배포 이름 Sensor, SERVICE ID 열은 11 이다.

모달은 design/SERVICE.io.model 의 인스턴스를 제공자, 소비자 순으로 나열한다. 소비자의 INSTANCE ID ANY 는 6장에서 그대로 둔 REQUIRED INSTANCE ID ANY(모델 값 65535)이다. 세 행을 한꺼번에 Bind 하면 카드도 이 순서로 생긴다.

바인딩 결과를 확인하기​

  1. 모달이 닫히고 SERVICE INSTANCES 섹션에 카드 세 장이 생긴다. 요약 줄은 배지 SOME/IP, 역할 배지 P(제공자) 또는 C(소비자), 인스턴스 이름, 삭제 × 순이고, 요약 줄 오른쪽의 포트 자리는 아직 비어 있다.

  2. 탭 AADesign:System 에 수정됨 표시 ● 가 붙고, 푸터의 V 아이콘에 빨간 배지 3 이 붙는다.

    바인딩 직후의 SERVICE INSTANCES 섹션. 카드 세 장에 포트가 없다

    그림 7-3. 바인딩 직후의 SERVICE INSTANCES 섹션. ① 카드 SOME/IP P Provider_Sensor, ② 카드 SOME/IP C Actuator_Sensor, ③ 카드 SOME/IP C Fusion_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장에서 만든 엔드포인트 목록을 열어 고른다.

카드를 펼치고 포트 목록을 열기​

  1. 카드 SOME/IP P Provider_Sensor 의 요약 줄을 클릭해 펼친다. 칸 세 개 IP ADDRESS 127.0.0.1(읽기 전용), TCP PORT(비어 있음, 안내 Unsigned Integer (0..65535)), UDP PORT(비어 있음, 같은 안내)가 보이고, 그 아래에 줄 TLS (TCP) 와 TLS (UDP) 가 각각 + 버튼(툴팁 Add TLS)과 함께 있다.

  2. UDP PORT 칸 오른쪽의 ▾ 버튼(툴팁 Select from Application Endpoints)을 클릭한다. 칸 아래에 목록 20001, 20002, 20003 이 열린다.

    Provider_Sensor 카드를 펼치고 UDP PORT 목록을 연 화면

    그림 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 을 고르기​

  1. 목록의 20003 을 클릭한다. UDP PORT 칸에 20003 이 들어가고 카드는 펼쳐진 채 남는다. 푸터 V 아이콘의 배지는 2 로 바뀐다.

  2. 캔버스의 커넥터 eth0 를 다시 클릭해 패널을 새로 그린 뒤, 카드 Provider_Sensor 의 요약 줄을 클릭해 다시 펼친다. 요약 줄 오른쪽에 UDP:20003 이 보이고 UDP PORT 칸은 20003 이다.

  3. TCP PORT 와 줄 TLS (TCP), TLS (UDP) 는 비워 둔다.

    UDP 포트 20003 이 들어간 Provider_Sensor 카드

    그림 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_Sensor20001UDP:20001
SOME/IP C Fusion_Sensor20002UDP:20002
  1. 카드 Actuator_Sensor 의 요약 줄을 클릭해 펼치고, UDP PORT 칸의 ▾ 버튼을 클릭한 뒤 목록의 20001 을 클릭한다. V 아이콘의 배지가 1 로 바뀐다.

  2. 카드 Fusion_Sensor 의 요약 줄을 클릭해 펼치고, UDP PORT 칸의 ▾ 버튼을 클릭한 뒤 목록의 20002 를 클릭한다. V 아이콘의 배지가 사라진다.

  3. 커넥터 eth0 를 다시 클릭한다. 카드 세 장이 접힌 채 요약 줄에 Provider_Sensor UDP:20003, Actuator_Sensor UDP:20001, Fusion_Sensor UDP:20002 가 보인다.

  4. APPLICATION ENDPOINTS 머리글을 클릭해 펼친다. 3장에서 만든 카드 세 장 UDP eth0, 127.0.0.1:20001, UDP eth0, 127.0.0.1:20002, UDP eth0, 127.0.0.1:20003 이 그대로 있고 새로 생긴 엔드포인트는 없다.

    세 인스턴스에 포트를 모두 정한 뒤의 패널. APPLICATION ENDPOINTS 는 3장 그대로다

    그림 7-6. 포트를 모두 정한 뒤의 패널. ① Provider_Sensor UDP:20003, ② Actuator_Sensor UDP:20001, ③ Fusion_Sensor UDP:20002, ④ 펼친 APPLICATION ENDPOINTS — 카드 세 장 UDP eth0, 127.0.0.1:20001 / :20002 / :20003 이 3장 그대로이다.

목록에서 고른 포트는 같은 번호의 UDP 엔드포인트를 그대로 참조한다. 그래서 APPLICATION ENDPOINTS 의 카드 수는 세 장에서 늘지 않는다.

저장하기​

  1. 캔버스의 빈 곳을 클릭해 커넥터 선택을 해제한다.

  2. Ctrl+S 를 누른다. 탭 AADesign:System 의 수정됨 표시 ● 가 사라지고 design/IVC.io.model 이 저장된다.

  3. 커넥터 eth0 를 다시 클릭한다. SERVICE INSTANCES 에 카드 Provider_Sensor UDP:20003, Actuator_Sensor UDP:20001, Fusion_Sensor UDP:20002 가 보인다. TX PDUS 와 RX PDUS 머리글을 펼치면 둘 다 No PDUs referenced 이다.

    저장한 뒤 커넥터 eth0 를 다시 선택한 System 편집기. 바인딩 세 개에 포트가 있다

    그림 7-7. 저장한 뒤의 System 편집기. ① 다시 선택한 커넥터 eth0, ② SERVICE INSTANCES 섹션의 카드 세 장 — Provider_Sensor UDP:20003, Actuator_Sensor UDP:20001, Fusion_Sensor UDP: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 은 바뀌지 않는다.

검증 결과 보기​

  1. 화면 아래 푸터의 왼쪽에서 다섯 번째 아이콘인 V 를 본다. 배지는 없지만 툴팁에는 0이 아니던 마지막 건수 Validation: 1 error(s), 0 warning(s), 0 info(s) 가 그대로 남아 있다. 현재 결과는 VALIDATION 패널에서 확인한다.

  2. VALIDATION 패널을 본다. 닫혀 있으면 푸터의 V 아이콘을 클릭한다.

    No validation issues. 가 보이는 Validation 패널

    그림 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-REF Provider_Sensor, UDP-PORT-REF Ecu_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/IP P Provider_Sensor, SOME/IP C Actuator_Sensor, SOME/IP C Fusion_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장에서 만든 UDP eth0, 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 의 포트를 붙인다.