본문으로 건너뛰기

PDU GROUPS·MATRIX·NM VECTOR 검토

이 장에서 할 일​

PNC(Partial Network Cluster) 다이얼로그의 오른쪽 뷰어에는 PDU GROUPS, MATRIX, NM VECTOR 세 탭이 있다. 이 장에서는 세 탭을 차례로 열어 앞 장까지 입력한 PNC 설계를 교차 검토한다.

  • PDU GROUPS: PDU마다 어느 PNC에 속하는지 본다.
  • MATRIX: PNC와 물리 채널의 관계를 한 표로 본다.
  • NM VECTOR: NM PDU 안에서 PNC 비트가 어디에 놓이는지 본다.

이 장은 보기만 한다. 값을 바꾸거나 저장하지 않는다. 이 장을 마치면 세 탭을 읽는 법과, 커넥터 필터 마스크 값이 NM PDU의 어느 비트에 해당하는지 알 수 있다.

시작하기 전에​

  • PNC 다이얼로그 — PNC별 바인딩을 마쳐야 한다.
  • 이 장은 모든 바인딩이 끝나고 저장까지 마친 상태에서 시작한다. 앞 장을 끝까지 따라 했다면 그 상태 그대로 이어진다. 완성 상태는 나머지 PNC의 값의 표와 같다.
  • 이 장은 읽기만 하는 장이다. 세 탭에서 값을 바꾸지 않는다.
  • NM VECTOR 탭이 읽는 NM 클러스터와 NM 노드는 NM 설정에서 값을 채웠다. 두 요소는 토폴로지 설계에서 그린 토폴로지에서 자동으로 만들어지고, 클러스터의 NM PNC PARTICIPATION과 NM 타이밍은 통신 클러스터 대화상자에서, 노드의 NM NODE ID와 NM-PDU는 노드 대화상자의 NETWORK MANAGEMENT 탭에서 입력한다. 값이 표와 다르면 3장의 전체 NM 값 표와 맞춰 본다. 전체 설명은 IVC Editor를 참고한다.
  • 이 장에서 보는 주요 값은 다음과 같다.
항목값
PNCPNC_Comfort 17, PNC_ParkAssist 18, PNC_Trailer 19
PNC VECTOR OFFSET / PNC VECTOR LENGTH2 / 6 (NM PDU의 Byte 27, 비트 1663)
NM 클러스터NmCluster_EastCAN, NmCluster_RearCAN, NmCluster_WestCAN(CanNm), NmCluster_VLAN_Body, NmCluster_VLAN_Rear(UdpNm)

뷰어 탭 열기​

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

  2. 캔버스 왼쪽 가장자리의 세로 아이콘 줄에서 두 번째(아래쪽) 아이콘을 누른다. 마우스를 올리면 Partial Network (PNC) 툴팁이 나타난다. Partial Network (PNC) Configuration 다이얼로그가 열린다.

  3. 왼쪽 PARTIAL NETWORKS 목록에서 PNC 19 PNC_Trailer 항목을 누른다.

    PNC_Trailer를 선택한 다이얼로그와 뷰어 탭

    그림 8-1. PNC 19 PNC_Trailer 항목을 선택한 다이얼로그. ① 목록 항목 PNC 19 PNC_Trailer. ② 뷰어 탭 줄 PDU GROUPS / MATRIX / NM VECTOR. 처음에는 PDU GROUPS 탭이 선택되어 있다. ③ 가운데 상세와 뷰어 사이의 경계선. 기본 폭에서는 CLUSTER 열이 잘리고 PNC MEMBERSHIP 열이 보이지 않는다.

  4. 경계선(그림 8-1의 ③)에 마우스를 올려 놓고 왼쪽으로 약 340px 끌어 뷰어를 넓힌다. PDU, FRAME, CLUSTER, PNC MEMBERSHIP 네 열이 모두 보이면 된다.

참고. 넓힌 폭은 탭을 바꿔도 유지된다. 다이얼로그를 닫으면 기본 폭으로 돌아간다.

PDU GROUPS 읽기​

PDU GROUPS 탭은 모든 클러스터의 PDU를 한 표로 보여 준다. 한 행이 PDU 하나이다.

