본문으로 건너뛰기

PNC 정의와 커넥터 PNC 속성, NM 설정

이 장에서 할 일​

이 장에서는 예제에서 쓰는 PNC(Partial Network Cluster) 3개를 PNC 대화상자에서 정의한다. 처음에는 일부러 잘못된 식별자로 저장해, 검증 패널이 오류를 보여 주고 그 오류를 고치는 흐름을 직접 겪어 본다. 이어서 PNC 비트 벡터가 NM PDU의 어느 자리에 놓이는지 확인하고, 커넥터마다 PNC 게이트웨이 역할, 웨이크업 조건, 필터 마스크를 입력하고, 백본 스위치 포트에 어느 PNC가 지나가는지 지정한다. 마지막으로 PNC 비트 벡터를 실어 나르는 NM 클러스터와 NM 노드의 값을 채운다.

이 장을 마치면 다음 상태가 된다.

  • PNC 대화상자의 PARTIAL NETWORKS 목록에 PNC_Comfort(17), PNC_ParkAssist(18), PNC_Trailer(19)가 있다.
  • NM VECTOR 탭의 PNC VECTOR OFFSET이 2, PNC VECTOR LENGTH가 6이다.
  • 모든 커넥터의 PARTIAL NETWORK 섹션에 게이트웨이 유형과 필터 마스크가 입력되어 있다.
  • ECU 노드와 HPC 노드의 PARTIAL NETWORK 섹션에 타이머 값이 입력되어 있다.
  • BackboneSwitch의 포트 4개에 PNC MAPPINGS가 지정되어 있다.
  • NM 클러스터의 NM PNC PARTICIPATION과 NM 타이밍 값, NM 노드의 NM NODE ID가 채워져 있다. NM 노드의 NM-PDU 참조는 신호·PDU·프레임과 I-PDU Group에서 NM-PDU를 만든 뒤 이 장으로 돌아와 채운다.

시작하기 전에​

  • 토폴로지 설계를 마쳐 노드, 클러스터, 커넥터, 스위치 포트가 모두 있어야 한다.
  • 왼쪽 EDITOR 뷰의 DESIGN 아래에서 System을 클릭해 System 편집기(탭 PNC:System)를 열어 둔다.
  • 이 장의 마지막 NM 설정 절에는 한 단계만 예외가 있다. NM 노드의 TX-NM-PDU-REFS와 RX-NM-PDU-REFS는 신호·PDU·프레임과 I-PDU Group에서 만드는 NM-PDU 18개를 고르는 칸이라, 지금은 후보 목록이 비어 있다. 그 단계만 4장을 마친 뒤 이 절로 돌아와서 한다. 나머지 NM 값은 지금 모두 입력한다.

이 장에서 정의하는 PNC는 다음과 같다.

PNC IDENTIFIERNAME필터 마스크에서의 위치
17PNC_ComfortByte 0, 비트 1 → 0x02
18PNC_ParkAssistByte 0, 비트 2 → 0x04
19PNC_TrailerByte 0, 비트 3 → 0x08

참고. 이 장의 화면은 튜토리얼용 예제 프로젝트로 찍었기 때문에 캔버스 왼쪽 위 루트 이름이 PncVehicle로 보인다. 직접 만든 프로젝트에서는 System으로 보여도 된다.

PNC 대화상자 열기​

  1. System 편집기 캔버스 왼쪽 가장자리의 세로 아이콘 줄에서 두 번째(아래쪽)에 있는 Partial Network (PNC) 아이콘을 클릭한다. 위쪽 아이콘 Signal은 Signal 편집기를 연다.

    캔버스 왼쪽의 PNC 버튼

    그림 3-1. System 편집기. ① 캔버스 왼쪽 가장자리의 세로 아이콘 줄에서 두 번째(아래쪽) 아이콘이 PNC 버튼이다. 그 위의 아이콘은 Signal이다.

    마우스를 올리면 Partial Network (PNC) 툴팁이 나타난다.

    PNC 버튼 툴팁

    그림 3-2. ① PNC 버튼에 마우스를 올린 모습. 버튼 오른쪽에 Partial Network (PNC) 툴팁이 보인다.

  2. Partial Network (PNC) Configuration 대화상자가 열린다. 처음에는 왼쪽 PARTIAL NETWORKS 목록이 비어 있고, 가운데에 "No PNC mapping yet. Click [+] to declare a Partial Network Cluster."가 표시된다. 오른쪽에는 PDU GROUPS, MATRIX, NM VECTOR 탭이 있다.

    빈 PNC 대화상자

    그림 3-3. 처음 연 PNC 대화상자. ① PARTIAL NETWORKS 머리글 오른쪽의 [+] 버튼으로 PNC를 추가한다. 오른쪽 아래의 Close로 대화상자를 닫는다.

첫 PNC 추가하기​

  1. PARTIAL NETWORKS 머리글 오른쪽의 [+] 버튼을 클릭한다(툴팁 Add PNC Mapping).

  2. 목록에 PNC 0 Pnc_0 항목이 생기고 선택된다. 가운데 PARTIAL NETWORK CLUSTER 섹션에 PNC IDENTIFIER 0, NAME Pnc_0이 표시된다. 식별자는 아직 쓰이지 않은 가장 작은 번호가 자동으로 붙는다. 대화상자 제목 앞의 ● 표시는 저장하지 않은 변경이 있다는 뜻이다.

    PNC를 하나 추가한 직후

    그림 3-4. [+]를 누른 직후. ① 목록의 새 항목 PNC 0 Pnc_0, ② PNC IDENTIFIER = 0, ③ NAME = Pnc_0. 가운데 아래의 VIRTUAL FUNCTION CLUSTERS (VFC), PNC GROUPS, PHYSICAL CHANNELS, SERVICE INSTANCES, WAKEUP FRAMES는 PNC 다이얼로그 — PNC별 바인딩에서 채운다.

    참고. [+]를 누른 뒤 "Add PNC Mapping" 툴팁이 대화상자 제목 줄 위에 남아 있는 경우가 있다. 표시만 남은 것이며 입력에는 영향이 없다.

  3. NAME에 PNC_Comfort를 입력하고 Enter를 누른다. 목록 항목이 PNC 0 PNC_Comfort로 바뀐다.

    NAME 입력 후

    그림 3-5. ① 목록 항목이 PNC 0 PNC_Comfort로 바뀐다. ② PNC IDENTIFIER는 이번에는 일부러 0 그대로 둔다.

  4. Ctrl+S를 눌러 저장한다. 제목 앞의 ● 표시가 사라진다.

  5. Close를 클릭해 대화상자를 닫는다.

참고. 저장하지 않고 Close를 누르면 "Do you want to save the changes?" 확인 창이 나타난다. Save를 누르면 저장한 뒤 닫히고, Don't Save를 누르면 변경을 버리고 닫힌다.

참고. PNC 대화상자에서 저장한 내용은 SYSTEM 모델(SYSTEM.io.model)에 기록된다. System 편집기 탭은 바뀌지 않는다.

검증 오류 확인하고 고치기​

