본문으로 건너뛰기

System 에디터와 검증

이 장에서 할 일​

이 장에서는 지금까지 만든 설계를 두 화면으로 점검한다.

  • SYSTEM 패널: System 편집기에서 컴포지션-ECU 매핑을, VFB 편집기에서 차량 전체의 컴포지션 계층을 한눈에 본다.
  • VALIDATION 패널: PAIO가 모델을 AUTOSAR 제약(constr_*)과 PAIO 자체 규칙으로 검사한 결과를 본다. 오류 행을 클릭해 문제 요소로 이동하고, 값을 고쳐 오류를 0건으로 만든다.

이 장을 마치면 검증 패널을 열고 읽는 법, 오류 행에서 수정 위치를 찾아가는 법을 알게 된다. 완성 예제는 "No validation issues."(오류 0건) 상태이고, 따라 만든 프로젝트의 목표도 같다.

시작하기 전에​

SYSTEM 패널 보기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 System을 클릭한다. System 편집기가 탭 PNC:System으로 열린다. 이어서 캔버스 오른쪽 가장자리의 버튼 세 개 중 세 번째인 System 버튼(PAIO 로고)을 클릭한다. 속성 패널이 제목 SYSTEM으로 열리고 NAME, VERSION, DESCRIPTION, ECU MAPPING이 보인다.

    완성 예제 System 편집기의 SYSTEM 패널

    그림 11-1. SYSTEM 패널을 연 완성 예제의 System 편집기. 패널 위쪽에 NAME PncVehicle, VERSION 1.0.0, DESCRIPTION Zonal PNC tutorial vehicle이 있다. ① EDITOR 뷰 DESIGN 아래의 System. ② System 버튼. ③ ECU 노드와 HPC 노드마다 한 행씩, 모두 14행인 ECU MAPPING.

  2. ECU MAPPING 목록을 확인한다. 한 행이 캔버스의 ECU 또는 HPC 노드 하나이고, 노드 이름 앞의 배지는 노드의 종류, 행 오른쪽 끝은 그 노드에 매핑된 컴포지션이다. 모두 14행이다.

    ECU MAPPING 목록

    그림 11-3. ECU MAPPING. ECU 배지의 WestZone부터 MirrorAct_FR까지 13행이 먼저 나오고, 마지막 행이 HPC 배지의 HPC이다. 모두 14행이다. 노드마다 같은 이름의 컴포지션이 매핑되어 있다.

  3. EDITOR 뷰의 DESIGN 아래에서 VFB를 클릭한다. VFB 편집기가 탭 PNC:VFB로 열린다. 이 캔버스에서도 오른쪽 가장자리의 System 버튼을 클릭한다. 속성 패널에 NAME, VERSION, DESCRIPTION, ROOT COMPOSITION(PncVehicle), COMPOSITIONS 트리가 보인다.

    VFB 편집기의 SYSTEM 패널

    그림 11-17. SYSTEM 패널을 연 VFB 편집기. 4단계에서 컴포지션을 접은 뒤의 모습이다. ① DESIGN 아래의 VFB. ② System 버튼. ③ COMPOSITIONS.

  4. COMPOSITIONS는 처음에 모든 행이 각 컴포지션 안의 SWC까지 펼쳐져 있다. 루트 PncVehicle 아래 컴포지션 14개의 왼쪽 화살표를 하나씩 눌러 접는다. 그러면 컴포지션 14개가 한 화면에 보인다.

    모든 컴포지션을 접은 COMPOSITIONS

    그림 11-2. 모든 컴포지션을 접은 VFB 편집기의 SYSTEM 패널. ① ROOT COMPOSITION PncVehicle. ② COMPOSITIONS. 루트 PncVehicle 아래에 HPC, WestZone부터 MirrorAct_FR까지 컴포지션 14개가 있다. 행마다 펼침 화살표, 요소 종류 아이콘, 이름(타입 이름이 다르면 타입 이름도)이 보인다. 트리에는 매핑된 노드를 보여 주는 열이 없으며, 매핑은 System 편집기의 ECU MAPPING(그림 11-3)에서 본다.

