본문으로 건너뛰기

검증

이 장에서 할 일​

이 장에서는 지금까지 만든 설계에 결함 세 개를 일부러 심고, PAIO 검증이 그것을 어떻게 보고하는지 본다. PAIO 는 창이 프로젝트를 여는 즉시 검증하므로, 푸터의 V 아이콘으로 VALIDATION 패널을 열어 네 행(오류 셋, 경고 하나)과 배지를 읽기만 하면 된다. 그다음 행을 클릭해 문제 요소로 바로 이동하고, 화면에서 값을 고쳐 저장한다.

고칠 곳은 세 군데이다. Fusion 의 DLT 애플리케이션 ID 를 FUSN 으로 되돌리고, EM 프로세스에 함수 그룹 상태 MachineFG : Startup 을 넣고, Sensor 의 P 포트 인터페이스를 Service: Sensor 로 되돌린다. Fusion 을 처음부터 끝까지 절차로 보이고, 나머지 둘도 같은 흐름으로 따라간다.

이 장을 마치면 VALIDATION 패널이 다시 No validation issues. 가 되고, 패널 제목 옆과 푸터의 배지가 사라진다. 세 값은 로그와 DLT까지 마친 설계와 같아진다.

시작하기 전에​

  • 로그와 DLT를 마친 상태에서 시작한다. 이때 VALIDATION 패널은 No validation issues. 이다.
  • 이 장의 화면은 그 설계에 아래 결함 세 개가 들어 있는 상태이다. 편집기는 하나도 열려 있지 않고, VALIDATION 패널도 닫혀 있다.
결함파일 (design/SWC/AdaptiveApplication/)원래 값심은 값
Fusion 의 DLT 애플리케이션 ID 가 Sensor 와 같음Fusion.swc.io.model › process.log-config.application-idFUSNSENS
EM 프로세스에 함수 그룹 상태가 없음EM.swc.io.model › process.startup-configs[0].function-group-statesMachineFG : Startup 한 행[] (빈 목록)
Sensor 의 P 포트가 없는 인터페이스를 가리킴Sensor.swc.io.model › ports[0].port-interfaceSensorSensorIf

참고. 결함을 직접 만들어 따라 하려면 위 표의 값을 바꾼다. 첫째는 Fusion 의 LOG CONFIG 에서 APPLICATION ID 를 SENS 로 바꾸면 되고, 둘째는 EM 의 FUNCTION GROUP STATE 행 끝 ×(툴팁 Remove Function Group State)로 행을 지우면 된다. 셋째는 화면에서 만들 수 없다. PORT INTERFACE 드롭다운에는 Service: Sensor 하나만 있기 때문이다. 셋째는 PAIO 를 닫은 상태에서 Sensor.swc.io.model 의 "port-interface": "Sensor" 를 "port-interface": "SensorIf" 로 고쳐 만든다.

이 장에서 키보드로 입력하는 값은 APPLICATION ID 의 FUSN 하나뿐이다. 나머지는 클릭, + 버튼, 드롭다운 선택, Ctrl+S, Close 이다.

검증을 돌리고 VALIDATION 패널 읽기​

VALIDATION 패널 열기​

  1. 화면 왼쪽 아래 푸터의 V 아이콘을 본다. PAIO 는 창이 프로젝트를 열 때 편집기를 열지 않아도 프로젝트 전체를 검증하므로, 아이콘에는 이미 빨간 배지 4 가 붙어 있다. 아이콘에 마우스를 올리면 툴팁이 Validation: 3 error(s), 1 warning(s), 0 info(s) 이다.

  2. 푸터의 V 아이콘을 클릭한다. 화면 아래에 VALIDATION 패널이 열린다. 제목 옆에 빨간 배지 3(툴팁 3 error(s))이 있고, 열 머리글은 ELEMENT TYPE, NAME, DESCRIPTION, CONSTR 이다. 그 아래 네 행이 있다. 오류 세 행과 경고 한 행이다. 패널 배지는 오류 행만 세고, 푸터 배지는 모든 행을 센다.

    결함 세 개를 심은 설계를 검증한 VALIDATION 패널

    그림 12-1. 패널을 연 화면. ① 패널 제목 VALIDATION 옆의 배지 3, ② 네 행, ③ 푸터의 V 아이콘(배지 4). 편집기는 열려 있지 않아 가운데는 빈 편집기 영역(Open a file to start editing)이다. 기본 열 너비에서는 네 행 모두 설명이 … 로 잘린다.