식별자를 0으로 둔 채 저장했으므로 검증에서 오류가 나타난다. PNC 대화상자에서 Ctrl+S로 저장하면 프로젝트 전체 검증이 저절로 실행되므로, 검증을 실행하는 단계를 따로 거치지 않는다.

  1. 화면 아래 상태 표시줄 왼쪽에서 다섯 번째 아이콘인 검증 아이콘(V)을 본다. 이미 빨간 배지 2가 붙어 있고, 툴팁은 Validation: 2 error(s), 0 warning(s), 0 info(s)이다.

  2. 검증 아이콘을 클릭해 VALIDATION 패널을 연다. 패널 제목 VALIDATION 옆에 빨간 배지 2(오류 2건)가 보인다.

    검증 오류 2건

    그림 3-6. 저장한 뒤 VALIDATION 패널을 연 화면. ① constr_3039, ② constr_3040 오류 행, ③ 상태 표시줄의 검증 아이콘(V). 패널 제목 옆과 검증 아이콘 위의 빨간 배지 2는 모두 오류 건수이다.

  3. 두 오류의 내용을 확인한다.

    VALIDATION 패널 확대

    그림 3-7. VALIDATION 패널. ELEMENT TYPE은 PncMapping, NAME은 PNC_Comfort이다. ① constr_3039, ② constr_3040. DESCRIPTION 열은 길이 때문에 끝이 잘려 보인다.

    CONSTRDESCRIPTION(전체 문장)
    constr_3039PncMapping "PNC_Comfort" pncIdentifier is 0; allowed range is 8..511. pncIdentifier is the ABSOLUTE bit position of the PNC in the NM PDU (R25-11 TPS_SystemTemplate).
    constr_3040PncMapping "PNC_Comfort" pncIdentifier 0 lies outside the System PNC vector bits 16..63 (pncVectorOffset=2, pncVectorLength=6). pncIdentifier is the ABSOLUTE bit position of the PNC in the NM PDU (R25-11 TPS_SystemTemplate). An id counted from the vector start instead of the NM PDU start is off by pncVectorOffset × 8 = 16; the System's PncMappings share one counting, so every one of them moves by that amount, the ones inside the range too.
  4. constr_3040 행을 클릭한다. PNC 대화상자가 다시 열리고, 문제가 된 PNC 0 PNC_Comfort가 선택된 상태로 표시된다. 문제 항목에는 빨간 테두리가 둘러지고, 마우스를 올리면 오류 내용이 툴팁으로 보인다.

    오류 행을 클릭해 이동한 PNC 대화상자

    그림 3-8. 오류 행을 클릭하면 바로 고칠 곳으로 이동한다. ① 문제 PNC 항목(빨간 테두리), ② 고칠 필드 PNC IDENTIFIER.

  5. PNC IDENTIFIER에 17을 입력하고 Enter를 누른다. 목록 항목이 PNC 17 PNC_Comfort로 바뀐다.

    식별자를 17로 고친 모습

    그림 3-9. ① 목록 항목 PNC 17 PNC_Comfort, ② PNC IDENTIFIER = 17. 제목 앞에 ● 표시가 다시 보인다.

  6. Ctrl+S로 저장하고 Close로 닫는다.

  7. 저장하면 검증이 다시 실행되므로 따로 클릭할 것은 없다. 화면 아래에 열려 있는 VALIDATION 패널에 "No validation issues."가 표시되고, 패널 제목과 검증 아이콘의 빨간 배지가 사라진다.

    검증 오류 0건

    그림 3-10. 식별자를 고친 뒤의 VALIDATION 패널. "No validation issues."

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

왜 17부터인가​

설계 근거. PNC 식별자는 NM PDU 안에 있는 PNC 비트 벡터의 비트 번호이다. 쓸 수 있는 번호는 SYSTEM의 PNC VECTOR OFFSET과 PNC VECTOR LENGTH가 정하며, 이 예제에서는 16..63이다(constr_3040). constr_3039의 일반 범위 8..511도 함께 만족해야 한다. 두 값을 어디서 보고 입력하는지, 그래서 왜 17, 18, 19가 되는지는 PNC 비트 벡터 설정하기에서 다룬다.

나머지 PNC 추가하기​

  1. PNC 버튼(그림 3-1)을 눌러 PNC 대화상자를 다시 연다.

  2. [+] 버튼을 클릭한다. 새 항목 PNC 0 Pnc_0이 생긴다.

  3. PNC IDENTIFIER에 18을 입력하고 Enter를 누른다. NAME에 PNC_ParkAssist를 입력하고 Enter를 누른다.

  4. 같은 방법으로 [+] 버튼을 한 번 더 누르고, PNC IDENTIFIER 19, NAME PNC_Trailer를 입력한다.

  5. Ctrl+S로 저장한다. 목록에 세 항목이 식별자 순서로 보인다.

    PNC 3개가 정의된 목록

    그림 3-11. ① PARTIAL NETWORKS 목록에 PNC 17 PNC_Comfort, PNC 18 PNC_ParkAssist, PNC 19 PNC_Trailer가 있다. 선택한 PNC_Trailer의 PNC IDENTIFIER는 19이다.

  6. Close로 닫는다. 저장할 때 검증이 다시 실행되었고, 오류는 여전히 0건이다.

PNC 비트 벡터 설정하기​

PNC 식별자는 NM PDU 안에 있는 PNC 비트 벡터의 비트 번호이다. 그 벡터가 NM PDU의 어느 바이트에서 시작해 몇 바이트를 차지하는지는 SYSTEM 전체에 하나뿐인 PNC VECTOR OFFSET과 PNC VECTOR LENGTH가 정한다. 두 값은 PNC 대화상자의 NM VECTOR 탭에서 확인하고 입력한다.

  1. PNC 버튼(그림 3-1)을 눌러 Partial Network (PNC) Configuration 대화상자를 다시 연다.

  2. 오른쪽 뷰에서 NM VECTOR 탭을 클릭한다.

    PNC 대화상자의 NM VECTOR 탭

    그림 3-12. PNC 대화상자의 NM VECTOR 탭. ① NM VECTOR 탭, ② PNC BIT VECTOR 섹션, ③ NM PDU LAYOUT 섹션. NM PDU LAYOUT에는 NM 클러스터 머리글 5개가 있고 처음에는 모두 접혀 있다.

  3. PNC BIT VECTOR 섹션의 PNC VECTOR OFFSET이 2, PNC VECTOR LENGTH가 6인지 확인한다. 값이 다르면 칸을 클릭해 입력한다.

    PNC BIT VECTOR 섹션

    그림 3-13. PNC BIT VECTOR 섹션. ① PNC VECTOR OFFSET = 2, ② PNC VECTOR LENGTH = 6.

    참고. 두 칸은 읽기 전용이 아니라 직접 입력할 수 있다. 값을 바꾸고 Ctrl+S를 누르면 SYSTEM.io.model에 기록된다. 두 칸을 비워 두면 PAIO가 2와 6을 기본값으로 쓰지만 그 기본값은 모델 파일에 기록되지 않는다. 이 예제는 두 값을 모델에 명시한다.

  4. NM PDU LAYOUT에서 CANNM NMCLUSTER_WESTCAN (WESTCAN) 머리글을 클릭해 펼친다. 직접 만든 프로젝트에서는 이 시점에 아직 어느 클러스터에도 NM을 켜지 않았으므로, 이 섹션에는 클러스터 머리글 없이 배치 하나만 보인다. 클러스터 머리글은 NM 설정에서 NM을 켠 뒤에 나타난다.

    NM PDU LAYOUT에서 WestCAN을 펼친 모습

    그림 3-14. NmCluster_WestCAN의 NM PDU 배치. 한 행이 NM PDU의 한 바이트이고, 칸 8개는 왼쪽부터 bit 7..0이다. Byte 0 = CBV, Byte 1 = NID, Byte 2~7 = USER DATA, PNC VECTOR이다. Byte 2 행의 칸은 왼쪽부터 23 22 21 20 19 18 17 16이고 그 가운데 19, 18, 17이 채워져 있다. 아래 표는 이 NM 클러스터의 ECU, NODE ID, TX NM PDU, RX NM PDUS이며 읽기 전용이다.

    참고. 머리글 아래의 붉은 nmPncParticipation = false는 이 NM 클러스터가 아직 PNC를 나르지 않는다는 뜻이다. NM 설정에서 NM PNC PARTICIPATION을 YES로 바꾸면 사라진다.

  5. (확인용) PNC VECTOR LENGTH를 4로 바꿔 본다. PNC VECTOR 구간이 Byte 2~5로 줄고, Byte 6과 Byte 7에는 USER DATA만 남는다.

    PNC VECTOR LENGTH가 4일 때의 배치

    그림 3-15. PNC VECTOR LENGTH를 4로 바꾼 모습. PNC VECTOR가 Byte 2~5만 차지한다.

  6. PNC VECTOR LENGTH를 6으로 되돌린 뒤 Ctrl+S로 저장하고 Close로 닫는다. 저장할 때 검증이 다시 실행되며, 오류는 여전히 0건이다.

설계 근거. 이 두 값이 PNC 식별자로 쓸 수 있는 번호 범위를 정한다. 첫 비트는 PNC VECTOR OFFSET × 8 = 2 × 8 = 16이고, 마지막 비트는 (PNC VECTOR OFFSET + PNC VECTOR LENGTH) × 8 − 1 = 8 × 8 − 1 = 63이다. 검증 오류 확인하고 고치기에서 본 constr_3040 메시지가 범위를 16..63이라고 알려 준 것도 이 계산 때문이다. 이 예제는 그 범위 안에서 16을 비워 두고 17, 18, 19를 쓴다. 세 번호가 모두 Byte 2 한 바이트 안에 들어가므로 커넥터의 필터 마스크를 한 바이트로 읽을 수 있다.