열내용
PDUPDU 이름
FRAMEPDU를 싣는 프레임 이름, 프로토콜, CAN ID. 예) RearCAN_TrailerCmd CAN 0x410
CLUSTER클러스터 이름과 프로토콜. 예) RearCAN CAN
PNC MEMBERSHIPPDU가 속한 PNC. PNC에 바인딩된 I-PDU Group에 이 PDU가 들어 있으면 그 PNC 이름이 나온다. 없으면 "Assign PNCs..."가 흐리게 나온다.
  1. 왼쪽에서 선택한 PNC(PNC_Trailer)에 속한 행이 파랗게 강조되어 있는지 본다.

    넓힌 PDU GROUPS 표

    그림 8-2. 뷰어를 넓힌 PDU GROUPS 표. ① PNC_Trailer에 속한 4행이 강조되어 있다: TailLampCmd_Pdu(0x413), TailLampStatus_Pdu(0x412), TrailerCmd_Pdu(0x410), TrailerStatus_Pdu(0x411). 모두 PNC MEMBERSHIP 열이 PNC_Trailer이다.

    • ComfortCmd_*, DoorStatus_*, MirrorCmd_*, MirrorStatus_*, SeatPosition_*, WindowSwitch_Pdu는 PNC_Comfort, ParkDistance_Pdu는 PNC_ParkAssist이다.
    • <클러스터>_NmPdu_<ECU> 형식의 NM PDU는 "Assign PNCs..."로 비어 있다. NM PDU는 어느 PNC의 I-PDU Group에도 넣지 않으므로 정상이다.

참고. PNC MEMBERSHIP 칸을 누르면 PNC를 지정하는 체크 목록이 열린다. 사용법은 PNC GROUPS 확인하기를 참고한다. 이 장에서는 누르지 않는다.

참고. 이 표에 보이는 프레임과 그룹이 따라 만든 프로젝트에서는 예제보다 적을 수 있다. 무엇이 왜 다른지는 부록 — 직접 만든 프로젝트와 완성 예제의 차이를 참고한다.

클러스터로 좁히기​

  1. 뷰어 왼쪽 위의 클러스터 필터(처음 값 All clusters)를 누르고 RearCAN 항목을 고른다. 선택지는 All clusters, Backbone, EastCAN, RearCAN, WestCAN 다섯 가지이다.

    클러스터 필터를 RearCAN으로 고른 PDU GROUPS 표

    그림 8-3. ① 클러스터 필터 RearCAN. RearCAN의 PDU 9행만 남는다. ② PNC_Trailer에 속한 4행. 그 위에는 ParkDistance_Pdu(PNC_ParkAssist)와 NM PDU 4행이 있다.

  2. 클러스터 필터를 All clusters 항목으로 되돌린다.

이름으로 찾기​

  1. 클러스터 필터 오른쪽 검색칸(자리 표시 search...)에 Trailer를 입력한다.

    검색어 Trailer로 좁힌 PDU GROUPS 표

    그림 8-4. ① 검색칸에 Trailer 입력. 3행이 남는다. ② PNC_Trailer에 속한 TrailerCmd_Pdu, TrailerStatus_Pdu. 첫 행 RearCAN_NmPdu_TrailerModule은 NM PDU라서 "Assign PNCs..."이다.

    • 검색은 PDU 이름, 프레임 이름, CAN ID, 프로토콜에서 찾는다. 대소문자는 가리지 않는다. TailLamp* PDU도 PNC_Trailer 소속이지만 이름에 Trailer가 없어서 나오지 않는다.
    • 검색은 클러스터 이름에서 찾지 않는다. 클러스터로 좁히려면 클러스터 필터를 쓴다.
  2. 검색칸을 비운다.

MATRIX 읽기​