참고. PARA는 HPC 컴포지션 안에 들어 있는 PARA 플랫폼 컴포지션이며, COMPOSITIONS에서 HPC를 펼치면 보인다. HPC가 이미 HPC 노드에 매핑되어 있으므로 PARA를 따로 매핑하지 않으며, 그래서 ECU MAPPING에는 PARA가 나오지 않는다.

참고. 컴포지션 행을 펼치거나 접는 것은 화면 상태일 뿐이다. 탭에 저장하지 않은 변경 표시(●)가 생기지 않는다.

참고. ECU MAPPING이나 COMPOSITIONS의 행을 클릭하면 속성 패널이 그 노드나 컴포지션의 속성(예: 제목 ECU, COMPOSITION)으로 바뀐다. SYSTEM 패널로 돌아가려면 System 버튼을 다시 클릭한다.

검증 패널 열기​

검증에는 실행 버튼이 없다. 창이 프로젝트를 열면 PAIO가 프로젝트 전체를 바로 검사하고, 모델을 편집하거나 저장할 때마다 자동으로 다시 검사한다.

  1. 창 맨 위 제목 표시줄을 확인한다. PAIO [PNC]는 이 창에 프로젝트 PNC가 열려 있다는 뜻이다. 편집기를 열지 않아도 프로젝트 전체가 검사된다.

  2. 화면 맨 아래 상태 표시줄 왼쪽 끝에는 토글 버튼이 나란히 있다. 그중 마우스를 올렸을 때 툴팁이 Toggle Validation인 버튼이 검증 아이콘이다(V 모양). 오류가 있으면 아이콘에 빨간 숫자 배지가 붙고, 툴팁이 Validation: 4 error(s), 0 warning(s), 0 info(s)처럼 심각도별 건수로 바뀐다.

    앞 장을 그대로 따라 했다면 이 절이 다루는 SOME/IP 포트 오류는 없다. 아래 그림은 소비자 포트가 겹쳐 있던 초안 상태이다.

    상태 표시줄 검증 아이콘의 배지

    그림 11-4. SOME/IP 포트가 겹친 초안 상태의 프로젝트를 연 직후의 창. ① 제목 표시줄 PAIO [PNC]. ② 아무것도 클릭하지 않았는데 상태 표시줄의 검증 아이콘에 빨간 배지 4가 붙어 있다.

  3. 검증 아이콘을 클릭한다. 편집기 영역 아래에 VALIDATION 패널이 열린다. 같은 아이콘을 다시 누르거나 패널 오른쪽 위의 × 버튼을 누르면 닫힌다.

검증 패널 읽기​

VALIDATION 패널은 한 행이 위반 하나인 표이다. 패널 제목 옆의 빨간 배지는 오류 건수이다.

열내용
ELEMENT TYPE위반이 난 요소의 종류. 예) SomeipServiceInstanceToMachineMapping, PhysicalChannel, PncMapping
NAME요소 이름. 예) VehicleState_Consumer, Backbone/VLAN_Body
DESCRIPTION무엇이 잘못되었는지 설명하는 영어 문장
CONSTR위반한 AUTOSAR 제약 번호. 예) constr_5093. AUTOSAR 번호가 없는 PAIO 자체 규칙이면 비어 있다
  • 심각도: 행 왼쪽 끝의 색 막대로 구분한다. 빨강은 error, 주황은 warning, 파랑은 info이다. 이 장에서 나오는 행은 모두 error이다.
  • 열 폭: DESCRIPTION 문장이 길면 뒤가 …로 잘린다. 열 머리글 경계를 끌어 넓힐 수 있다. 넓힌 폭은 모델에 저장되지 않고, 앱을 다시 시작하면 기본 폭으로 돌아온다. 아래 그림은 DESCRIPTION 열을 넓힌 상태이다.
  • 클릭하면 이동: 행에 마우스를 올리면 툴팁 Go to the element to fix가 나온다. 행을 클릭하면 그 요소를 가진 편집기가 열리고, 요소에 빨간 표시가 붙는다.

오류 4건이 보이는 VALIDATION 패널

