NI-CANを使用してCANフレームで拡張IDを使用する方法

更新しました Nov 28, 2020

環境

ハードウェア

  • USB-8473

ソフトウェア

  • LabVIEW

ドライバ

  • NI-CAN

USB-CANデバイスへの書き込み時に29ビットの拡張アービトレーションIDが正しくないのはなぜですか?バスモニタを使用してアービトレーションIDを確認しても、この問題が発生していることを確認しました。

書き込みおよび読み取りを行う前に、拡張アービトレーションIDに対して変換を実行する必要があります。ncWriteNet.viまたはncWriteNetMult.viを使用してアービトレーションIDを書き込む前に、拡張アービトレーションIDと16進表現0x20000000との論理和(OR)を計算する必要があります。IDがncReadNet.viまたはncReadNetMult.viで読み取られている場合、拡張アービトレーションIDは同じ16進数0x20000000と排他的論理和(XOR)されなければなりません。これにより正しいアービトレーションIDが生成されます。
 

これは、30番目のビットが拡張または標準のアービトレーションIDを識別するために使用されるためです。アービトレーションIDは32ビットで表されますが、30番目のビットがHighの場合、拡張アービトレーションIDが使用されます。この場合、29ビットがアービトレーションIDとして割り当てられます。30番目のビットがLowの場合、標準アービトレーションIDが使用されます。この場合、11ビットがアービトレーションIDとして割り当てられます。
 

メモ: ドライバに付属するほとんどのサンプルプログラムは、標準アービトレーションIDを使用するように作成されています。拡張アービトレーションIDを使用しているサンプルプログラムは、「Transmit Receive same Port.vi」です。NIサンプルファインダからこのサンプルプログラムを参照可能です。


このサンプルプログラムのフロントパネルは、下図のように作成されており、拡張アービトレーションIDを使用するかどうかを手動で設定できます。