열 읽기​

패널의 한 행은 검증이 찾은 문제 하나이다. 열의 뜻은 다음과 같다.

열내용
ELEMENT TYPE문제가 있는 요소의 종류
NAME그 요소의 이름
DESCRIPTION무엇이 잘못됐는지 설명하는 문장
CONSTRAUTOSAR 제약 번호(constr_*). 이 장의 네 행은 모두 PAIO 자체 규칙이라 비어 있다
  1. 설명이 잘려 보이면 DESCRIPTION 머리글의 오른쪽 경계를 오른쪽으로 끌어 넓힌다. 이 단계는 선택 사항이다. 넓히면 네 문장이 모두 끝까지 보인다.

    DESCRIPTION 열을 넓혀 네 문장이 모두 보이는 패널

    그림 12-2. DESCRIPTION 열을 넓힌 VALIDATION 패널. ① DltApplication SENS 행(… (Sensor).), ② DltApplication SENS 행(… (Fusion).), ③ Process EM 행, ④ PortPrototype Sensor 행(경고).

네 행은 패널 순서대로 다음과 같다. 행 1~3 은 오류이고 행 4 는 경고이다. 각 행 왼쪽 끝의 가는 막대가 이를 구분해 주며, 오류는 빨강, 경고는 주황이다. CONSTR 칸은 비어 있다.

#ELEMENT TYPENAMEDESCRIPTION클릭하면 이동하는 곳
1DltApplicationSENSThe DLT application-id "SENS" truncates to "SENS" and collides with "SENS" (Sensor).AA Internal Behavior [Fusion] › EXECUTION › LOG CONFIG › APPLICATION ID
2DltApplicationSENSThe DLT application-id "SENS" truncates to "SENS" and collides with "SENS" (Fusion).AA Internal Behavior [Sensor] › 같은 칸
3ProcessEMThe process "EM" declares no functionGroupState; at least one is required.AA Internal Behavior [EM] › EXECUTION › FUNCTION GROUP STATE
4PortPrototypeSensor"Sensor" of "Sensor": referenced port interface "SensorIf" not found.VFB 편집기 System > HPC, 속성 패널 PPORT › PORT INTERFACE

참고. 결함은 셋인데 행은 넷이다. DLT 애플리케이션 ID 가 겹치면 겹친 두 애플리케이션에 한 행씩, 두 행이 나오기 때문이다. 문장 끝 괄호는 겹친 상대편 을 가리킨다. 행 1 의 요소는 Fusion 쪽이고 (Sensor) 는 상대편이다. 그래서 행 1 을 클릭하면 Fusion 이 열린다.

참고. 행은 한 번 클릭 하면 이동한다. 이동할 수 있는 행에 마우스를 올리면 툴팁 Go to the element to fix 가 뜬다.

Fusion 의 DLT 애플리케이션 ID 고치기​

행을 클릭해 APPLICATION ID 로 이동하기​

  1. VALIDATION 패널의 첫째 행(DltApplication, SENS, … (Sensor).)을 클릭한다. VFB 편집기 탭 AADesign:VFB 가 System > HPC 안으로 열리고, 그 위에 다이얼로그 AA Internal Behavior [Fusion] 가 EXECUTION 탭으로 뜬다. 프로세스 카드와 LOG CONFIG 가 저절로 펼쳐지고, APPLICATION ID 칸(값 SENS)이 빨간 라벨과 밑줄로 표시된 채 값이 선택되어 포커스를 받는다.

    행 1 을 클릭해 열린 AA Internal Behavior [Fusion] 다이얼로그

    그림 12-3. 첫째 행을 클릭한 결과. ① 다이얼로그 제목 AA Internal Behavior [Fusion]. 오른쪽 패널은 EXECUTION 탭이고, 왼쪽 캔버스에는 Fusion 과 R 포트 Sensor, 서비스 인스턴스 매핑 Fusion/AA/Sensor 가 보인다. 이 그림은 오른쪽 패널을 LOG CONFIG 까지 내린 모습이다. ② APPLICATION ID 칸(값 SENS)이 빨간 라벨과 밑줄로 표시되고 값이 선택되어 있다. 칸이 보이지 않으면 오른쪽 패널을 아래로 스크롤한다.