MATRIX 탭은 PNC와 물리 채널의 관계를 표 하나로 보여 준다. 행은 PNC, 열은 물리 채널이다.

  1. 경계선을 오른쪽으로 끌어 뷰어를 원래 폭으로 되돌린다. 가운데 PHYSICAL CHANNELS 표가 다시 보인다. 왼쪽에는 PNC 19 PNC_Trailer 항목이 선택된 그대로이다.

  2. MATRIX 탭을 누른다.

    MATRIX 탭과 가운데 PHYSICAL CHANNELS

    그림 8-5. ① MATRIX 탭. ② 매트릭스의 PNC_Trailer 행. RearCAN / RearCAN_Channel과 Backbone / VLAN_Rear 칸에 ✓가 있다. ③ 가운데 PHYSICAL CHANNELS. RearCAN_Channel과 VLAN_Rear (VLAN 200)이 체크되어 있다. ②와 ③은 같은 값을 보여 준다.

  3. 매트릭스를 읽는다.

    MATRIX 표 확대

    그림 8-6. MATRIX 표 확대. 열 머리글은 "클러스터 / 채널"을 세로로 쓴다. ✓ 칸은 파란 배경이다. ① PNC_Comfort 행: EastCAN_Channel, WestCAN_Channel, VLAN_Body. ② PNC_ParkAssist, PNC_Trailer 행: 둘 다 RearCAN_Channel, VLAN_Rear.

    PNCEastCAN / EastCAN_ChannelRearCAN / RearCAN_ChannelWestCAN / WestCAN_ChannelBackbone / VLAN_BodyBackbone / VLAN_Rear
    17 PNC_Comfort✓✓✓
    18 PNC_ParkAssist✓✓
    19 PNC_Trailer✓✓
    • 각 PNC 행에서, 그 PNC가 지나가야 하는 채널에 모두 ✓가 있는지 확인한다. 값이 PNC 다이얼로그에서 PNC마다 체크한 PHYSICAL CHANNELS 표와 같아야 한다.

주의. 매트릭스 칸은 클릭하면 바로 바뀐다. 칸을 클릭하면 가운데 PHYSICAL CHANNELS 체크박스와 같은 참조(SYSTEM 모델의 물리 채널 참조)가 켜지거나 꺼진다. 모든 PNC의 행을 한 화면에서 고칠 수 있지만, 이 장에서는 보기만 하므로 클릭하지 않는다. 실수로 클릭했다면 같은 칸을 다시 클릭하거나 Ctrl+Z로 되돌린다. 저장하지 않은 변경이 있으면 다이얼로그 제목 앞에 ● 표시가 붙는다.

NM VECTOR 읽기​

