본문으로 건너뛰기

AP 머신 — NM 핸들과 FunctionGroup

이 장에서 할 일​

HPC는 AP(Adaptive Platform) 머신이다. HPC는 PNC(Partial Network Cluster) 게이트웨이가 아니라, NM(Network Management) 네트워크 핸들을 통해 PNC를 요청하고 해제하는 참여자이다. 이 장에서는 HPC의 Machine Configuration 다이얼로그를 열고, PNC와 짝이 되는 FunctionGroup을 먼저 만든 다음 NM 네트워크 핸들을 만들어 둘을 이어 준다.

대표로 ParkAssistFG와 NH_ParkAssist를 처음부터 끝까지 따라 만든다. 나머지는 각 절의 값 표를 보고 같은 방법으로 반복한다.

이 장을 마치면 HPC 머신에 FunctionGroup 4개(MachineFG, ParkAssistFG, TrailerFG, ComfortFG)와 NM 네트워크 핸들 3개(NH_Comfort, NH_ParkAssist, NH_Trailer)가 있다. 핸들마다 PNC 1개와 FunctionGroup 상태 매핑 2개가 들어 있고, State Management 모듈에는 MAX ACTION LIST DURATION 값이 들어 있다.

시작하기 전에​

  • PDU GROUPS·MATRIX·NM VECTOR 검토까지 마쳐야 한다. 이 장은 그 상태에서 이어진다.
  • 이 장에서 만드는 것은 다음 세 가지이다.
    • FunctionGroup 3개: ParkAssistFG, TrailerFG, ComfortFG
    • State Management 모듈의 MAX ACTION LIST DURATION 값 1 s
    • NM 네트워크 핸들 3개: NH_ParkAssist, NH_Comfort, NH_Trailer. 핸들마다 PNC 1개와 FunctionGroup 상태 매핑 2개를 넣는다.
  • MachineFG는 Machine Configuration 다이얼로그를 열 때 PAIO가 자동으로 넣어 준다. 직접 만들지 않으며, 지울 수도 없다.
  • Machine Configuration 다이얼로그의 전체 기능은 VFB 에디터의 8.10절을 참고한다.

대표로 따라 만드는 ParkAssistFG와 NH_ParkAssist의 값은 다음과 같다.

항목값
FunctionGroup NAMEParkAssistFG
FunctionGroup DESCRIPTIONPark-assist function group driven by PNC_ParkAssist
FunctionGroup GROUP NAME / INITIAL MODEParkAssistState / Off
FunctionGroup MODE DECLARATIONOff, Active
핸들 NAMENH_ParkAssist
핸들 VLANS (ETHERNET CONNECTORS)HPC_Eth_Rear_Conn
핸들 PARTIAL NETWORKSPNC_ParkAssist (PNC 18)
매핑 1ParkAssistFG:Active → FUNCTION-GROUP-STATE-TO-NM-HANDLE
매핑 2ParkAssistFG:Off → NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE

Machine Configuration 다이얼로그 열기​

  1. 왼쪽 EDITOR 뷰의 DESIGN 아래에서 VFB를 클릭한다. VFB 편집기가 탭 PNC:VFB로 열리고, 루트 컴포지션 PncVehicle이 보인다.

  2. 캔버스에서 HPC [HPC] 컴포지션을 찾는다. 작게 보이면 Ctrl+마우스 휠로 확대한다.

  3. HPC [HPC] 헤더 오른쪽의 머신 아이콘(밝은 파란색 3단 막대 모양)을 클릭한다. 맨 오른쪽 끝의 네모 아이콘은 컴포지션 표시이므로 누르지 않는다. 컴포지션 안으로 들어가지 않고 루트 화면에서 바로 누르면 된다.

    VFB 루트 화면의 HPC 컴포지션과 머신 아이콘

    그림 9-1. VFB 루트 화면. ① HPC [HPC] 컴포지션. ② 헤더 오른쪽의 머신 아이콘. EastZone [EastZone], MirrorAct_FR [MirrorAct_FR] 같은 다른 컴포지션에는 같은 자리에 초록색 아이콘이 있다. 초록색 아이콘은 ECU Configuration을 연다. ③ EDITOR 뷰 DESIGN 아래의 VFB.

    HPC 컴포지션 헤더의 머신 아이콘 확대

    그림 9-2. HPC [HPC] 헤더를 확대한 모습. ① 누를 머신 아이콘.

  4. Machine Configuration [HPC] 다이얼로그가 MACHINE 탭으로 열린다.

    Machine Configuration [HPC] 다이얼로그의 MACHINE 탭

    그림 9-3. 막 연 Machine Configuration [HPC] 다이얼로그. 탭은 MACHINE / FUNCTION GROUP / PROCESSES / MODULE이다. 왼쪽에는 HPC와 커넥터 HPC_Eth_Body_Conn, HPC_Eth_Rear_Conn, 그리고 BackboneSwitch가 보인다. 오른쪽 MACHINE에는 OS POSIX, TRUSTED PLATFORM NO SUPPORT, PROCESSOR CPU(Core0, Core1)가 있다. 오른쪽 위는 PARA Platform Import 버튼, 오른쪽 아래는 Close 버튼이다. ① 다음 단계에서 누를 FUNCTION GROUP 탭. ② MODULE 탭.