커넥터에 PNC 속성 입력하기​

PNC 게이트웨이 역할과 웨이크업 조건은 ECU가 아니라 커넥터(ECU가 채널에 붙는 접점)에 기록한다. 같은 Zone ECU라도 CAN 쪽 커넥터와 Ethernet 쪽 커넥터의 역할이 다를 수 있기 때문이다. 대표로 WestZone_CanFd_Conn을 입력해 보고, 나머지 커넥터는 전체 커넥터 값 표를 보며 같은 방법으로 입력한다.

WestZone_CanFd_Conn 입력하기​

  1. 캔버스에서 WestZone 노드 아래쪽 경계에 있는 CAN 커넥터(작은 사각형) WestZone_CanFd_Conn을 클릭한다. 속성 패널이 접혀 있으면 캔버스 오른쪽 가장자리의 버튼 세 개 중 맨 위 버튼(속성 패널 버튼, 그림 3-1 오른쪽 위)을 클릭해 펼친다.

  2. 오른쪽 속성 패널의 제목이 CAN CONNECTOR인지, NAME이 WestZone_CanFd_Conn인지 확인한다. 아래쪽의 PARTIAL NETWORK 섹션은 기본으로 펼쳐져 있다. 처음에는 PNC GATEWAY TYPE의 세 버튼이 모두 꺼져 있고, 격자 제목은 PNC FILTER ARRAY MASKS이며 채운 칸 수는 (0/6)으로 표시된다. 격자의 칸 6개는 세 칸씩 두 줄로, 첫 줄이 Byte 02, 둘째 줄이 Byte 35이다.

    WestZone_CanFd_Conn 선택

    그림 3-16. ① 선택한 커넥터 WestZone_CanFd_Conn. ② 속성 패널의 PARTIAL NETWORK 섹션. CONTROLLER는 WestZone_CanFd, CONNECTED CHANNEL은 WestCAN / WestCAN_Channel이다.

  3. PNC GATEWAY TYPE에서 ACTIVE를 클릭한다.

  4. CREATE ECU WAKEUP SOURCE를 클릭해 켠다. 켜지면 버튼이 파랗게 강조된다.

  5. PNC WAKEUP CAN ID에 500을 입력한다. 필드 이름 오른쪽의 DEC | HEX 전환은 기본이 HEX이므로 0x500으로 표시된다.

  6. PNC WAKEUP CAN ID MASK에 700을 입력한다. 0x700으로 표시된다.

  7. PNC WAKEUP DLC에 8을 입력한다.

  8. PNC FILTER ARRAY MASKS 격자의 첫 칸(Byte 0, 자리 표시 0)을 클릭하고 02를 입력한 뒤 Enter를 누른다. 0x02로 표시되고 격자 제목의 칸 수가 (1/6)으로 바뀐다.

    PARTIAL NETWORK 입력 결과

    그림 3-17. 입력을 마친 PARTIAL NETWORK 섹션. ① PNC GATEWAY TYPE = ACTIVE, ② CREATE ECU WAKEUP SOURCE 켬, ③ PNC WAKEUP CAN ID = 0x500, ④ PNC WAKEUP CAN ID MASK = 0x700, ⑤ PNC WAKEUP DLC = 8, ⑥ Byte 0 = 0x02.

    참고. 격자의 칸 수 6은 SYSTEM의 pncVectorLength이다. 비워 둔 칸은 0x00으로 저장되므로 Byte 1~5에 00을 따로 입력하지 않아도 된다. 저장 후 다시 선택하면 완성 예제의 그림 3-20처럼 (6/6)으로 모든 칸이 채워져 보인다.

  9. PNC WAKEUP DATA MASK, DYNAMIC PNC TO CHANNEL MAPPING, PNC WAKEUP CAN ID EXTENDED는 비워 두거나 꺼 둔다.

  10. 편집기 탭 PNC:System 옆에 저장 안 됨 점이 생긴다. Ctrl+S로 저장한다.

    입력을 마친 창 전체

    그림 3-18. 입력을 마친 창 전체(저장 전). 탭 이름 PNC:System 옆에 저장 안 됨 점이 보인다. ① 커넥터, ② PARTIAL NETWORK 섹션.

웨이크업 CAN ID와 마스크의 뜻​

설계 근거. 수신한 CAN 프레임의 ID를 F라고 하면, (F AND 0x700) = 0x500인 프레임을 웨이크업 프레임으로 본다. 즉 0x500..0x5FF 블록 전체이다. 이 예제는 NM 프레임 ID를 0x510 + 노드 ID로 두었으므로(신호·PDU·프레임과 I-PDU Group), 모든 NM 프레임이 이 블록에 들어간다. AUTOSAR가 NM CAN ID 대역을 정해 두지는 않으며, 이 값은 OEM 네트워크 설계 관례를 따른 것이다.

필터 마스크 계산​

필터 마스크는 "이 커넥터로 어느 PNC 비트를 통과시키는가"를 바이트 배열로 나타낸다. PNC 식별자 하나에 대해 다음과 같이 계산한다.

byteIndex = pncId ÷ 8 의 몫 − pncVectorOffset # 17 ÷ 8 = 2, 2 − 2 = 0 → Byte 0
bit = pncId ÷ 8 의 나머지 # 17 mod 8 = 1
value = 2 ^ bit # 2 ^ 1 = 0x02

한 커넥터가 여러 PNC를 통과시키면 같은 바이트의 값을 OR로 합친다. 예를 들어 PNC 18과 19를 모두 통과시키는 SouthZone 쪽은 Byte 0 = 0x04 | 0x08 = 0x0C이다. 배열 길이는 pncVectorLength(6)와 같아야 한다(constr_3686).

Ethernet 커넥터와 HPC 커넥터​

Ethernet 커넥터의 PARTIAL NETWORK 섹션에는 웨이크업 CAN ID 관련 필드가 없고, PNC GATEWAY TYPE, 두 토글, PNC FILTER ARRAY MASKS만 있다. 입력 방법은 CAN 커넥터와 같다.

HPC 노드의 커넥터(HPC_Eth_Body_Conn, HPC_Eth_Rear_Conn)에는 PNC GATEWAY TYPE 필드 자체가 보이지 않는다. HPC는 AP 머신이고, PNC 게이트웨이 유형은 CP ECU의 커넥터에만 있기 때문이다. HPC 커넥터에는 필터 마스크만 입력한다.

HPC_Eth_Rear_Conn 전체 화면

그림 3-19. 완성 예제에서 HPC_Eth_Rear_Conn을 선택한 화면. ① 커넥터, ② SERVICE INSTANCES, ③ PARTIAL NETWORK. 속성 패널 제목은 ETHERNET CONNECTOR, CONNECTED CHANNEL은 Backbone / VLAN_Rear (VLAN: 200)이다. 노드 이름 뒤 대괄호 안의 이름(예: WestZone [WestZone])은 완성 예제에서 그 노드에 매핑된 컴포지션이다.

HPC_Eth_Rear_Conn 패널 확대

그림 3-20. 그림 3-19의 속성 패널 확대. ① SERVICE INSTANCES에 VehicleState_Provider(P)와 ParkDistance_Consumer(C)가 바인딩되어 있다. 이 바인딩은 인터페이스와 SOME/IP 서비스에서 만든다. ② PARTIAL NETWORK에는 게이트웨이 유형 없이 두 토글(모두 꺼짐)과 PNC FILTER ARRAY MASKS (6/6) = 0x0C 0x00 0x00 0x00 0x00 0x00만 있다. ①과 ② 사이에는 접힌 SOCKET CONNECTIONS 섹션이 있다.

VLAN_Body에는 active 게이트웨이를 하나만 둘 수 있으므로, EastZone_Eth_Conn은 PASSIVE이다. VLAN_Rear의 게이트웨이는 SouthZone_Eth_Conn(ACTIVE)이다.

EastZone_Eth_Conn PASSIVE