FUSN 을 입력하고 저장하기​

  1. APPLICATION ID 칸에 FUSN 을 입력하고 Tab 을 누른다. 값이 선택된 상태이므로 바로 입력하면 SENS 가 덮어써진다. 제목이 ● AA Internal Behavior [Fusion] 으로 바뀐다.

  2. 다이얼로그 안에서 Ctrl+S 를 누른다. 제목의 ● 가 사라지고, 다이얼로그가 열린 채로 푸터의 배지가 2 로 바뀐다. 저장하면 LOG CONFIG 가 접히므로 머리글을 클릭해 다시 펼친다. APPLICATION ID 는 FUSN 이고 빨간 표시는 사라져 있다.

    APPLICATION ID 를 FUSN 으로 고쳐 저장한 Fusion 다이얼로그

    그림 12-4. 저장한 뒤 LOG CONFIG 를 다시 펼친 화면. ① 수정됨 표시가 없는 제목 AA Internal Behavior [Fusion], ② APPLICATION ID = FUSN. DEFAULT LOG LEVEL 은 VERBOSE(VER…), LOG MODE 는 CONSOLE 그대로이다. 푸터의 V 아이콘 배지는 2 이다.

  3. Close 를 클릭한다. 저장했으므로 묻는 창 없이 닫힌다.

참고. 행 클릭이 펼친 아코디언은 다이얼로그가 탭을 다시 그릴 때마다 다시 접히고, 저장하면 탭이 다시 그려진다. 그래서 저장하면 LOG CONFIG 는 접히고 프로세스 카드와 STARTUP CONFIG 는 펼쳐진 채로 남는다. 직접 펼친 아코디언은 펼쳐진 채로 남는다.

다이얼로그를 닫으면 VALIDATION 패널에 두 행(오류 Process EM, 경고 PortPrototype Sensor)만 남는다. 패널 배지는 1, 푸터 배지는 2 이다. 저장하는 순간 패널이 다시 계산되므로 다시 돌릴 것은 없다. Fusion 하나만 고쳤는데 행 1 과 행 2 가 함께 사라진 것은, 두 행이 같은 충돌 하나에서 나왔기 때문이다. 행 2 는 클릭할 필요가 없다.

EM 에 함수 그룹 상태 넣기​

행을 클릭해 FUNCTION GROUP STATE 로 이동하기​

  1. Process EM 행을 클릭한다. 다이얼로그 AA Internal Behavior [EM] 가 EXECUTION 탭으로 열린다. 프로세스 카드 EM 의 FUNCTION GROUP STATE 아코디언이 펼쳐진 채 빨갛게 표시되고, 안에는 No function group states defined 뿐이다.

    EM 행을 클릭해 열린 FUNCTION GROUP STATE

    그림 12-5. Process EM 행을 클릭한 결과. ① 다이얼로그 제목 AA Internal Behavior [EM], ② FUNCTION GROUP STATE 의 내용 No function group states defined, ③ 머리글 오른쪽의 + 버튼. STARTUP CONFIG 의 ENTER TIMEOUT 과 EXIT TIMEOUT 은 Executable 과 Process에서 넣은 0 이다.

Startup 상태를 추가하기​

  1. FUNCTION GROUP STATE 머리글 오른쪽의 + 버튼(툴팁 Add Function Group State)을 클릭한다. 행 MachineFG : Off 가 추가되고 제목이 ● AA Internal Behavior [EM] 으로 바뀐다. + 도 탭을 다시 그리므로 행 클릭이 펼친 FUNCTION GROUP STATE 아코디언이 접히고 빨간 표시도 사라진다. 머리글을 클릭해 다시 펼치면 새 행이 보인다.

  2. 행 머리글 MachineFG : Off 를 클릭해 펼친다. FUNCTION GROUP 칸은 MachineFG, FUNCTION GROUP STATE 칸은 Off 이다.

  3. FUNCTION GROUP STATE 칸을 클릭한다. 드롭다운에 Off(현재 값, 체크 표시), Startup, Shutdown, Restart, Verify 가 보인다.

    FUNCTION GROUP STATE 드롭다운에서 Startup 을 고르는 화면

    그림 12-6. 새 행의 상태 드롭다운. ① 새 행 머리글 MachineFG : Off, ② FUNCTION GROUP STATE 칸, ③ 드롭다운 항목 Startup. 제목은 ● AA Internal Behavior [EM] 이다.

  4. Startup 을 클릭한다. 행 머리글이 MachineFG : Startup 으로 바뀐다.