참고. PARA Platform Import 버튼은 PARA 플랫폼 임포트와 PNC 요청 포트에서 사용한다. 이 장에서는 누르지 않는다.

FunctionGroup 살펴보기​

NM 핸들은 FunctionGroup의 상태를 참조한다. 핸들보다 FunctionGroup을 먼저 만들어야 한다. 이 절에서는 값을 바꾸지 않고 화면 구성만 본다.

  1. FUNCTION GROUP 탭을 누른다. 탭을 연 직후에는 아무 항목도 선택되어 있지 않아, 가운데와 오른쪽 두 자리에 "Select a Function Group"이 표시된다.

  2. 왼쪽 FUNCTION GROUPS 목록을 본다. 지금은 MachineFG 하나만 있다. 목록 제목 오른쪽에는 버튼 3개가 있다.

    버튼툴팁하는 일
    +Add Function GroupFunctionGroup을 하나 추가한다.
    −Remove Function Group고른 FunctionGroup을 지운다. MachineFG는 지워지지 않는다.
    ⚡Auto-Generate: sync StateClientInterface and SM SWC R-Ports with Function Groups지금의 FunctionGroup 목록에 맞춰 StateClient… 인터페이스와 SM SWC의 R-Port를 다시 맞춘다. 이 장에서는 누르지 않는다.
  3. 목록에서 MachineFG를 누른다. 가운데 CONFIGURATION에 NAME, DESCRIPTION, FUNCTION GROUP 영역(GROUP NAME, INITIAL MODE), MODE DECLARATION 표가 있고, 오른쪽 STATE MACHINE에 상태 그림이 보인다. 앞으로 만들 FunctionGroup도 이 세 자리를 채우는 일이다.

    FUNCTION GROUP 탭에서 MachineFG를 선택한 시작 상태

    그림 9-4. 이 장을 시작할 때의 FUNCTION GROUP 탭. ① FUNCTION GROUPS 목록. MachineFG 하나뿐이고 선택되어 있다. ② 목록 제목 오른쪽의 버튼 3개 +, −, ⚡. ③ MachineFG의 CONFIGURATION. NAME 값은 MachineFG, DESCRIPTION 칸은 비어 있고, GROUP NAME 값은 MachineState, INITIAL MODE 값은 Off이며, MODE DECLARATION 표에 Off, Startup, Shutdown, Restart, Verify 5행이 있다. 오른쪽 STATE MACHINE에는 그 5개 상태와 전이가 그려져 있다.

참고. MachineFG는 AP 머신이 항상 가지는 FunctionGroup이다. NAME 칸은 읽기 전용이고, MODE DECLARATION 표의 VALUE 칸은 5행 모두 비어 있다. 이 값들은 그대로 둔다.

FunctionGroup 만들기​