그림 3-21. EastZone_Eth_Conn(완성 예제). ① NAME, ② PNC GATEWAY TYPE = PASSIVE, ③ Byte 0 = 0x02(PNC_Comfort). CONNECTED CHANNEL은 Backbone / VLAN_Body (VLAN: 100)이다.

SouthZone_Eth_Conn ACTIVE

그림 3-22. SouthZone_Eth_Conn(완성 예제). ① NAME, ② PNC GATEWAY TYPE = ACTIVE, ③ Byte 0 = 0x0C(PNC_ParkAssist + PNC_Trailer). CONNECTED CHANNEL은 Backbone / VLAN_Rear (VLAN: 200)이다.

주의. 속성 패널을 펼치면 캔버스 오른쪽(EastZone 쪽)이 패널에 가려 커넥터가 클릭되지 않는다. 속성 패널 버튼으로 패널을 접은 뒤 커넥터를 클릭하고 다시 패널을 펼치거나, 캔버스를 드래그해 커넥터가 보이는 곳으로 옮긴 뒤 클릭한다.

전체 커넥터 값​

나머지 커넥터도 같은 방법으로 입력한다. 필터 마스크는 Byte 0만 적었다. Byte 1~5는 모두 0x00이다. "—"는 비워 두거나 꺼 두는 항목이다.

커넥터채널PNC GATEWAY TYPECREATE ECU WAKEUP SOURCEWAKEUP CAN ID / MASK / DLCByte 0근거
WestZone_CanFd_ConnWestCANACTIVE켬0x500 / 0x700 / 80x02WestCAN의 유일한 게이트웨이
EastZone_CanFd_ConnEastCANACTIVE켬0x500 / 0x700 / 80x02EastCAN의 유일한 게이트웨이
SouthZone_CanFd_ConnRearCANACTIVE켬0x500 / 0x700 / 80x0CRearCAN의 유일한 게이트웨이
WestZone_Eth_ConnVLAN_BodyACTIVE—(필드 없음)0x02PNC_Comfort 최상위 코디네이터
EastZone_Eth_ConnVLAN_BodyPASSIVE—(필드 없음)0x02VLAN_Body의 active는 WestZone 하나(constr_5093)
SouthZone_Eth_ConnVLAN_RearACTIVE—(필드 없음)0x0CPNC_ParkAssist, PNC_Trailer 최상위 코디네이터
DoorCtrl_FL, SeatCtrl_FL, MirrorAct_FL, WindowSw_FL의 _CAN_ConnWestCANNONE켬—0x02게이트웨이 아님, 웨이크업 소스
DoorCtrl_FR, SeatCtrl_FR, MirrorAct_FR의 _CAN_ConnEastCANNONE켬—0x02게이트웨이 아님, 웨이크업 소스
ParkSensor_RR_CAN_ConnRearCANNONE켬—0x04자기 PNC(18) 비트만
TrailerModule_CAN_Conn, TailLamp_RR_CAN_ConnRearCANNONE켬—0x08자기 PNC(19) 비트만
HPC_Eth_Body_ConnVLAN_Body(필드 없음)—(필드 없음)0x02AP 머신은 게이트웨이가 아님
HPC_Eth_Rear_ConnVLAN_Rear(필드 없음)—(필드 없음)0x0CAP 머신은 게이트웨이가 아님

모든 커넥터를 입력했으면 Ctrl+S로 저장한다.

참고. 완성 예제의 IVC.io.model에는 CAN 커넥터마다 참여하는 PNC 목록(pnc-mappings)도 기록되어 있다. Zone의 CAN 커넥터는 그 버스의 PNC(WestZone, EastZone은 PNC_Comfort, SouthZone은 PNC_ParkAssist, PNC_Trailer)를, 말단 ECU의 CAN 커넥터는 자기 PNC 하나를 가진다. Ethernet 커넥터에는 이 목록이 없다. 이 값은 현재 속성 패널에 표시되지 않으며 화면에서 편집할 수 없다.

노드의 PARTIAL NETWORK 값 입력하기​

ECU 노드와 HPC 노드에도 속성 패널에 PARTIAL NETWORK 섹션이 있다. 커넥터의 섹션과 이름은 같지만 내용이 다르다. 노드 쪽에는 NM 요청과 슬립 타이머가 들어간다.

  1. 캔버스에서 노드(예: WestZone)의 머리글을 클릭해 노드를 선택한다. 커넥터(작은 사각형)가 아니라 노드를 선택해야 한다.

  2. 속성 패널을 아래로 내려 PARTIAL NETWORK 섹션을 찾는다. ECU 노드에는 PNC NM REQUEST, PNC SYNCHRONOUS WAKEUP, CHANNEL SYNCHRONOUS WAKEUP 토글 세 개가 한 줄에 있다. 창이 좁으면 세 번째 토글의 이름이 CHANNEL SYNCHRONOUS W…처럼 잘려 보인다.

  3. PNC NM REQUEST를 클릭해 켠다. 켜지면 커넥터의 CREATE ECU WAKEUP SOURCE처럼 버튼이 파랗게 강조된다. 그림 3-23에서 버튼을 둘러싼 주황 테두리는 그림의 강조 표시일 뿐이다. PNC SYNCHRONOUS WAKEUP과 CHANNEL SYNCHRONOUS WAKEUP은 꺼 둔다.

  4. PNC PREPARE SLEEP TIMER에 0.5, PN RESET TIME에 2를 입력한다.

    WestZone 노드의 PARTIAL NETWORK

    그림 3-23. WestZone 노드의 PARTIAL NETWORK 섹션. ① PNC NM REQUEST를 켠 상태, ② PNC PREPARE SLEEP TIMER = 0.5 s, ③ PN RESET TIME = 2 s. 두 타이머 칸 오른쪽에는 단위 선택기가 붙어 있다.

    참고. 두 타이머는 값과 단위를 함께 갖는 필드이다. 단위 선택기에서 ns, us, ms, s를 고를 수 있고, 칸이 비어 있을 때 기본 단위는 s이다. 따라서 0.5와 2를 그대로 입력하면 0.5 s, 2 s로 저장된다. 단위를 바꾸면 표시만 바뀌고 저장된 값은 유지된다.

  5. 나머지 노드도 아래 표와 같이 입력한 뒤 Ctrl+S로 저장한다.

노드PNC NM REQUESTPNC SYNCHRONOUS WAKEUPPNC PREPARE SLEEP TIMERPN RESET TIME / PN RESET TIMER
WestZone, SouthZone, EastZone켬끔0.5 s2 s(PN RESET TIME)
말단 ECU 10개켬끔0.5 s2 s(PN RESET TIME)
HPC(필드 없음)(필드 없음)0.5 s2 s(PN RESET TIMER)

HPC는 AP 머신이므로 PARTIAL NETWORK 섹션에 토글이 없고 타이머 두 칸만 있다. 두 번째 칸의 이름도 ECU의 PN RESET TIME이 아니라 PN RESET TIMER이다. 값은 ECU와 같이 0.5 s, 2 s를 입력한다.

HPC 노드의 PARTIAL NETWORK

그림 3-24. HPC 노드의 PARTIAL NETWORK 섹션. ① PNC PREPARE SLEEP TIMER = 0.5 s, ② PN RESET TIMER = 2 s. 그림 3-23의 ECU 노드와 달리 토글이 없다.

참고. 완성 예제 파일은 Zone ECU 3개에 PNC SYNCHRONOUS WAKEUP = false를 명시하고 말단 ECU에는 값을 두지 않았지만, 화면에서는 두 경우 모두 꺼진 버튼으로 보인다.

스위치 포트에 PNC 지정하기​

