NI-CAN을 사용하여 CAN 프레임에서 확장 ID를 사용하는 방법

업데이트 됨 Nov 28, 2022

환경

하드웨어

  • USB-8473

소프트웨어

  • LabVIEW

드라이버

  • NI-CAN

USB-CAN 장치에 쓸 때 29 비트 확장 Arbitration ID가 왜 올바르지 않습니까? 이것은 버스 모니터를 사용하여 Arbitration ID를 확인하는 경우에도 발생합니다.

Extended Arbitration ID를 읽기/쓰기 작업 이전에 변환 해주어야 합니다. ncWriteNet.vi 또는 ncWriteNetMult.vi를 이용하여 쓰기 작업 전에, Extended Arbitration ID는 16 진수 0x20000000와 OR 논리연산을 해야 합니다. ncReadNet.vi 또는 ncReadNetMult.vi를 이용하여 읽기 작업을 수행하 경우, Extended Arbitration ID는 동일한 16 진수 0x20000000로 xor 논리연산 되어야 합니다. 이런 과정을 통해서 올바른 Arbitration ID가 생성됩니다.

그 이유는 30 번째 비트가 Extended Arbitration 또는 표준 Arbitration ID를 식별하는 데 사용되기 때문입니다. Arbitration ID는 32 비트로 표시됩니다. 30 번째 비트가 High(1)이면 Extended Arbitration ID가 사용됩니다. 이경우 29 비트를 사용하여 Arbitration ID를 나타냅니다. 30 번째 비트가 Low(0) 표준 Arbitration ID가 사용됩니다. 이대는 Arbitration ID를 나타내는 데 11 비트만을 사용합니다.

참고 : 대부분의 제공되는 예제는 Extended Arbitration ID를 지원하기 위해 이 논리 연산을 반영 하지 않습니다. 이것을 포함하는 예제는 " Transmit Receive same Port.vi "입니다. NI 예제 탐색기에서 이 NI-CAN 예제를 찾을 수 있습니다.
예제의 전면 패널은 아래 그림 1 과 같이 표시되며 확장 ID 사용 여부를 수동으로 설정할 수 있습니다.

그림 1