대표로 ParkAssistFG를 끝까지 만든다.

  1. FUNCTION GROUPS 목록 제목 오른쪽의 + 버튼(툴팁 "Add Function Group")을 누른다. FunctionGroup_2 항목이 목록에 추가되고 선택된다. 다이얼로그 제목 앞에는 저장하지 않은 변경을 뜻하는 점(●)이 붙는다.

    + 버튼으로 FunctionGroup_2를 추가한 직후

    그림 9-5. + 버튼을 누른 직후. ① 목록에 추가되어 선택된 FunctionGroup_2. ② CONFIGURATION. NAME 값은 FunctionGroup_2, GROUP NAME 칸은 비어 있고 그 아래에 빨간 글씨로 "Name is required"가 표시된다. INITIAL MODE 값은 Off, MODE DECLARATION 표에는 Off 한 행만 있다. ③ STATE MACHINE. Off 상자 하나와 왼쪽 점에서 들어오는 화살표만 있다. 다이얼로그 제목 앞에 점(●)이 붙어 있다.

  2. 가운데 CONFIGURATION의 NAME 칸에 ParkAssistFG를 입력하고 Tab 키를 눌러 칸을 빠져나간다. 이름은 칸에서 빠져나갈 때 반영된다. 왼쪽 목록의 라벨은 아직 FunctionGroup_2 그대로이다. 목록에서 그 항목을 다시 누르거나 다음 FunctionGroup을 추가하면 갱신된다.

  3. DESCRIPTION 칸에 Park-assist function group driven by PNC_ParkAssist를 입력한다.

  4. FUNCTION GROUP 영역의 GROUP NAME 칸에 ParkAssistState를 입력하고 Tab 키를 누른다. 이 값이 상태 선언 그룹의 이름이 된다. 입력하면 "Name is required" 오류가 사라진다.

  5. MODE DECLARATION 표에는 NAME 값이 Off인 행이 하나 들어 있다. 표 제목 오른쪽의 + 버튼(툴팁 "Add Mode Declaration")을 눌러 행을 하나 더 만든다. 새 행의 NAME 값은 Mode_0, VALUE 값은 0이다. NAME 칸을 눌러 Active로 고치고 표 바깥을 클릭해 확정한다.

  6. INITIAL MODE 값이 Off인지 확인한다. 다른 값이면 드롭다운에서 Off를 고른다.

    NAME, GROUP NAME, MODE DECLARATION까지 채운 상태

    그림 9-6. 값을 채우고 전이를 만들기 직전의 화면. ① NAME 값 ParkAssistFG. ② GROUP NAME 값 ParkAssistState. ③ MODE DECLARATION 표의 두 행 Off와 Active. Active 행의 VALUE 값은 0이다. ④ STATE MACHINE. 상자 Off와 Active (0) 두 개가 있고 둘 사이의 전이는 아직 없다. 왼쪽 목록의 라벨은 아직 FunctionGroup_2이다.

  7. 오른쪽 STATE MACHINE의 Off 상자를 마우스 오른쪽 버튼으로 누른다. Set Initial / Transition to / Delete 메뉴가 나온다. Transition to 항목에 마우스를 올리면 하위 메뉴에 나머지 상태가 나오고, 거기서 Active 항목을 누른다. 이어서 Active 상자에서 같은 방법으로 Transition to › Off 항목을 누른다.

    Off 상자의 오른쪽 클릭 메뉴와 Transition to 하위 메뉴

    그림 9-7. Off 상자의 오른쪽 클릭 메뉴. 항목은 Set Initial, Transition to, Delete이다. ① 마우스를 올린 Transition to. ② 하위 메뉴에 나온 나머지 상태 Active. 이 항목을 누르면 Off → Active 전이가 만들어진다.

  8. 왼쪽 FUNCTION GROUPS 목록에서 FunctionGroup_2 항목을 한 번 누른다. 목록 라벨이 ParkAssistFG로 갱신된다. 결과가 그림 9-8과 같은지 확인한다.

    직접 만든 ParkAssistFG

    그림 9-8. 전이까지 넣어 완성한 ParkAssistFG. 아직 저장하기 전이라 다이얼로그 제목 앞에 점(●)이 있다. ① FUNCTION GROUPS 목록. 라벨이 ParkAssistFG로 갱신되어 MachineFG와 함께 2개가 보인다. ② CONFIGURATION. NAME, DESCRIPTION, GROUP NAME 값과 MODE DECLARATION 두 행이 들어가 있다. ③ STATE MACHINE. Off와 Active (0) 사이에 전이 2개가 짧은 곡선으로 그려져 있다.

  9. Ctrl+S를 눌러 저장한다. 제목 앞의 점(●)이 사라진다.

참고 1. **+**로 만든 행의 VALUE 칸에는 0이 자동으로 들어가고, STATE MACHINE의 상자에도 Active (0)처럼 값이 함께 표시된다. 예제 모델에는 이 값이 없어서 그림 9-9의 VALUE 칸은 비어 있고 상자 이름도 Active이다. 이 튜토리얼의 결과에는 영향이 없으므로 그대로 둔다.