스위치 포트의 PNC MAPPINGS는 "이 포트는 어느 PNC가 깨어 있을 때 쓰이는가"를 나타낸다. 후보는 이 장에서 정의한 PNC 카탈로그이고, 목록에 "PNC_Comfort (PNC 17)"처럼 이름과 식별자가 함께 표시된다.

  1. 캔버스에서 BackboneSwitch 노드를 더블클릭한다. Ethernet Switch Configuration [BackboneSwitch] 워크벤치가 열린다.

  2. 워크벤치 왼쪽의 스위치 그림에서 Port_1을 클릭한다. 오른쪽 COUPLING PORT 패널에 포트 설정이 표시된다.

  3. PNC MAPPINGS 칸을 클릭해 체크박스 목록을 연다. 체크 목록에서 PNC_Comfort (PNC 17)을 체크하고 Esc를 눌러 목록을 닫는다.

    참고. 드롭다운에 후보가 보이지 않으면 워크벤치를 Close로 닫고 BackboneSwitch를 다시 더블클릭해 연다. 후보는 PNC 대화상자에서 저장한 PNC 카탈로그이며, 이름 (PNC 번호) 형식으로 표시된다.

    BackboneSwitch 워크벤치의 Port_1

    그림 3-25. 완성 예제의 BackboneSwitch 워크벤치에서 Port_1을 선택한 화면. ① Port_1, ② DEFAULT VLAN (PVID) = VLAN_Body, VLAN ID = 100, ③ PNC MAPPINGS = PNC_Comfort (PNC 17), ④ VLAN MEMBERSHIP(VLAN_Body, TAGGED). 일부 포트의 연결 라벨과 CONNECTED TO 값은 길이 때문에 잘려 보인다.

    COUPLING PORT 패널 확대

    그림 3-26. 그림 3-25의 COUPLING PORT 패널 확대. ① DEFAULT VLAN (PVID), ② PNC MAPPINGS, ③ VLAN MEMBERSHIP. PORT ROLE은 STANDARD-PORT, PHYSICAL LAYER TYPE은 1000BASE-T1이다.

  4. 나머지 포트도 아래 표와 같이 지정한다. 한 포트에 PNC를 여러 개 체크할 수 있다.

    포트연결 대상VLANPNC MAPPINGS
    Port_0HPCVLAN_Body, VLAN_RearPNC_Comfort, PNC_ParkAssist, PNC_Trailer
    Port_1WestZoneVLAN_BodyPNC_Comfort
    Port_2SouthZoneVLAN_RearPNC_ParkAssist, PNC_Trailer
    Port_3EastZoneVLAN_BodyPNC_Comfort

    Port_0의 PNC MAPPINGS 드롭다운

    그림 3-27. Port_0의 PNC MAPPINGS 드롭다운을 연 모습(완성 예제). ① 닫혀 있을 때의 칸에는 체크한 PNC가 쉼표로 이어져 보이고, 길면 끝이 잘린다. ② 후보 세 개 PNC_Comfort (PNC 17), PNC_ParkAssist (PNC 18), PNC_Trailer (PNC 19)가 모두 체크되어 있다. HPC로 가는 포트이므로 세 PNC가 모두 지나간다.

  5. 워크벤치에서 Ctrl+S를 눌러 설정을 System 편집기에 적용하고 Close로 닫는다. 적용하지 않고 Close를 누르면 "Do you want to save the changes?" 확인 창이 나타난다.

  6. System 편집기에서 Ctrl+S로 저장한다.

참고. 완성 예제에서는 Ethernet 컨트롤러 쪽 포트에도 같은 PNC가 지정되어 있다. HPC_Eth_Port는 세 PNC 모두, WestZone_Eth_Port와 EastZone_Eth_Port는 PNC_Comfort, SouthZone_Eth_Port는 PNC_ParkAssist와 PNC_Trailer이다.

NM 설정​

NM 클러스터는 한 통신 클러스터 위에서 같은 규칙으로 깨어나고 잠드는 노드들의 묶음이다. PNC 비트 벡터는 NM PDU에 실려 오가므로, PNC가 실제로 동작하려면 그 버스의 NM 클러스터가 PNC를 나른다고 표시되어 있어야 하고(NM PNC PARTICIPATION = YES), NM 타이밍 필수 속성이 채워져 있어야 한다. 또 NM 노드마다 NM NODE ID와 주고받을 NM-PDU가 지정되어 있어야 한다. 대표로 NmCluster_WestCAN과 WestZone의 CAN NM 노드를 끝까지 만들어 보고, 나머지는 전체 NM 값 표를 보며 같은 방법으로 반복한다.

참고. NM 클러스터와 NM 노드는 직접 만드는 것이 아니다. NM을 켠 통신 클러스터마다 토폴로지 설계에서 그린 통신 클러스터와 커넥터에서 자동으로 만들어진다. 그래서 목록에 추가, 삭제 버튼이 없고 NM 노드의 NM CLUSTER, CONTROLLER, CONNECTOR 세 칸도 읽기 전용이다. 새로 그린 클러스터는 NM이 꺼져 있으므로, 직접 만든 프로젝트에서는 먼저 클러스터마다 대화상자에서 NM을 켠다(NmCluster_WestCAN 값 채우기의 2단계). 그다음 이 절에서 하는 일은 자동으로 생긴 요소에 값을 채우는 것이다.

빠진 NM 필수 속성 확인하기​

  1. PAIO가 프로젝트를 스스로 검증하므로 검증을 실행하려고 클릭할 것은 없다. VALIDATION 패널이 열려 있지 않으면 상태 표시줄의 검증 아이콘(V)을 클릭해 연다. NmCluster_WestCAN의 필수 속성이 비어 있으면 오류 4건이 보이고, 검증 아이콘에 빨간 배지 4가 붙어 있다. 직접 만든 프로젝트에서는 이 시점에 NM이 아직 꺼져 있고, NM을 켜면 클러스터에 이 네 속성의 기본값이 들어가므로(그림 3-32 아래의 주의) 이 오류가 보이지 않는다. 아래 그림과 표는 이 오류가 무엇을 알려 주는지 보여 준다.

    NM 필수 속성 오류 4건

    그림 3-28. VALIDATION 패널. ELEMENT TYPE은 CanNmCluster, NAME은 NmCluster_WestCAN이다. DESCRIPTION 칸 네 개 가운데 세 개는 길이 때문에 끝이 잘려 보인다.

    CONSTR빠진 속성화면에서 채우는 곳
    constr_9157nmBusloadReductionActiveCHANNEL 섹션의 NM BUSLOAD REDUCTION ACTIVE
    constr_9158nmImmediateNmTransmissionsNM TIMING CONFIGURATION 섹션의 NM IMMEDIATE NM TRANSMISSIONS
    constr_9159nmMessageTimeoutTimeNM TIMING CONFIGURATION 섹션의 NM MESSAGE TIMEOUT TIME
    constr_9162nmRemoteSleepIndicationTimeNM TIMING CONFIGURATION 섹션의 NM REMOTE SLEEP INDICATION TIME