저장하고 닫기​

  1. 다이얼로그 안에서 Ctrl+S 를 누른다. 제목의 ● 가 사라진다. 푸터의 배지가 1 로 바뀌고, 남은 한 행이 경고이므로 주황색이 된다.

    Startup 을 고르고 저장한 EM 다이얼로그

    그림 12-7. 저장한 뒤의 화면. ① 수정됨 표시가 없는 제목 AA Internal Behavior [EM], ② 행 MachineFG : Startup. 그 아래 FUNCTION GROUP 은 MachineFG, FUNCTION GROUP STATE 는 Startup 이다. 푸터의 V 아이콘 배지는 주황색 1 이다.

  2. Close 를 클릭한다. 묻는 창 없이 닫힌다. VALIDATION 패널에는 경고 PortPrototype Sensor 한 행이 남는다. 오류가 남지 않았으므로 패널 제목 옆의 배지는 사라지고, 푸터 배지는 1 이다.

EM.swc.io.model 의 process.startup-configs[0].function-group-states 는 [{"function-group":"MachineFG","state":"Startup"}] 가 된다. FUNCTION GROUP STATE 아코디언과 행은 직접 펼쳤으므로, 그림 12-7 처럼 저장한 뒤에도 펼쳐진 채로 남는다.

Sensor 포트의 인터페이스 되돌리기​

행을 클릭해 PORT INTERFACE 로 이동하기​

  1. PortPrototype Sensor 행을 클릭한다. 이번에는 다이얼로그가 열리지 않는다. 열려 있는 VFB 편집기(System > HPC)에서 노드 Sensor 가 주황색으로 빛나고, 그 P 포트 Sensor 가 선택된다. 오른쪽 속성 패널의 제목은 PPORT, NAME 은 Sensor 이다. PORT INTERFACE 라벨과 밑줄이 주황색이고, 값 SensorIf 아래에 Referenced item not found 가 붙는다. 이 행은 경고이므로 표시가 빨강이 아니라 주황이다.

    PortPrototype 행을 클릭해 선택된 Sensor 의 P 포트와 PORT INTERFACE

    그림 12-8. PortPrototype Sensor 행을 클릭한 결과. ① 주황색으로 표시된 노드 Sensor, ② 속성 패널 PPORT 의 PORT INTERFACE(값 SensorIf, 아래에 Referenced item not found), ③ VALIDATION 패널에 남은 한 행. 패널 제목에는 배지가 없고, 푸터의 V 아이콘에는 주황색 배지 1 이 있다. 캔버스에는 커넥터 선이 보이지 않는다. 아래 "참고"를 본다.

참고. 같은 "행 클릭"이라도 이동하는 곳이 다르다. DltApplication 과 Process 행은 AA Internal Behavior 다이얼로그를 열고 해당 칸을 펼쳐 표시한다. PortPrototype 행은 다이얼로그 없이 VFB 편집기에서 노드를 표시하고 포트를 선택해 속성 패널의 칸을 표시한다.

Service: Sensor 를 고르기​

  1. 속성 패널의 PORT INTERFACE 칸을 클릭한다. 안내 글자 Type to search... 가 있는 드롭다운이 열리고, 항목은 Service: Sensor 하나뿐이다.

    PORT INTERFACE 드롭다운의 항목 Service: Sensor

    그림 12-9. 열린 PORT INTERFACE 드롭다운. ① 입력 칸(Type to search...), ② 유일한 항목 Service: Sensor.

  2. Service: Sensor 를 클릭한다. 칸이 Service: Sensor 가 되고, AADesign:VFB 탭에 수정됨 표시가 붙는다.

  3. VFB 탭에서 Ctrl+S 를 누른다. 수정됨 표시가 붙은 탭이 없어진다. VALIDATION 패널은 No validation issues. 이고, 패널 제목 옆과 푸터 V 아이콘의 배지도 없다.

Sensor.swc.io.model 의 ports[0].port-interface 는 Sensor 가 된다.

참고. 포트를 고치고 저장해도 캔버스에 커넥터 선이 다시 그려지지 않고, 빵부스러기에서 System 을 클릭한 뒤 노드 HPC [Ecu] 를 다시 더블클릭해도 마찬가지이다. 파일 design/SWC/Composition/HPC.swc.io.model 에는 커넥터 Assembly_Sensor_Fusion 과 Assembly_Sensor_Actuator 가 그대로 있다. 포트가 없는 인터페이스를 가리키던 동안 열려 있던 VFB 탭은 탭을 닫았다가 다시 열 때까지 그 포트의 선을 그리지 않는다. AADesign:VFB 탭을 닫고 EDITOR 뷰의 DESIGN 아래에서 VFB 를 클릭해 다시 연 뒤 노드 HPC [Ecu] 를 더블클릭하면 두 선이 그려진다. 탭을 닫을 때 묻는 창은 뜨지 않는다.