그림 11-5. 오류 4건이 보이는 VALIDATION 패널. 제목 옆 배지는 4이다. 4행 모두 ELEMENT TYPE이 SomeipServiceInstanceToMachineMapping이고, CONSTR가 비어 있는 PAIO 자체 규칙이다. 설명은 "한 주소와 포트는 서비스 인스턴스 하나에만 매핑되어야 한다"는 뜻이다. ① 다음 절에서 클릭할 VehicleState_Consumer 행.

오류를 찾아 고치기: SOME/IP 포트 중복​

이 절은 소비자 인스턴스 2개가 같은 커넥터의 제공자와 같은 UDP 포트를 쓰던 초안 상태를 고치는 과정이다. 인터페이스와 SOME/IP 서비스에서 소비자 포트를 30503으로 정했다면 이 오류는 나타나지 않는다. 그때는 화면을 보며 읽고, 같은 순서(행 클릭 → 수정 위치 찾기 → 값 수정 → 재검증)를 다른 오류에 적용한다.

커넥터 (IP 주소)인스턴스 (역할)초안 UDP 포트수정 후
HPC_Eth_Rear_Conn (192.168.200.1)VehicleState_Provider (P)3050130501 (그대로)
HPC_Eth_Rear_Conn (192.168.200.1)ParkDistance_Consumer (C)3050130503
SouthZone_Eth_Conn (192.168.200.12)ParkDistance_Provider (P)3050230502 (그대로)
SouthZone_Eth_Conn (192.168.200.12)VehicleState_Consumer (C)3050230503

오류 행에서 요소 찾기​

  1. VALIDATION 패널에서 VehicleState_Consumer 행을 클릭한다.

    PNC:Interface 탭이 열리고 SERVICE 탭에서 SVC_VehicleState가 선택된다. 오른쪽 SERVICE INSTANCE 탭에 VehicleState_Consumer 카드가 빨간 테두리로 펼쳐진다.

    행 클릭으로 열린 Interface 편집기

    그림 11-6. 행을 클릭한 결과. ① 선택된 서비스 인터페이스 SVC_VehicleState. ② 빨간 테두리로 표시된 SOME/IP C VehicleState_Consumer 카드(NAME, REQUIRED INSTANCE ID 1). 아래 패널에는 오류 4건이 그대로 있다.

참고. 이 카드에는 UDP 포트 칸이 없다. 인스턴스를 어느 주소와 포트에 올리는지는 System 편집기의 커넥터 SERVICE INSTANCES에서 정한다. 오류 행이 가리키는 곳과 값을 고치는 곳이 다르므로, 다음 단계에서 System 편집기로 이동한다.