참고 2. **+**로 만든 상자는 서로 비스듬히 놓여 전이 2개가 겹쳐 보인다(그림 9-8). 예제 모델은 두 상자가 가로로 나란히 놓여 있어 전이 2개가 따로 보인다(그림 9-9). 상자는 끌어서 옮길 수 있고, 위치는 그림에만 영향을 준다.

참고 3. FunctionGroup을 추가하면 Interface 편집기의 ADAPTIVE 탭에 StateClient_<FunctionGroup 이름> 인터페이스가 함께 만들어진다. 이 장을 마치면 StateClient_ParkAssistFG, StateClient_TrailerFG, StateClient_ComfortFG 3개가 생긴다. StateClient_HPC_MachineFG는 PARA 플랫폼 임포트와 PNC 요청 포트에서 들어온다. FunctionGroup을 지울 때는 확인 창이 이 인터페이스도 함께 지워진다고 알려 준다. 이 튜토리얼에서는 이 인터페이스를 따로 손대지 않는다.

나머지 FunctionGroup 만들기​

TrailerFG, ComfortFG도 같은 방법으로 반복한다. 완성된 FunctionGroup 4개의 값은 다음과 같다.

NAMEDESCRIPTIONGROUP NAMEINITIAL MODEMODE DECLARATION전이
MachineFG(비움)MachineStateOffOff, Startup, Shutdown, Restart, Verify자동으로 들어 있음
ParkAssistFGPark-assist function group driven by PNC_ParkAssistParkAssistStateOffOff, ActiveOff → Active, Active → Off
TrailerFGTrailer function group driven by PNC_TrailerTrailerStateOffOff, ActiveOff → Active, Active → Off
ComfortFGComfort function group driven by PNC_ComfortComfortStateOffOff, ActiveOff → Active, Active → Off
  1. FunctionGroup 만들기의 1~9단계를 되풀이해 TrailerFG를 만든다. 값은 위 표를 따른다. + 버튼이 만드는 이름은 FunctionGroup_3, 그다음은 FunctionGroup_4이다.

  2. 같은 방법으로 ComfortFG를 만든다.

  3. 목록에서 ParkAssistFG를 눌러 결과가 그림 9-9와 같은지 확인한다.

    FUNCTION GROUP 탭에서 ParkAssistFG를 선택한 화면

    그림 9-9. 완성된 FUNCTION GROUP 탭. ① FUNCTION GROUPS 목록. MachineFG, ParkAssistFG, TrailerFG, ComfortFG 4개가 있고 ParkAssistFG가 선택되어 있다. ② CONFIGURATION. NAME 값은 ParkAssistFG, DESCRIPTION 값은 Park-assist function group driven by PNC_ParkAssist, GROUP NAME 값은 ParkAssistState, INITIAL MODE 값은 Off이고, MODE DECLARATION 표에 Off, Active 두 행이 있다. ③ STATE MACHINE. Off와 Active 사이의 전이 2개가 그림으로 보인다. 왼쪽 끝의 점에서 Off로 들어오는 화살표가 INITIAL MODE 표시이다.

주의. 뒤 절의 매핑에 쓸 FunctionGroup과 상태는 이 탭에 실제로 있는 것이어야 한다. 이름이나 상태 이름이 표와 다르면 매핑 체크 목록에 나오지 않는다. 여기서 만든 FunctionGroup은 뒤의 FunctionGroup 상태 매핑 추가하기에서 <FunctionGroup>:<상태> 형식의 후보 11개로 나온다.

NM 핸들의 FUNCTION GROUP STATES 후보 목록

그림 9-10. 뒤 절에서 보게 될 FUNCTION GROUP STATES 체크 목록. MachineFG 5개에 이어 방금 만든 ParkAssistFG, TrailerFG, ComfortFG의 Off와 Active가 후보로 들어가 있다. ① ParkAssistFG:Active. 핸들 이름이 아직 NetworkHandle_0인 것은 이 목록을 확인하려고 핸들을 갓 추가한 상태이기 때문이다.

State Management의 MAX ACTION LIST DURATION 입력하기​