NmCluster_WestCAN 값 채우기​

  1. System 편집기 캔버스에서 WestZone 아래에 있는 CAN 클러스터 노드를 더블클릭한다. 노드 아래에 이름 WestCAN이 보이고, 마우스를 올리면 WestCAN (Can, 500 kbps) 라벨이 나타난다.

    WestCAN 클러스터 노드

    그림 3-29. System 편집기 캔버스. ① 더블클릭할 WestCAN 클러스터 노드.

  2. Communication Cluster Configuration [WestCAN] 대화상자가 CLUSTER 탭으로 열린다. CAN NM CLUSTER 탭을 클릭한다. 이 클러스터의 NM이 아직 꺼져 있으면 탭이 NM CLUSTER로 보이고, 앞에 빈 동그라미가 있고 이름이 흐리며, 폼을 편집할 수 없다. 이 탭에 마우스를 올리면 툴팁 Disabled. Right-click to enable.이 보이고, 오른쪽 클릭하면 항목이 Enable 하나뿐인 메뉴가 열린다. Enable을 고르면 탭이 채운 동그라미와 함께 CAN NM CLUSTER로 바뀌고 폼을 편집할 수 있게 된다. 왼쪽이 NM CONFIGURATION 폼이고, 오른쪽은 읽기 전용 NM STATE MACHINE 다이어그램이다.

    CAN NM CLUSTER 탭

    그림 3-30. Communication Cluster Configuration [WestCAN]. ① CAN NM CLUSTER 탭, ② NM PNC PARTICIPATION(아직 NO), ③ NM BUSLOAD REDUCTION ACTIVE. 탭 구성은 프로토콜에 따라 다르다. CAN 클러스터는 CLUSTER, CAN NM CLUSTER, TRANSPORT PROTOCOL, TIME DOMAIN이다. 기능 탭 앞의 동그라미는 그 기능이 켜져 있는지를 나타낸다. CAN NM CLUSTER는 채운 동그라미이고, 이 클러스터에서 꺼져 있는 TRANSPORT PROTOCOL과 TIME DOMAIN은 빈 동그라미에 탭 이름이 흐리게 보인다.

  3. CHANNEL 섹션에서 NM PNC PARTICIPATION을 YES로 바꾼다.

  4. NM BUSLOAD REDUCTION ACTIVE를 ACTIVE로 눌렀다가 다시 INACTIVE로 되돌린다. 예제 값은 INACTIVE이다.

    CHANNEL 섹션 입력 결과

    그림 3-31. 입력을 마친 CHANNEL 섹션. ① NAME = NmCluster_WestCAN, ② NM PNC PARTICIPATION = YES, ③ NM BUSLOAD REDUCTION ACTIVE = INACTIVE. NM CHANNEL ID는 비워 둔다.

    주의. 값이 아직 없는 두 상태 버튼은 화면에서 한쪽이 눌린 것처럼 보이지만 모델에는 값이 없다. 이미 눌린 쪽을 다시 눌러도 아무 일도 일어나지 않는다. 그래서 NM BUSLOAD REDUCTION ACTIVE처럼 값이 없는데 원하는 쪽이 이미 눌려 보이는 항목은 반대쪽을 한 번 눌렀다가 되돌려야 값이 확정된다.

  5. NM TIMING CONFIGURATION 섹션에 NM MESSAGE TIMEOUT TIME 0.1, NM REMOTE SLEEP INDICATION TIME 1, NM IMMEDIATE NM TRANSMISSIONS 5를 입력한다. 같은 섹션의 나머지 칸도 NM MSG CYCLE TIME 0.5, NM REPEAT MESSAGE TIME 1.5, NM WAIT BUS SLEEP TIME 1.5, NM NETWORK TIMEOUT 2, NM IMMEDIATE NM CYCLE TIME 0.02인지 확인하고, 값이 다르거나 비어 있으면 입력한다.

    NM TIMING CONFIGURATION 섹션 입력 결과

    그림 3-32. 입력을 마친 NM TIMING CONFIGURATION 섹션. ① NM MESSAGE TIMEOUT TIME = 0.1 s, ② NM REMOTE SLEEP INDICATION TIME = 1 s, ③ NM IMMEDIATE NM TRANSMISSIONS = 5. 화면의 나머지 칸은 NM MSG CYCLE TIME 0.5 s, NM REPEAT MESSAGE TIME 1.5 s, NM NETWORK TIMEOUT 2 s, NM WAIT BUS SLEEP TIME 1.5 s, NM IMMEDIATE NM CYCLE TIME 0.02 s이다.

    참고. 시간 칸에는 노드 타이머와 마찬가지로 단위 선택기(ns, us, ms, s)가 붙고 기본 단위는 s이다. 따라서 0.1과 1을 그대로 입력하면 된다. NM IMMEDIATE NM TRANSMISSIONS는 횟수라서 단위 선택기가 없다.

    주의. 자동으로 만들어진 NM 클러스터에는 기본값이 들어 있다. NM MSG CYCLE TIME 0.5, NM REPEAT MESSAGE TIME 1.0, NM WAIT BUS SLEEP TIME 1.5, NM NETWORK TIMEOUT 2, NM MESSAGE TIMEOUT TIME 2, NM REMOTE SLEEP INDICATION TIME 1이고, CanNm 클러스터에는 NM BUSLOAD REDUCTION ACTIVE INACTIVE와 NM IMMEDIATE NM TRANSMISSIONS 0도 들어 있다. 이 가운데 NM REPEAT MESSAGE TIME, NM MESSAGE TIMEOUT TIME, NM IMMEDIATE NM TRANSMISSIONS는 예제 값 1.5, 0.1, 5와 다르므로 반드시 고쳐야 하고, NM IMMEDIATE NM CYCLE TIME과 다음 단계의 USER DATA 네 칸은 비어 있으므로 직접 입력해야 한다. 위 그림에는 예제 값이 이미 들어 있다.

  6. 폼을 아래로 스크롤해 맨 아래의 USER DATA 섹션을 본다. 네 값을 확인하고, 비어 있으면 입력한다. NM NID POSITION (0-7) 1, NM CBV POSITION (0-7) 0, NM USER DATA OFFSET 2, NM USER DATA LENGTH (BYTES) 6이다.

    USER DATA 섹션

    그림 3-33. USER DATA 섹션. ① NM NID POSITION (0-7) = 1, ② NM CBV POSITION (0-7) = 0, ③ NM USER DATA OFFSET = 2, ④ NM USER DATA LENGTH (BYTES) = 6. 뒤의 두 값은 PNC 비트 벡터 설정하기의 PNC VECTOR OFFSET, PNC VECTOR LENGTH와 같은 자리를 가리킨다.

  7. Ctrl+S로 저장하고 Close로 닫는다.

WestZone의 NM 노드 값 채우기​

  1. System 편집기 캔버스에서 WestZone 노드를 더블클릭한다. ECU Configuration [WestZone] 대화상자가 ECU RESOURCE 탭으로 열린다. NETWORK MANAGEMENT 탭을 클릭한다.

    ECU Configuration의 NETWORK MANAGEMENT 탭

    그림 3-34. ECU Configuration [WestZone] 대화상자의 NETWORK MANAGEMENT 탭. ① 왼쪽 목록. NM ECU 1개와 NM NODE 들이 UDP, CAN 배지와 함께 있다. 가운데는 선택한 NM ECU의 값이고 오른쪽은 NM COORDINATOR 다이어그램이다. 목록은 토폴로지에서 자동으로 만들어지므로 추가, 삭제 버튼이 없다. 대화상자의 탭은 ECU RESOURCE, NETWORK MANAGEMENT, TIME DOMAIN, GATEWAY(꺼짐, 빈 동그라미), DIAGNOSTIC이다.

    참고. 이 화면의 목록에는 WestZone_UdpNm 말고 WestZone이라는 UDP NM 노드가 하나 더 보인다. 완성 예제가 Backbone 하나에 NM 클러스터 2개를 두었기 때문이며(뒤의 주의), 직접 만든 프로젝트에는 나타나지 않는다.

  2. CAN 배지가 붙은 NM 노드를 선택한다. NM NODE ID에 16을 입력하고 NM COORDINATOR ROLE에서 ACTIVE를 클릭한다. WestZone이 WestCAN의 게이트웨이이기 때문이다.

    참고. 자동으로 만들어진 NM 노드의 NAME은 그 노드(ECU)의 이름과 같다. 그래서 WestZone의 CAN 노드와 UDP 노드가 둘 다 WestZone이라는 이름으로 보일 수 있다. 이 튜토리얼은 완성 예제와 같이 NAME을 WestZone_CanNm, WestZone_UdpNm처럼 고쳐 구분한다. 이름을 바꾸면 NM ECU의 코디네이터 참조도 함께 갱신된다. NM COORDINATOR ROLE의 기본값은 NONE이므로 게이트웨이 노드에서는 ACTIVE를 직접 눌러야 한다.

    WestZone_CanNm의 NM NODE ID

    그림 3-35. WestZone_CanNm. ① NM CLUSTER, CONTROLLER, CONNECTOR 줄은 읽기 전용이다. CAN NM 노드는 컨트롤러로 식별하므로 CONNECTOR는 --이다. ② NM NODE ID = 16, ③ NM COORDINATOR ROLE = ACTIVE. 아래의 CAN-SPECIFIC 섹션은 이 예제에서 비워 둔다.