SouthZone_Eth_Conn 포트 고치기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 System을 클릭해 System 편집기(탭 PNC:System)를 연다.

  2. 캔버스에서 SouthZone 노드 위쪽의 Ethernet 커넥터를 클릭한다. 오른쪽 속성 패널 제목이 ETHERNET CONNECTOR, NAME이 SouthZone_Eth_Conn인지 확인한다.

  3. SERVICE INSTANCES가 접혀 있으면 클릭해 펼친다. 이어서 VehicleState_Consumer 줄을 클릭해 펼친다. IP ADDRESS 192.168.200.12, TCP PORT, UDP PORT 30502 칸이 나타나고, 그 아래에 빈 TLS (TCP), TLS (UDP) 줄이 있다.

    SouthZone_Eth_Conn의 서비스 인스턴스 바인딩

    그림 11-7. ① 선택한 커넥터 SouthZone_Eth_Conn. CONNECTED CHANNEL은 Backbone / VLAN_Rear (VLAN: 200), APPLICATION ENDPOINTS에는 SouthZone_Eth_Conn, 192.168.200.12:30502 하나가 있다. ② SERVICE INSTANCES. P ParkDistance_Provider와 C VehicleState_Consumer가 모두 UDP:30502이다. ③ 펼친 VehicleState_Consumer의 UDP PORT 30502.

  4. UDP PORT 칸에 30503을 입력하고 Tab을 누른다.

    참고. UDP PORT 오른쪽 ▾ 목록에는 이 커넥터의 Application Endpoint 포트만 나온다. 목록에 30503이 없으면 직접 입력한다. 새 포트를 입력하면 그 포트의 Application Endpoint(SouthZone_Eth_Conn, 192.168.200.12:30503)가 자동으로 추가된다.

    저장하지 않아도 바로 다시 검사된다. 카드가 접히고 요약이 UDP:30503으로 바뀐다. SouthZone 쪽 포트 오류 2건은 사라진다.

    포트를 바꾸면 PAIO가 SOME/IP 서비스의 신호와 PDU도 자동으로 만든다(CP-SOA 파생). 파생된 SVC_… 신호와 PDU는 곧바로 design/SIGNAL.io.model에 써지고, 열려 있는 Interface 편집기에는 SVC_…_SR, SVC_…_CS 인터페이스가 추가되므로 PNC:Interface 탭에도 ● 표시가 붙는다. 파생된 요소는 검증 오류를 내지 않으므로 파생을 되돌릴 필요가 없다.

  5. VehicleState_Consumer 줄을 다시 클릭해 카드를 펼치고 UDP PORT가 30503인지 확인한다. VALIDATION 배지가 2인지도 확인한다. 남은 2건은 HPC_Eth_Rear_Conn 쪽(192.168.200.1:30501)이다.

    SouthZone 수정 후 오류 2건

    그림 11-10. 포트를 바꾼 직후 VehicleState_Consumer 카드를 다시 펼친 SouthZone_Eth_Conn. ① UDP PORT 30503. ② 주황 테두리로 표시한 VALIDATION 패널 전체. 제목 옆 배지가 2이다. VehicleState_Provider와 ParkDistance_Consumer가 192.168.200.1:30501을 함께 쓰고 있다. ③ APPLICATION ENDPOINTS의 ...:30502와 ...:30503. 두 탭 모두 ●(저장하지 않은 변경)가 붙어 있다.

  6. Ctrl+S를 누른다. 활성 탭 PNC:System만 저장되고 PNC:Interface에는 ● 표시가 남는다. PROJECT › Save All을 선택해 그 탭도 저장한다. 두 탭의 ● 표시가 모두 사라진다.

HPC_Eth_Rear_Conn 포트 고치기​

같은 방법으로 남은 2건을 고친다.

  1. VALIDATION 패널에서 ParkDistance_Consumer 행을 클릭한다. PNC:Interface 탭에서 ParkDistance_Consumer 카드가 빨간 테두리로 표시된다.

    오류 2건이 남은 VALIDATION 패널

    그림 11-11. 첫 수정을 저장한 뒤의 패널. 배지 2. ① 클릭할 ParkDistance_Consumer 행.

  2. PNC:System 탭으로 돌아가 HPC 노드 아래쪽 가장자리의 커넥터 두 개 중 오른쪽을 클릭한다. HPC에는 Ethernet 커넥터가 둘(HPC_Eth_Body_Conn, HPC_Eth_Rear_Conn) 있으므로, NAME이 HPC_Eth_Rear_Conn이고 CONNECTED CHANNEL이 Backbone / VLAN_Rear (VLAN: 200)인지 확인한다.

  3. SERVICE INSTANCES에서 ParkDistance_Consumer 줄을 클릭해 펼친다. IP ADDRESS가 192.168.200.1, UDP PORT가 30501이다. UDP PORT에 30503을 입력하고 Tab을 누른다.

  4. 이번에는 카드가 펼쳐진 채로 남고 UDP PORT는 30503이다. 다만 카드 요약 줄은 아직 UDP:30501이며, 커넥터를 다시 선택하면 새 포트로 바뀐다.

  5. 패널에 "No validation issues."가 표시되는지 확인한다.

    HPC_Eth_Rear_Conn 수정 후 0건

    그림 11-12. ① 선택한 커넥터 HPC_Eth_Rear_Conn. APPLICATION ENDPOINTS에 ...:30501과 ...:30503이 있다. SERVICE INSTANCES에서 P VehicleState_Provider는 UDP:30501이고, C ParkDistance_Consumer의 요약 줄도 아직 UDP:30501이다. ② UDP PORT 30503. ③ "No validation issues.". 아직 저장 전이라 PNC:System 탭에 ● 표시가 있다.

  6. Ctrl+S를 눌러 저장한다. 이번에는 PNC:System에만 ● 표시가 있으므로 Ctrl+S로 충분하다.