State Management 모듈에는 액션 리스트의 최대 수행 시간이 반드시 있어야 한다. 여기서 그 값을 넣는다.

  1. MODULE 탭을 누르고, 왼쪽 MODULES 목록에서 State Management 항목을 누른다.

    참고. MODULES 목록에는 모듈 11개가 항상 표시된다. 목록에 모듈을 추가하거나 빼는 버튼은 없다. 각 모듈 앞의 초록색 점은 그 모듈이 켜져 있다는 표시이다(툴팁 "Enabled. Right-click to disable."). 이 튜토리얼에서는 모든 모듈을 켜 둔 채로 둔다.

  2. 가운데 서브탭 NOTIFICATIONS / REQUESTS / ACTION ITEMS 중 ACTION ITEMS 탭을 누른다.

  3. 맨 위 MAX ACTION LIST DURATION 칸에 1을 입력하고 다른 곳을 눌러 확정한다. 값은 칸에서 빠져나갈 때 반영된다. 칸 오른쪽의 단위 드롭다운은 s(초)이다. 그대로 둔다.

    State Management의 ACTION ITEMS 서브탭에 값 1을 입력한 화면

    그림 9-11. State Management › ACTION ITEMS. ① 입력한 MAX ACTION LIST DURATION 값 1과 오른쪽의 단위 s. 아래 NM HANDLE FUNCTION GROUP STATES에는 아직 핸들이 없어 "No NM handle function group state."가 표시된다. 이 표는 뒤 절에서 핸들을 만들면 채워진다. 왼쪽 MODULES 목록에는 모듈 11개가 보인다.

  4. Ctrl+S로 저장한다.

참고. ACTION LISTS 아래의 "No StateMachine states available. Add a StateMachine in the Notifications sub-tab first."는 이 예제에 SM 알림이 없어서 나오는 문구이다. 이 튜토리얼에서는 그대로 둔다.

주의. MAX ACTION LIST DURATION 칸을 비워 두면 PAIO 검증이 constr_10641 오류를 보고한다. State Management 모듈에는 이 값이 반드시 있어야 한다.

NM 네트워크 핸들 추가하기​

  1. 왼쪽 MODULES 목록에서 Network Management 항목을 누른다. 가운데에 NETWORK HANDLES 섹션이 나오고, 아직 핸들이 없으므로 "No network handles. Click + to add one and assign its VLAN (Ethernet connector) group."이 표시된다.

    MODULE 탭의 Network Management, 핸들이 없는 상태

    그림 9-12. MODULE 탭의 Network Management. ① MODULES 목록의 Network Management. ② NETWORK HANDLES 제목 오른쪽의 + 버튼(툴팁 "Add Network Handle"). 오른쪽 NM STATE MACHINE에는 "Select a network handle to see the NM state machine of its cluster."가 표시된다.

  2. NETWORK HANDLES 제목 오른쪽의 + 버튼을 누른다. NetworkHandle_0 행이 추가되고 바로 펼쳐진다. 다이얼로그 제목 앞에 저장하지 않은 변경을 뜻하는 점(●)이 붙는다.

    NetworkHandle_0 행이 추가되어 펼쳐진 화면

    그림 9-13. + 직후. 위쪽 요약 행에는 NAME / VLANS (ETHERNET CONNECTORS) / PARTIAL NETWORKS가 NetworkHandle_0 / - / -로 보인다. 그 아래 펼친 상세에는 같은 세 칸과 FUNCTION GROUP STATES 소제목이 있다. ① NAME 입력칸. 오른쪽 NM STATE MACHINE에는 핸들에 VLAN 커넥터가 없다는 안내가 표시된다.

  3. 펼친 상세의 NAME 칸에 NH_ParkAssist를 입력하고 Tab 키를 누른다.

  4. 이름이 확정되고 요약 행이 NH_ParkAssist로 바뀐다. 행은 펼쳐진 채로 남는다.

  5. VLANS (ETHERNET CONNECTORS) 칸을 누른다. 체크 목록에서 HPC_Eth_Rear_Conn 항목에 체크하고 Esc 키로 목록을 닫는다.

    VLANS (ETHERNET CONNECTORS) 체크 목록

    그림 9-14. VLANS (ETHERNET CONNECTORS) 체크 목록. HPC의 Ethernet 커넥터 HPC_Eth_Body_Conn, HPC_Eth_Rear_Conn 두 개가 나온다. ① 체크할 HPC_Eth_Rear_Conn.

  6. PARTIAL NETWORKS 칸을 누른다. 체크 목록에서 PNC_ParkAssist (PNC 18) 항목에 체크하고 Esc 키로 목록을 닫는다.

    PARTIAL NETWORKS 체크 목록

    그림 9-15. PARTIAL NETWORKS 체크 목록. 요약 행의 VLANS (ETHERNET CONNECTORS) 값이 HPC_Eth_Rear_Conn으로 바뀌어 있다. 목록에는 PNC 정의와 커넥터 PNC 속성에서 만든 PNC 3개가 PNC_Comfort (PNC 17), PNC_ParkAssist (PNC 18), PNC_Trailer (PNC 19)로 나온다. ① 체크할 PNC_ParkAssist (PNC 18).