주의. 다음 3단계와 4단계는 NM-PDU 18개가 있어야 할 수 있다. NM-PDU는 다음 장인 신호·PDU·프레임과 I-PDU Group에서 만든다. 순서대로 따라왔다면 지금은 후보 목록이 비어 있으므로 3단계와 4단계를 건너뛰고 5단계로 간다. 4장의 NM-PDU 만들기를 마친 뒤 이 절로 돌아와 NM 노드마다 3단계와 4단계를 한다. 나머지 NM 값은 지금 입력해 두면 된다.

  1. NM-PDU REFS 섹션에서 TX-NM-PDU-REFS 칸을 클릭한다. 체크박스 목록이 열리고 신호·PDU·프레임과 I-PDU Group에서 만든 NM-PDU가 모두 후보로 나온다. WestCAN_NmPdu_WestZone 하나만 체크하고 Esc를 눌러 닫는다.

    TX-NM-PDU-REFS 드롭다운

    그림 3-36. ① TX-NM-PDU-REFS의 체크박스 목록. 다른 버스의 NM-PDU도 함께 보이므로 이름 앞의 버스 이름(WestCAN_)을 보고 고른다.

  2. RX-NM-PDU-REFS 칸에서 같은 클러스터의 나머지 4개 WestCAN_NmPdu_DoorCtrl_FL, WestCAN_NmPdu_SeatCtrl_FL, WestCAN_NmPdu_MirrorAct_FL, WestCAN_NmPdu_WindowSw_FL을 체크하고 Esc를 누른다.

    NM-PDU REFS 지정 결과

    그림 3-37. 지정을 마친 NM-PDU REFS 섹션. ① TX-NM-PDU-REFS 1개, ② RX-NM-PDU-REFS 4개. 칸 아래 표는 고른 NM-PDU의 LENGTH, VOTE, DATA, USER DATA를 보여 준다. 다섯 개 모두 LENGTH 8, DATA YES이다.

    참고. TX-NM-PDU-REFS는 한 개까지만 고를 수 있다(constr_9388). 한 NM 노드는 자기 NM-PDU 하나만 보내고 같은 클러스터의 나머지를 받는다.

  3. Ctrl+S로 저장하고 Close로 닫는다.

  4. 저장할 때마다 검증이 다시 실행되므로 따로 클릭할 것은 없다. VALIDATION 패널에서 constr_9157, constr_9158, constr_9159, constr_9162는 모두 사라진다. 패널이 닫혀 있으면 상태 표시줄의 검증 아이콘(V)을 클릭해 연다.

    NM 값을 채운 뒤의 VALIDATION 패널

    그림 3-38. NM 값을 채운 뒤의 VALIDATION 패널. NM 오류 4건이 사라지고 "No validation issues."가 표시된다.

    주의. Communication Cluster Configuration 대화상자에서 Ctrl+S를 누르면 IVC 모델(IVC.io.model) 전체가 다시 저장되면서 완성 예제와 달라지는 부분이 생긴다. Backbone의 VLAN 설정이 사라지고, Ethernet 쪽 NM 노드가 몇 개 더 생기며, 빈 tp-config가 추가된다. CAN 클러스터의 CAN FD 설정은 그대로 남는다. 전송 프로토콜은 클러스터마다 켜는 기능이고 여기서는 꺼져 있으므로(TRANSPORT PROTOCOL 탭의 빈 동그라미) CanTpConfig는 만들어지지 않으며, 이 저장으로 검증 오류가 생기지도 않는다. 전송 프로토콜(CanTp)은 이 튜토리얼의 범위 밖이다. 완성 예제와의 차이는 부록 — 직접 만든 프로젝트와 완성 예제의 차이에 정리되어 있다.

Ethernet(UdpNm) 쪽 차이점​

  1. Backbone 클러스터 노드를 더블클릭한다. 대화상자는 이번에도 CLUSTER 탭으로 열리고, NM 탭의 이름은 UDP NM CLUSTER이다. 이 탭을 클릭한다. 탭이 빈 동그라미와 함께 NM CLUSTER로 보이면 Backbone의 NM이 아직 꺼져 있는 것이므로, WestCAN에서처럼 Enable로 켠다. CHANNEL, NM TIMING CONFIGURATION, USER DATA 섹션 구성은 CAN과 같고, 맨 아래에 NETWORK CONFIGURATION (UDP) 섹션이 하나 더 있다. 이 섹션은 폼을 아래로 스크롤해야 보인다. UdpNm은 즉시 전송을 쓰지 않으므로 NM IMMEDIATE NM CYCLE TIME과 NM IMMEDIATE NM TRANSMISSIONS는 비워 둔다. 나머지는 CAN과 같은 값을 채운다. NM MESSAGE TIMEOUT TIME 0.1과 NM REMOTE SLEEP INDICATION TIME 1은 UdpNm 클러스터에서도 필수이고(constr_5222), USER DATA 네 값도 1 / 0 / 2 / 6으로 같다.

    UDP NM CLUSTER 탭

    그림 3-39. 폼을 끝까지 스크롤한 Communication Cluster Configuration [Backbone]. ① UDP NM CLUSTER 탭, ② NETWORK CONFIGURATION (UDP) 섹션. Ethernet 클러스터의 탭은 CLUSTER, UDP NM CLUSTER, TIME DOMAIN(꺼짐, 빈 동그라미) 세 개이다.

  2. NETWORK CONFIGURATION (UDP) 섹션에 IPV4 MULTICAST IP ADDRESS 239.100.0.1, UDP PORT 30490을 입력한다. 섹션 머리글 오른쪽의 IPv4 | IPv6 전환으로 주소 칸을 바꾼다. 둘 중 하나만 쓴다.

    NETWORK CONFIGURATION (UDP) 섹션

    그림 3-40. NETWORK CONFIGURATION (UDP) 섹션. ① IPV4 MULTICAST IP ADDRESS = 239.100.0.1, ② UDP PORT = 30490.

  3. UDP NM 노드도 ECU 대화상자에서 같은 방법으로 값을 채운다. HPC는 HPC Configuration [HPC] 대화상자로 열리며, 여기에는 GATEWAY 탭이 없다. UDP NM 노드는 NM MSG CYCLE OFFSET이 비어 있으면 constr_5223이 보고되므로 0이라도 입력한다.

    HPC_UdpNm 노드

    그림 3-41. HPC의 HPC_UdpNm 노드. ① 읽기 전용 줄. UDP NM 노드는 커넥터로 식별하므로 CONNECTOR에 HPC_Eth_Body_Conn이 채워져 있다. ② CAN 노드의 CAN-SPECIFIC 대신 UDP-SPECIFIC 섹션이 있고 그 안에 NM PN HANDLE MULTIPLE NETWORK REQUESTS(YES) 하나가 있다.

주의. 예제는 Backbone 하나 위에 NmCluster_VLAN_Body와 NmCluster_VLAN_Rear 두 NM 클러스터를 둔다. 그런데 Backbone을 더블클릭하면 언제나 첫 번째인 NmCluster_VLAN_Body만 열린다. NmCluster_VLAN_Rear의 값은 화면에서 편집할 수 없다.

전체 NM 값​

나머지 NM 클러스터도 같은 방법으로 반복한다. 시간 값의 단위는 모두 초(s)이다.

NM 클러스터종류통신 클러스터NM PNC PARTICIPATIONMSG CYCLE / REPEAT MESSAGE / WAIT BUS SLEEP / NETWORK TIMEOUTREMOTE SLEEP IND / MESSAGE TIMEOUTNID POS / CBV POS / USER DATA OFFSET / LENGTH프로토콜별 값
NmCluster_WestCANCanNmWestCANYES0.5 / 1.5 / 1.5 / 21 / 0.11 / 0 / 2 / 6BUSLOAD REDUCTION INACTIVE, IMMEDIATE NM CYCLE TIME 0.02, IMMEDIATE NM TRANSMISSIONS 5
NmCluster_RearCANCanNmRearCANYES같음같음같음같음
NmCluster_EastCANCanNmEastCANYES같음같음같음같음
NmCluster_VLAN_BodyUdpNmBackboneYES같음같음같음IPv4 239.100.0.1 / UDP PORT 30490
NmCluster_VLAN_RearUdpNmBackboneYES같음같음같음IPv4 239.200.0.1 / UDP PORT 30490

표의 마지막 행 NmCluster_VLAN_Rear는 위의 주의대로 화면에서 열 수 없다. 직접 만든 프로젝트에서는 이 한 행을 입력하지 못한 채로 진행하고, 무엇이 달라지는지는 부록 — 직접 만든 프로젝트와 완성 예제의 차이에서 확인한다.

다섯 클러스터에 공통으로 NM NODE ID ENABLED는 ENABLED이다. CanNm 클러스터는 NM CHANNEL ACTIVE = ACTIVE, NM CHANNEL SLEEP MASTER = NO, NM NODE DETECTION ENABLED = DISABLED이고, UdpNm 클러스터는 NM NODE DETECTION ENABLED가 ENABLED이다. NM CHANNEL ID는 다섯 클러스터 모두 비워 둔다. 이 상태 버튼들에도 앞의 주의가 그대로 적용된다. 화면에 이미 원하는 쪽이 눌려 보이더라도 반대쪽을 한 번 눌렀다가 되돌려야 값이 모델에 들어간다.