저장한 결과 다시 검증하기​

  1. 아무것도 클릭할 필요가 없다. 저장하면 프로젝트가 저절로 다시 검사된다.

  2. 패널에 "No validation issues."가 표시되고, 패널 제목과 상태 표시줄 검증 아이콘에 배지가 없는지 확인한다.

    저장 후 다시 검증한 결과

    그림 11-13. 저장한 뒤의 화면. ① "No validation issues.". ② 배지가 없는 상태 표시줄 검증 아이콘. 속성 패널의 ParkDistance_Consumer 요약 줄은 커넥터를 다시 선택할 때까지 UDP:30501로 보인다.

    오류 0건 패널 확대

    그림 11-14. 오류 0건일 때의 VALIDATION 패널. 제목 옆에 배지가 없고, 표에는 "No validation issues." 한 줄만 있다.

실시간 검증 확인하기: PNC GATEWAY TYPE​

검증은 저장하지 않은 편집에도 바로 반응한다. 완성 예제에서 게이트웨이 설정 하나를 잘못 바꿔 보고, 다시 되돌려 오류가 사라지는 것을 확인한다. 이 절에서는 저장하지 않는다.

  1. PNC:System 탭을 연다(탭이 없으면 EDITOR 뷰의 DESIGN 아래에서 System을 클릭한다). EastZone 노드 위쪽의 Ethernet 커넥터를 클릭하고, NAME이 EastZone_Eth_Conn, CONNECTED CHANNEL이 Backbone / VLAN_Body (VLAN: 100)인지 확인한다.

  2. 속성 패널의 PARTIAL NETWORK가 접혀 있으면 클릭해 펼친다. PNC GATEWAY TYPE이 PASSIVE로 선택되어 있다.

  3. ACTIVE를 클릭한다. 저장하지 않아도 VALIDATION 패널에 오류 2건이 나타난다.

    EastZone_Eth_Conn을 ACTIVE로 바꾼 결과

    그림 11-15. 속성 패널의 NETWORK ENDPOINT / APPLICATION ENDPOINTS / SERVICE INSTANCES / SOCKET CONNECTIONS는 접어 두었다. ① PNC GATEWAY TYPE의 NONE / ACTIVE / PASSIVE 중 ACTIVE가 선택된 상태. ② PhysicalChannel Backbone/VLAN_Body 행, constr_5093: VLAN_Body 채널에 active 커넥터가 2개(WestZone_Eth_Conn, EastZone_Eth_Conn)이며 최대 1개만 허용된다는 뜻이다. ③ PncMapping PNC_Comfort 행, constr_3714: PNC_Comfort의 top-level PNC 코디네이터 WestZone과 EastZone이 active 커넥터 경로로 서로 이어진다는 뜻이다. 탭에 ● 표시가 붙었다.

  4. PASSIVE를 다시 클릭한다. 두 행이 바로 사라지고 "No validation issues."로 돌아온다. 다만 설정이 저장된 값으로 돌아왔는데도 탭의 ● 표시는 남아 있다.

    PASSIVE로 되돌린 결과

    그림 11-16. ① PNC GATEWAY TYPE이 다시 PASSIVE. ② "No validation issues.". 탭 이름 옆의 ● 표시는 그대로 있다.

  5. 이 절에서는 저장하지 않으므로 탭을 저장하지 않고 닫는다. PNC:System 탭에 마우스를 올리면 나타나는 ×(툴팁 Close)를 클릭하고, Unsaved Changes 창이 나타나면 Don't Save를 클릭한다.

참고. 원인 하나가 여러 제약을 동시에 어길 수 있다. EastZone_Eth_Conn 하나를 ACTIVE로 바꾸면 채널 규칙(constr_5093)과 코디네이터 규칙(constr_3714)이 함께 보고된다. 같은 원인을 고치면 둘 다 사라진다.

PNC 설계와 관련된 주요 제약​

완성 예제는 아래 제약을 모두 지킨다. 이 표는 예제를 처음 만들 때 검증 패널이 보고했던 항목과 그 수정 내용이다. 앞 장을 그대로 따라 했다면 지금은 나타나지 않는다. 같은 오류가 보이면 해당 장을 다시 확인한다.