NM VECTOR 탭은 PNC 비트가 NM PDU 안의 어느 바이트, 어느 비트에 놓이는지 보여 준다. PNC 식별자는 NM PDU 안의 절대 비트 번호이다. 식별자 N은 Byte N ÷ 8의 몫, bit N ÷ 8의 나머지에 놓인다.

  1. 왼쪽에서 PNC 17 PNC_Comfort 항목을 누른다.

  2. 경계선을 왼쪽으로 약 340px 끌어 뷰어를 다시 넓힌다. 기본 폭에서는 아래의 NM 노드 표가 가로로 스크롤된다.

  3. NM VECTOR 탭을 누른다.

    NM VECTOR 탭, 모든 NM 클러스터가 접힌 상태

    그림 8-7. NM VECTOR 탭. ① PNC BIT VECTOR 섹션의 PNC VECTOR OFFSET 2, PNC VECTOR LENGTH 6. ② NM PDU LAYOUT 섹션의 NM 클러스터 머리글 5개. 처음에는 모두 접혀 있다.

    • PNC VECTOR OFFSET, PNC VECTOR LENGTH 두 값은 SYSTEM 전체에 하나이다. 모든 NM 클러스터에 같이 적용된다. 값은 PNC 비트 벡터 설정하기에서 입력했다. 이 장에서는 바꾸지 않는다.
    • NM 클러스터 머리글은 <NM 종류> <NM 클러스터 이름> (<클러스터>) 형식이다. NM 종류는 CanNm 또는 UdpNm이다. 화면에는 모두 대문자로 보인다. 예) CanNm NmCluster_WestCAN (WestCAN)이 CANNM NMCLUSTER_WESTCAN (WESTCAN) 형태로 보인다.
    • 머리글은 NM 클러스터 이름순이다(EastCAN, RearCAN, VLAN_Body, VLAN_Rear, WestCAN).
  4. 맨 아래 CANNM NMCLUSTER_WESTCAN (WESTCAN) 머리글을 눌러 펼친다.

    NmCluster_WestCAN을 펼친 NM VECTOR 탭

    그림 8-8. NmCluster_WestCAN을 펼친 모습. 한 행이 NM PDU의 한 바이트이고, 칸 8개는 왼쪽부터 bit 7..0이다. ① Byte 0 = CBV(Control Bit Vector). ② Byte 1 = NID(Node ID). ③ Byte 27 = USER DATA, PNC VECTOR. 칸마다 PNC 식별자(1663)가 적혀 있다. ④ Byte 2 행의 칸은 왼쪽부터 23 22 21 20 19 18 17 16이고, 그 가운데 19, 18, 17 칸이 채워져 있다(번호 배지는 칸을 가리지 않도록 틀 위쪽에 붙어 있다). 선택한 PNC 17 칸에는 흰 테두리가 있다. ⑤ NM 노드 표.

  5. 비트 칸을 읽는다.

    • 정의된 PNC의 비트 칸은 파랗게 채워진다. 이 예제에서는 Byte 2의 17, 18, 19이다.
    • 왼쪽에서 선택한 PNC의 칸에는 흰 테두리가 붙는다. 다른 PNC를 선택하면 테두리가 그 PNC의 칸으로 옮겨 간다.
    • 채워진 칸에 마우스를 올리면 툴팁에 PNC 이름과 위치가 나온다. 예) "PNC_Comfort (byte 2, bit 1)", "PNC_Trailer (byte 2, bit 3)". 빈 칸에서는 "PNC 20 (byte 2, bit 4)"처럼 번호와 위치만 나온다.
    • Byte 2~7에 USER DATA, PNC VECTOR 두 표기가 함께 적힌 것은, 이 예제의 NM 사용자 데이터 영역(offset 2, length 6)과 PNC 벡터(offset 2, length 6)가 같은 바이트를 쓰기 때문이다.
  6. NM 노드 표(그림 8-8의 ⑤)를 읽는다.

    열내용
    ECU이 NM 클러스터에 참여하는 ECU. 이름순이다.
    NODE IDNM 노드 ID. NM PDU의 Byte 1(NID)에 들어가는 값이다.
    TX NM PDU이 ECU가 보내는 NM PDU
    RX NM PDUS이 ECU가 받는 NM PDU. 같은 클러스터의 다른 노드가 보내는 NM PDU 전부이다.

    NmCluster_WestCAN의 값은 다음과 같다.

    ECUNODE IDTX NM PDU
    DoorCtrl_FL17WestCAN_NmPdu_DoorCtrl_FL
    MirrorAct_FL19WestCAN_NmPdu_MirrorAct_FL
    SeatCtrl_FL18WestCAN_NmPdu_SeatCtrl_FL
    WestZone16WestCAN_NmPdu_WestZone
    WindowSw_FL20WestCAN_NmPdu_WindowSw_FL

    참고. RX NM PDUS 칸은 뷰어를 넓혀도 끝이 잘린다(…). 전체 값은 칸에 마우스를 올리면 툴팁으로 볼 수 있다.

  7. 다른 NM 클러스터도 같은 방법으로 펼쳐 본다. 다섯 클러스터 모두 Byte 0 = CBV, Byte 1 = NID, Byte 2~7 = PNC 벡터로 같은 배치이다.

    ECU는 NODE ID 순으로 적었다. 화면의 노드 표는 ECU 이름순이다.

    NM 클러스터ECU (NODE ID)
    NmCluster_EastCAN (EastCAN)EastZone(16), DoorCtrl_FR(17), SeatCtrl_FR(18), MirrorAct_FR(19)
    NmCluster_RearCAN (RearCAN)SouthZone(16), ParkSensor_RR(17), TrailerModule(18), TailLamp_RR(19)
    NmCluster_VLAN_Body (Backbone)HPC(0), WestZone(1), EastZone(2), SouthZone(3), HPC(4)
    NmCluster_VLAN_Rear (Backbone)HPC(0), SouthZone(1), WestZone(2), EastZone(3), HPC(4)

    참고. 두 UdpNm 클러스터는 모두 통신 클러스터 Backbone에 속하므로, 노드 표에는 커넥터가 쓰는 VLAN과 상관없이 Backbone에 연결된 커넥터마다 NM 노드가 하나씩 나온다. 다른 VLAN 커넥터의 노드는 TX NM PDU와 RX NM PDUS 칸이 비어 있다. NmCluster_VLAN_Body에서는 SouthZone(3)과 HPC(4), NmCluster_VLAN_Rear에서는 WestZone(2), EastZone(3), HPC(4)이다. HPC는 VLAN마다 커넥터가 하나씩 있어 두 클러스터 모두에 두 번 나온다.

  8. 다 보았으면 다이얼로그 오른쪽 아래의 Close 버튼을 누른다. 보기만 했으므로 저장 여부를 묻지 않고 닫힌다.