FunctionGroup 상태 매핑 추가하기​

NH_ParkAssist에 매핑 2개를 넣는다. 첫 번째는 ParkAssistFG가 Active가 되면 PNC_ParkAssist를 요청하는 매핑이다. 두 번째는 PNC_ParkAssist가 비활성이 되면 ParkAssistFG를 Off로 내리는 매핑이다.

  1. 펼친 핸들 안의 FUNCTION GROUP STATES 소제목 오른쪽 + 버튼(툴팁 "Add Function Group State")을 누른다. 매핑 행이 추가되고 바로 펼쳐지며 FUNCTION GROUP STATES와 DIRECTION 두 칸이 나온다.

  2. FUNCTION GROUP STATES 칸을 누른다. 체크 목록에서 ParkAssistFG:Active 항목에 체크하고 Esc 키로 목록을 닫는다.

    매핑 행의 FUNCTION GROUP STATES 체크 목록

    그림 9-16. 매핑 행을 추가한 직후의 FUNCTION GROUP STATES 체크 목록. 후보는 <FunctionGroup>:<상태> 형식으로 11개이다. 앞 절에서 만든 FunctionGroup에서 나온 값이며, MachineFG 5개, ParkAssistFG, TrailerFG, ComfortFG 각 2개이다. 목록을 아래로 내리면 ComfortFG:Active가 나온다. ① 체크할 ParkAssistFG:Active.

  3. DIRECTION 칸을 누르고 FUNCTION-GROUP-STATE-TO-NM-HANDLE 항목을 고른다.

    매핑 행의 DIRECTION 드롭다운

    그림 9-17. DIRECTION 드롭다운. 선택지는 FUNCTION-GROUP-STATE-TO-NM-HANDLE, NM-HANDLE-ACTIVE-TO-FUNCTION-GROUP-STATE, NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE 세 가지이다. 매핑 요약 행에는 이미 ParkAssistFG:Active가 들어가 있다. ① 고를 FUNCTION-GROUP-STATE-TO-NM-HANDLE.

  4. FUNCTION GROUP STATES 소제목 오른쪽 + 버튼을 다시 누른다. 두 번째 매핑 행이 추가된다.

  5. 새로 생긴 아래쪽 매핑 행에서 1~3단계와 같은 방법으로 FUNCTION GROUP STATES 값은 ParkAssistFG:Off, DIRECTION 값은 NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE 로 고른다.

  6. 다이얼로그 안에서 Ctrl+S를 눌러 저장한다. 제목 앞의 점(●)이 사라진다.

    완성된 NH_ParkAssist 핸들

    그림 9-18. 저장 후의 NH_ParkAssist. ① 핸들 요약 행: NH_ParkAssist / HPC_Eth_Rear_Conn / PNC_ParkAssist. ② FUNCTION GROUP STATES 표의 매핑 2행: ParkAssistFG:Active / FUNCTION-GROUP-STATE-TO-NM-HANDLE, ParkAssistFG:Off / NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE. 오른쪽 NM STATE MACHINE에는 핸들의 VLAN이 속한 클러스터의 NM 상태 머신 그림이 표시된다.

  7. MODULES 목록에서 State Management 항목을 누르고 ACTION ITEMS 탭을 본다. 앞 절에서 비어 있던 NM HANDLE FUNCTION GROUP STATES 표에 방금 만든 매핑 2행이 들어와 있다.

    State Management의 ACTION ITEMS 서브탭에 매핑 2행이 보이는 화면

    그림 9-19. State Management › ACTION ITEMS. ① 앞 절에서 입력한 MAX ACTION LIST DURATION 값 1과 단위 s. ② NM HANDLE FUNCTION GROUP STATES 표. NH_ParkAssist의 매핑 2행이 HANDLE / FUNCTION GROUP STATES / DIRECTION 열로 보인다. 이 표는 읽기 전용이며, 매핑은 Network Management 쪽에서 고친다.