NM 노드는 클러스터마다 게이트웨이 노드가 먼저 번호를 받고 나머지 노드가 그다음 번호를 이어받는다. CAN 쪽은 16부터, Ethernet 쪽은 0부터 붙였다. 규칙이 아니라 이 예제의 선택이다. NM MSG CYCLE OFFSET은 노드가 NM-PDU를 보내는 시각을 조금씩 어긋나게 해 버스 충돌을 줄인다.

NM 클러스터NM 노드NM NODE IDNM COORDINATOR ROLENM MSG CYCLE OFFSETTX-NM-PDU-REFS
NmCluster_WestCANWestZone_CanNm16ACTIVE0WestCAN_NmPdu_WestZone
NmCluster_WestCANDoorCtrl_FL_CanNm17NONE0.05WestCAN_NmPdu_DoorCtrl_FL
NmCluster_WestCANSeatCtrl_FL_CanNm18NONE0.10WestCAN_NmPdu_SeatCtrl_FL
NmCluster_WestCANMirrorAct_FL_CanNm19NONE0.15WestCAN_NmPdu_MirrorAct_FL
NmCluster_WestCANWindowSw_FL_CanNm20NONE0.20WestCAN_NmPdu_WindowSw_FL
NmCluster_RearCANSouthZone_CanNm16ACTIVE0RearCAN_NmPdu_SouthZone
NmCluster_RearCANParkSensor_RR_CanNm17NONE0.05RearCAN_NmPdu_ParkSensor_RR
NmCluster_RearCANTrailerModule_CanNm18NONE0.10RearCAN_NmPdu_TrailerModule
NmCluster_RearCANTailLamp_RR_CanNm19NONE0.15RearCAN_NmPdu_TailLamp_RR
NmCluster_EastCANEastZone_CanNm16ACTIVE0EastCAN_NmPdu_EastZone
NmCluster_EastCANDoorCtrl_FR_CanNm17NONE0.05EastCAN_NmPdu_DoorCtrl_FR
NmCluster_EastCANSeatCtrl_FR_CanNm18NONE0.10EastCAN_NmPdu_SeatCtrl_FR
NmCluster_EastCANMirrorAct_FR_CanNm19NONE0.15EastCAN_NmPdu_MirrorAct_FR
NmCluster_VLAN_BodyHPC_UdpNm0NONE0VLAN_Body_NmPdu_HPC
NmCluster_VLAN_BodyWestZone_UdpNm1ACTIVE0VLAN_Body_NmPdu_WestZone
NmCluster_VLAN_BodyEastZone_UdpNm2PASSIVE0VLAN_Body_NmPdu_EastZone
NmCluster_VLAN_RearHPC_UdpNm0NONE0VLAN_Rear_NmPdu_HPC
NmCluster_VLAN_RearSouthZone_UdpNm1ACTIVE0VLAN_Rear_NmPdu_SouthZone

위 표의 NM NODE ID, NM COORDINATOR ROLE, NM MSG CYCLE OFFSET은 지금 입력한다. TX-NM-PDU-REFS 열과 아래의 RX-NM-PDU-REFS는 4장을 마친 뒤 이 표로 돌아와 채운다.

RX-NM-PDU-REFS에는 같은 NM 클러스터의 나머지 NM-PDU를 모두 체크한다. 예를 들어 DoorCtrl_FL_CanNm은 WestCAN_NmPdu_WestZone, WestCAN_NmPdu_SeatCtrl_FL, WestCAN_NmPdu_MirrorAct_FL, WestCAN_NmPdu_WindowSw_FL 네 개를 받는다. UDP NM 노드는 UDP-SPECIFIC 섹션의 NM PN HANDLE MULTIPLE NETWORK REQUESTS가 모두 YES이다.

참고. 완성 예제에는 NM 클러스터 커플링도 있다. UdpNm 커플링 하나(NmCluster_VLAN_Body, NmCluster_VLAN_Rear)와 CanNm 커플링 하나(NmCluster_WestCAN, NmCluster_RearCAN, NmCluster_EastCAN)이며, 두 커플링 모두 즉시 재시작을 켜고 CanNm 커플링은 버스 부하 감소를 끈다. 이 값은 현재 화면에서 만들거나 편집할 수 없고 ARXML을 들여올 때 함께 들어온다. 커플링이 없어도 이 튜토리얼의 검증은 통과한다. CanNm 커플링이 있는데 두 값이 비어 있으면 constr_9165, constr_9166이 보고된다. UdpNm 커플링에는 해당하는 규칙이 없다(System 에디터와 검증).

왜 이렇게 설계하는가​

설계 근거. PNC와 채널의 관계는 두 곳에 따로 기록된다.

  • 이 장의 커넥터 속성은 "ECU가 그 채널에서 PNC를 어떻게 다루는가"(게이트웨이 역할, 웨이크업, 필터 마스크)이다.
  • PNC 대화상자의 PHYSICAL CHANNELS와 MATRIX는 "PNC가 어느 채널에 걸쳐 있는가"이다. PNC 다이얼로그 — PNC별 바인딩에서 입력한다.

두 정보는 서로 다른 AUTOSAR 요소이며 PAIO도 따로 보관한다. 게이트웨이를 어떻게 나누는지(VLAN마다 active 하나, EastZone은 passive)는 토폴로지 설계에 설명되어 있다.

확인하기​

  • PNC 대화상자의 PARTIAL NETWORKS 목록에 PNC 17 PNC_Comfort, PNC 18 PNC_ParkAssist, PNC 19 PNC_Trailer가 있다.
  • PNC 3개를 저장한 직후 VALIDATION 패널에 "No validation issues."가 표시된다.
  • WestZone_CanFd_Conn의 PARTIAL NETWORK가 ACTIVE, CREATE ECU WAKEUP SOURCE 켬, 0x500 / 0x700 / 8, Byte 0 = 0x02이다.
  • EastZone_Eth_Conn만 PASSIVE이고, 다른 Zone 커넥터는 모두 ACTIVE이다.
  • 말단 ECU 커넥터는 모두 NONE이고, Byte 0이 자기 PNC 비트(0x02, 0x04, 0x08)이다.
  • WestZone 노드의 PARTIAL NETWORK에서 PNC NM REQUEST가 켜져 있고, PNC PREPARE SLEEP TIMER = 0.5, PN RESET TIME = 2이다.
  • HPC 노드의 PARTIAL NETWORK에 토글 없이 PNC PREPARE SLEEP TIMER = 0.5 s, PN RESET TIMER = 2 s만 있다.
  • BackboneSwitch 워크벤치에서 Port_1의 PNC MAPPINGS가 PNC_Comfort (PNC 17)이고, Port_0은 세 PNC가 모두 체크되어 있다.
  • PNC 대화상자 NM VECTOR 탭의 PNC VECTOR OFFSET이 2, PNC VECTOR LENGTH가 6이다.
  • NmCluster_WestCAN의 NM PNC PARTICIPATION이 YES이고, NM MESSAGE TIMEOUT TIME 0.1 s, NM REMOTE SLEEP INDICATION TIME 1 s, NM IMMEDIATE NM TRANSMISSIONS 5가 입력되어 있다.
  • WestZone_CanNm의 NM NODE ID가 16이고 NM COORDINATOR ROLE이 ACTIVE이다.
  • (4장을 마친 뒤) WestZone_CanNm의 TX-NM-PDU-REFS에 WestCAN_NmPdu_WestZone 하나, RX-NM-PDU-REFS에 4개가 지정되어 있다.
  • VALIDATION 패널에 constr_9157, constr_9158, constr_9159, constr_9162가 보이지 않는다.
  • 탭 이름 PNC:System 옆에 저장 안 됨 점이 없다.

다음 단계​

신호·PDU·프레임과 I-PDU Group에서 버스별 신호와 PDU를 만들고, PNC가 실제로 켜고 끄는 I-PDU Group을 만든다. 그 장에서 NM-PDU 18개를 만든 뒤에는 이 장의 NM 설정으로 한 번 돌아와 NM 노드의 TX-NM-PDU-REFS와 RX-NM-PDU-REFS를 채운다.