필터 마스크와 NM VECTOR의 관계​

필터 마스크 계산에서 커넥터에 입력한 PNC FILTER ARRAY MASKS 값은 NM PDU의 PNC 벡터 부분(Byte 2~7)만 떼어 낸 배열이다. 그래서 마스크 배열의 Byte 0이 NM PDU의 Byte 2이다.

byteIndex = pncId ÷ 8 의 몫 − pncVectorOffset # 마스크 배열에서의 바이트
bit = pncId ÷ 8 의 나머지 # 그 바이트 안의 비트
value = 2 ^ bit
PNCNM PDU 위치(툴팁)마스크 배열 위치값
17 PNC_Comfortbyte 2, bit 1Byte 0, bit 1 (17 ÷ 8 = 2, 2 − 2 = 0)0x02
18 PNC_ParkAssistbyte 2, bit 2Byte 0, bit 20x04
19 PNC_Trailerbyte 2, bit 3Byte 0, bit 30x08
  • PNC 17만 통과시키는 커넥터(예: WestZone_CanFd_Conn)의 마스크는 02 00 00 00 00 00이다. 그림 8-8의 Byte 2에서 칸 17만 켠 값이다.
  • PNC 18과 19를 통과시키는 커넥터(예: SouthZone_CanFd_Conn)는 같은 바이트의 값을 OR로 합쳐 0x04 | 0x08 = 0x0C, 즉 0C 00 00 00 00 00이다.
  • 마스크 배열의 길이는 PNC VECTOR LENGTH(pncVectorLength, 6)와 같아야 한다(constr_3686). 커넥터 속성의 격자 제목 PNC FILTER ARRAY MASKS (6/6) 표시가 이 길이를 보여 준다.

주의. 툴팁의 "byte 2"는 NM PDU 기준 바이트 번호이고, 마스크 격자의 "Byte 0"은 벡터 기준 바이트 번호이다. 두 번호는 PNC VECTOR OFFSET(2)만큼 차이 난다.

왜 이렇게 설계하는가​

  • 세 탭은 같은 설계를 다른 방향에서 본다. PDU GROUPS는 PDU에서 PNC로, MATRIX는 PNC에서 채널로, NM VECTOR는 PNC에서 NM PDU 비트로 본다. 한 탭에서 빠진 것이 다른 탭에서 드러난다.
  • 물리 채널은 사람이 정한다. PNC가 어느 채널에 걸치는지는 그룹이나 PDU에서 자동으로 유도하지 않는다. MATRIX 칸과 PHYSICAL CHANNELS 체크박스는 같은 참조를 바꾸는 두 가지 입구이다.
  • PNC 식별자는 NM PDU의 비트 번호이다. 식별자를 정하면 NM PDU 안의 위치와 필터 마스크 값이 함께 정해진다. NM VECTOR는 이 위치를 눈으로 확인하는 곳이다.

확인하기​

  • PDU GROUPS 탭에서 PNC_Trailer를 선택하면 TailLampCmd_Pdu, TailLampStatus_Pdu, TrailerCmd_Pdu, TrailerStatus_Pdu 4행이 강조되고, PNC MEMBERSHIP 열이 PNC_Trailer이다.
  • 클러스터 필터를 RearCAN으로 고르면 9행이 남는다.
  • MATRIX 탭에서 PNC_Comfort는 EastCAN_Channel, WestCAN_Channel, VLAN_Body에, PNC_ParkAssist와 PNC_Trailer는 RearCAN_Channel, VLAN_Rear에 ✓가 있다.
  • NM VECTOR 탭의 PNC VECTOR OFFSET 값이 2, PNC VECTOR LENGTH 값이 6이다.
  • NmCluster_WestCAN을 펼치면 Byte 2의 17, 18, 19 칸이 채워져 있다.
  • Close 버튼을 눌렀을 때 저장 여부를 묻지 않는다. 다이얼로그 제목에 ● 표시가 없었다.

다음 단계​

AP 머신 — NM 핸들과 FunctionGroup에서 HPC 머신에 NM 핸들과 FunctionGroup을 설정한다.