ncReadNet.vi에 Extended Arbitration ID가있는 OR 게이트 0x20000000이 필요한 이유

업데이트 됨 Apr 1, 2020

해당 제품

Driver

  • NI-CAN

문의사항

NI-CAN에서 CAN 확장 ID (29 비트) 프레임을 전송하려면 왜 ncWriteNet.vi에 아래와 같이 0x20000000와의 OR 논리연산이 필요합니까?
Transmit Receive same port.vi 라는 예제를 참조하십시오.
 

해결책

0x20000000는 이진수 0010에 연결된 28 개의 0으로 구성되며 29 비트로 구성된 Extended Arbitration ID에 적용 됩니다. 30 번째 비트는 Arbitration 사양이 표준 형식 (11 비트)과 반대로 확장 형식 (29 비트)을 갖도록 NI-CAN 드라이버에 알려주기 때문에 관련이 있습니다. 또한, 어떤 식으로든 Extended Arbitration 표준과 표준 Arbitration ID를 구별하는 것이 합리적입니다. 그렇지 않으면 드라이버는 16 진수 1과 같은 ID가 표준 형식인지 확정 형식인지 알지 못합니다. 즉, 1은 11비트 또는 29 비트 모두에 해당 될 수 있기 때문에 드라이버는 CAN 버스에 기록되는 실제 프레임에 포함 할 비트 수를 알아야합니다. 이론적으로 2 ^ 11 이상의 Arbitration 값에는 이 차이가 필요하지 않습니다. 이러한 값은 11 비트로 표시 할 수 없기 때문입니다.

일관성을 위해, 확장 (29 비트) Arbitration ID를 지정할 때 30 번째 비트를 1로 설정하게 되면 표준 프레임과 확장 프레임 중에서 확장 프레임을 선택하게 됩니다. 이런 이유로 위의 예제에서 0x20000000를 논리연산 OR를 수행 하는 것입니다. 이 관련하여서는 NI-CAN Hardware and Software Manual  11-70 페이지에 설명되어 있습니다.

Extended Arbitration ID를 처리하는 CAN 전송 및 수신 VI도 아래 링크되어 있습니다. 예제 탐색기의 Transmit Receive Same Port.vi도이 작업을 수행 할 수 있습니다.