참고. 펼친 매핑의 DIRECTION 칸은 폭이 좁아 긴 값이 NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STA…처럼 잘려 보인다. 매핑 요약 행에서는 값 전체가 보인다.

저장한 핸들은 머신 파일 design/Module/Machine/HPC.machine.io.model에 다음과 같이 기록된다. PARTIAL NETWORKS 칸에서 고른 PNC는 경로(/System/PncVehicle/SystemMapping/PNC_ParkAssist)로 저장된다. 실제 파일에서는 키 순서가 아래와 다를 수 있지만 내용은 같다.

{
"name": "NH_ParkAssist",
"vlan-refs": ["HPC_Eth_Rear_Conn"],
"partial-network-refs": ["/System/PncVehicle/SystemMapping/PNC_ParkAssist"],
"function-group-state-mappings": [
{ "mapping-direction": "FUNCTION-GROUP-STATE-TO-NM-HANDLE",
"function-group-states": [{ "context-function-group-ref": "ParkAssistFG", "target-state-ref": "Active" }] },
{ "mapping-direction": "NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE",
"function-group-states": [{ "context-function-group-ref": "ParkAssistFG", "target-state-ref": "Off" }] }
]
}

나머지 핸들 추가하기​

NH_Comfort, NH_Trailer도 같은 방법으로 추가한다. 핸들 3개의 값은 다음과 같다.

NAMEVLANS (ETHERNET CONNECTORS)PARTIAL NETWORKSFUNCTION GROUP STATESDIRECTION
NH_ComfortHPC_Eth_Body_ConnPNC_Comfort (PNC 17)ComfortFG:ActiveNM-HANDLE-ACTIVE-TO-FUNCTION-GROUP-STATE
ComfortFG:OffNM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE
NH_ParkAssistHPC_Eth_Rear_ConnPNC_ParkAssist (PNC 18)ParkAssistFG:ActiveFUNCTION-GROUP-STATE-TO-NM-HANDLE
ParkAssistFG:OffNM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE
NH_TrailerHPC_Eth_Rear_ConnPNC_Trailer (PNC 19)TrailerFG:ActiveNM-HANDLE-ACTIVE-TO-FUNCTION-GROUP-STATE
TrailerFG:OffNM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE

DIRECTION 값의 뜻은 다음과 같다.

DIRECTION뜻이 예제에서
FUNCTION-GROUP-STATE-TO-NM-HANDLEFunctionGroup이 이 상태가 되면 핸들의 PNC를 요청한다.ParkAssistFG가 Active(후진 기어)가 되면 PNC_ParkAssist를 요청한다.
NM-HANDLE-ACTIVE-TO-FUNCTION-GROUP-STATE핸들의 PNC가 활성이 되면 FunctionGroup을 이 상태로 바꾼다.PNC_Comfort, PNC_Trailer가 켜지면 ComfortFG, TrailerFG를 Active로 올린다.
NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE핸들의 PNC가 비활성이 되면 FunctionGroup을 이 상태로 바꾼다.PNC가 잠들면 세 FunctionGroup을 모두 Off로 내린다.
  1. MODULES 목록에서 Network Management 항목을 다시 누른다.

  2. NM 네트워크 핸들 추가하기의 26단계와 FunctionGroup 상태 매핑 추가하기의 15단계를 되풀이해 NH_Comfort를 만든다. 값은 위 표를 따른다.

  3. 같은 방법으로 NH_Trailer를 만든다.

  4. Ctrl+S로 저장한다.

  5. NH_Comfort가 그림 9-20과 같은지 확인한다. 요약 행을 누르면 그 행이 펼쳐지거나 접히므로, 요약 행 NH_Comfort는 접혀 있을 때만 누른다. 화면이 그림과 다를 수 있다. 앞서 추가한 행이 펼쳐진 채로 남아 있을 수 있고, 행 순서는 만든 순서를 따르므로 이 절차대로 만들었다면 NH_ParkAssist가 맨 위에 온다. 값만 표와 같으면 된다.

    핸들 3개가 모두 들어간 NETWORK HANDLES

    그림 9-20. 완성된 NETWORK HANDLES. ① 핸들 3행 NH_Comfort, NH_ParkAssist, NH_Trailer. ② 펼친 NH_Comfort의 상세. PARTIAL NETWORKS 값은 PNC_Comfort (PNC 17), 매핑은 ComfortFG:Active / NM-HANDLE-ACTIVE-TO-FUNCTION-GROUP-STATE와 ComfortFG:Off / NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE이다.

  6. State Management › ACTION ITEMS 화면을 다시 열면 NM HANDLE FUNCTION GROUP STATES 표에 핸들 3개의 매핑 6행이 보인다.

  7. Close 버튼을 눌러 다이얼로그를 닫는다. 저장을 마쳤다면 저장 확인 없이 닫힌다.