제약검증 패널이 보고한 내용수정관련 장
constr_3040PNC 식별자 8/9/10이 PNC 벡터 비트 범위(16..63) 밖식별자를 17/18/19로 변경PNC 정의와 커넥터 PNC 속성
constr_3686필터 마스크가 3바이트로, PNC VECTOR LENGTH 6과 다름6바이트로 다시 계산PDU GROUPS·MATRIX·NM VECTOR 검토
constr_5093백본 채널에 active 게이트웨이 커넥터가 3개백본을 VLAN_Body / VLAN_Rear로 나누고, VLAN마다 active 1개토폴로지 설계
constr_3714 / constr_3781top-level 코디네이터끼리 active 경로로 이어짐 / 코디네이터가 없음WestZone, SouthZone은 양쪽 active(top-level), EastZone은 백본 쪽 passivePNC 정의와 커넥터 PNC 속성
constr_3514I-Signal(LockCmd 등) 하나가 PDU 두 개에 매핑됨좌/우 신호를 _FL / _FR로 분리신호·PDU·프레임과 I-PDU Group
constr_9157–9159, constr_9162CanNm 클러스터의 필수 속성 누락통신 클러스터 대화상자의 CAN NM CLUSTER 탭에서 nmBusloadReductionActive, nmImmediateNmTransmissions, nmMessageTimeoutTime, nmRemoteSleepIndicationTime 네 속성을 채움NM 설정
constr_5222UdpNm 클러스터의 필수 속성 누락통신 클러스터 대화상자의 UDP NM CLUSTER 탭에서 nmMessageTimeoutTime, nmRemoteSleepIndicationTime을 채움. 나머지 필수 값(nmMsgCycleTime, nmRepeatMessageTime, nmWaitBusSleepTime, nmNetworkTimeout)은 NM 클러스터가 만들어질 때 기본값으로 들어간다. NmCluster_VLAN_Rear는 화면에서 열 수 없어 이 방법으로 채울 수 없다NM 설정
constr_9165 / 9166NM 클러스터 커플링의 필수 플래그 누락커플링은 현재 화면에서 만들거나 고칠 수 없으며 ARXML을 들여올 때 값과 함께 들어온다NM 설정
(PAIO NM 규칙)NetworkHandle에 INACTIVE→FunctionGroup 상태 매핑이 없음 ("PNC release stops nothing")ParkAssistFG / TrailerFG의 Off 매핑 추가AP 머신 — NM 핸들과 FunctionGroup
constr_10641SM 모듈의 max-action-list-duration 누락1.0 s 설정AP 머신 — NM 핸들과 FunctionGroup

왜 0건을 목표로 하는가​

설계 근거. 검증 패널은 정보를 주는 도구이며, 오류가 있어도 저장이나 익스포트를 막지 않는다. 그러나 위 표의 항목은 모두 익스포트한 ARXML을 다른 도구(ComM/Nm 설정 생성기 등)가 해석할 때 실제 동작 오류로 이어진다. 그래서 PNC 설계는 "No validation issues."가 될 때까지 다듬는다. 검증 0건은 AUTOSAR 제약을 지킨다는 뜻이고, ARXML 스키마(XSD) 검사는 익스포트 단계에서 따로 한다.

확인하기​

  • VFB 편집기 SYSTEM 패널의 COMPOSITIONS에 루트 PncVehicle 아래 컴포지션 14개가 있다.
  • System 편집기 SYSTEM 패널의 ECU MAPPING에 노드 14개(ECU 13개, HPC 1개)가 있고, 모두 같은 이름의 컴포지션에 매핑되어 있다.
  • 프로젝트를 연 창의 VALIDATION 패널에 "No validation issues."가 표시되고, 상태 표시줄 검증 아이콘에 배지가 없다.
  • 커넥터를 각각 선택하면 HPC_Eth_Rear_Conn의 ParkDistance_Consumer와 SouthZone_Eth_Conn의 VehicleState_Consumer가 모두 UDP:30503이다.
  • EastZone_Eth_Conn의 PNC GATEWAY TYPE이 PASSIVE이다.
  • 탭 이름에 저장하지 않은 변경 표시(●)가 없다.

다음 단계​

ARXML 익스포트에서 검증을 마친 설계를 ARXML 문서로 내보내고 결과 파일을 확인한다.