다시 검증하기​

  1. VALIDATION 패널을 본다. VFB 탭을 저장할 때 PAIO 가 프로젝트를 다시 검증했으므로 따로 클릭할 것은 없다. 본문이 No validation issues. 이고, 패널 제목 옆과 푸터 V 아이콘의 배지가 모두 없다.

    세 결함을 고친 뒤 다시 검증한 화면

    그림 12-10. VFB 탭을 저장한 직후의 화면. ① No validation issues. 행, ② 배지가 없는 푸터 V 아이콘. 속성 패널에는 PORT INTERFACE Service: Sensor 와 SERVICE COMSPEC(EVENTS ByteArray SensorData QUEUED-SENDER, METHODS Calculation SERVER)이 보인다. 커넥터 선은 아직 그려져 있지 않다. 위 "참고"를 본다.

참고. 건수가 0으로 돌아오면 V 아이콘의 배지는 사라지지만, V 아이콘의 툴팁에는 마지막 건수 Validation: 0 error(s), 1 warning(s), 0 info(s) 가 그대로 남는다. 현재 결과는 VALIDATION 패널에서 확인한다.

패널은 저장할 때마다 다시 계산된다. 고칠 때마다 행과 배지는 다음과 같이 줄어든다.

고친 뒤패널에 남은 행패널 배지푸터 배지
시작4 (오류 3, 경고 1)34(빨강)
Fusion APPLICATION ID → FUSN 저장2 (Process EM, PortPrototype Sensor)12(빨강)
EM → MachineFG : Startup 저장1 (PortPrototype Sensor)없음1(주황)
Sensor 포트 → Service: Sensor 저장0, No validation issues.없음없음

왜 이렇게 설계하는가​

  • EM 을 MachineFG : Startup 에 묶는 것은 참조 설계와 일부러 다르게 한 곳이다. 참조 설계의 EM 프로세스에는 FUNCTION-GROUP-STATE-IREF 가 없다. 이 장의 둘째 결함이 바로 그 모양이고, PAIO 검증은 그것을 The process "EM" declares no functionGroupState; at least one is required. 로 거부한다. 그래서 이 튜토리얼은 Executable 과 Process에서 EM 을 Startup 에 묶었고, 이 장에서도 같은 값으로 되돌린다.
  • DLT 애플리케이션 ID 는 머신 안에서 서로 달라야 한다. 로그와 DLT에서 다섯 프로세스에 SENS, FUSN, ACTA, CM, EM 을 따로 정한 이유이다. 문장의 truncates to "SENS" 는 규칙이 ID 를 앞 4글자로 잘라 비교한다는 뜻이다. DLT 메시지에 실리는 애플리케이션 ID 가 4글자이기 때문이다. SENS 는 이미 4글자라 잘라도 같다.
  • 포트 인터페이스는 이름으로 이어진다. 포트는 인터페이스를 이름으로 가리키므로, 그 이름의 인터페이스가 없으면 referenced port interface "SensorIf" not found. 가 된다. PAIO 는 아무것도 가리키지 못하는 참조를 경고로, 반드시 채워야 하는데 비어 있는 참조를 오류로 보고한다. 이 설계의 서비스 인터페이스는 서비스 인터페이스에서 만든 Sensor 하나뿐이어서 드롭다운 항목도 Service: Sensor 하나이다.

확인하기​

  • VALIDATION 패널이 No validation issues. 이다.
  • VALIDATION 패널 제목 옆과 푸터 V 아이콘에 배지가 없다.
  • AA Internal Behavior [Fusion] › EXECUTION › LOG CONFIG 의 APPLICATION ID 가 FUSN 이다.
  • AA Internal Behavior [EM] › EXECUTION › FUNCTION GROUP STATE 에 행 MachineFG : Startup 이 하나 있다.
  • VFB 편집기 System > HPC 에서 Sensor 의 P 포트를 선택하면 속성 패널 PPORT 의 PORT INTERFACE 가 Service: Sensor 이고 Referenced item not found 가 없다.
  • 다이얼로그 제목과 탭 AADesign:VFB 에 수정됨 표시 ● 가 없다.

다음 단계​

ARXML 익스포트에서 검증을 통과한 설계를 ARXML 파일로 내보내고 참조 설계와 비교한다.