주의. PNC를 참조하는 핸들에 NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE 매핑이 없으면, PAIO 검증이 그 핸들에 대해 "PNC release stops nothing" 오류를 보고한다. PNC가 해제되어도 멈출 FunctionGroup이 없다는 뜻이다. PARTIAL NETWORKS 값을 고른 핸들에는 반드시 INACTIVE 방향 매핑을 하나 이상 넣는다.

왜 이렇게 설계하는가​

  • PNC 게이트웨이 유형(PNC GATEWAY TYPE)은 CP(Classic Platform) ECU 커넥터에만 있는 속성이다. AP 머신인 HPC는 PNC 게이트웨이가 될 수 없다. 대신 ara::nm의 NM 네트워크 핸들이 PNC를 참조해, HPC가 PNC의 요청자이자 참여자가 된다.
  • FunctionGroup은 AP 머신이 응용을 켜고 끄는 단위이다. PNC마다 FunctionGroup을 하나씩 두면 그 PNC가 살아 있는 동안 동작할 응용을 상태 하나로 묶을 수 있다.
  • 핸들과 FunctionGroup 상태를 양방향으로 연결하면 "후진 기어 = ParkAssistFG Active → PNC_ParkAssist 요청", "PNC_Comfort 활성 → ComfortFG Active" 같은 동작을 설계 모델에 선언할 수 있다.
  • PNC_ParkAssist에는 웨이크업 프레임이 없다. 이 PNC는 버스 프레임이 아니라 HPC의 FunctionGroup 상태로 요청되기 때문이다.

확인하기​

  • FUNCTION GROUP 탭의 FUNCTION GROUPS 목록에 MachineFG, ParkAssistFG, TrailerFG, ComfortFG 4개가 있다.
  • ParkAssistFG, TrailerFG, ComfortFG의 GROUP NAME 값과 MODE DECLARATION 값이 나머지 FunctionGroup 만들기의 표와 같고, INITIAL MODE 값은 모두 Off이다.
  • 세 FunctionGroup의 STATE MACHINE 그림에 Off → Active, Active → Off 전이가 있다.
  • State Management › ACTION ITEMS 화면의 MAX ACTION LIST DURATION 값이 1 s이다.
  • Network Management의 NETWORK HANDLES에 NH_Comfort, NH_ParkAssist, NH_Trailer 3행이 있다.
  • 각 핸들의 VLANS (ETHERNET CONNECTORS) 값과 PARTIAL NETWORKS 값이 나머지 핸들 추가하기의 표와 같다.
  • 각 핸들에 매핑이 2개씩 있고, 그중 하나는 NM-HANDLE-INACTIVE-TO-FUNCTION-GROUP-STATE 방향이다.
  • NH_ParkAssist의 ParkAssistFG:Active 매핑은 FUNCTION-GROUP-STATE-TO-NM-HANDLE 방향이다.
  • State Management › ACTION ITEMS 화면의 NM HANDLE FUNCTION GROUP STATES 표에 6행이 있다.
  • Close 버튼을 눌렀을 때 저장 확인 없이 다이얼로그가 닫혔다(저장 완료).

다음 단계​

PARA 플랫폼 임포트와 PNC 요청 포트에서 HPC에 PARA 플랫폼을 임포트하고, 응용 AA가 NM 네트워크 핸들로 PNC를 요청하도록 연결한다. 다음 장은 이 장에서 만든 FunctionGroup 4개와 NM 네트워크 핸들 3개를 그대로 쓰므로, 위 표의 값이 모두 들어갔는지 확인하고 넘어간다.