Q: CanIdMaskとCanIdCodeの設定例

A:

CanSetChannelAcceptance関数の引数CanIdMaskとCanIdCodeを組み合わせることで、複数のCAN IDを受信対象にすることができます。

ドライバソフト内部の判定処理は以下の通りです。
受信したCAN IDとCanIdMaskとANDビット演算を行います。別途、CanIdMaskとCanIdCodeでANDビット演算を行います。
各々のANDビット演算結果が等しいCAN IDメッセージを受信バッファに格納します。

ANDビット演算を利用した受容設定は、判定するPC処理時間が短く、汎用的に利用される技術です。
しかしながら、ご希望の受容設定にあうCanIdMaskとCanIdCodeとを決定するには、少し経験が必要となります。

以下に、標準フォーマット(11bit)の設定例を示します。
これらの設定例を参考にし、適切なCanIdMaskとCanIdCodeの値を決定してください。

拡張フォーマットの場合は 29bitで同様の処理となります。

接頭文字 "0x”が付いた数字は16進数です。
()内は2進数です。10進数ではありません。

 

例1)標準フォーマットの全CAN IDのメッセージを受信バッファに格納する場合は、CanIdMask = 0x0とします。
CanIDMask = 0x0の場合、CanIdCodeはいくつでも動作は同じですが、下表ではCanIdCode = 0x0(初期値)としています。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x000 ( 000 0000 0000)

0x001 ( 000 0000 0001)

0x123 ( 001 0010 0011)

0x1FF ( 001 1111 1111)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

(CAN ID) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

コード指定(CanIdCode)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

(CanIdCode) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

AND演算結果の比較判定

一致

一致

一致

一致

一致

受信バッファへの格納

格納する

格納する

格納する

格納する

格納する

 

例2)標準フォーマットの0x123のCAN IDメッセージのみを受信バッファに格納する場合は、CanIdMask = 0x7FF、CanIdCode = 0x123とします。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x000 ( 000 0000 0000)

0x001 ( 000 0000 0001)

0x123 ( 001 0010 0011)

0x1FF ( 001 1111 1111)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x7FF ( 111 1111 1111)

0x7FF ( 111 1111 1111)

0x7FF ( 111 1111 1111)

0x7FF ( 111 1111 1111)

0x7FF ( 111 1111 1111)

(CAN ID) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x001 ( 000 0000 0001)

0x123 ( 001 0010 0011)

0x1FF ( 001 1111 1111)

0x7FF ( 111 1111 1111)

コード指定(CanIdCode)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

(CanIdMask) AND (CanIdCode) した結果

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

0x123 ( 001 0010 0011)

AND演算結果の比較判定

不一致

不一致

一致

不一致

不一致

受信バッファへの格納

格納しない

格納しない

格納する

格納しない

格納しない

 

例3)標準フォーマットの0x200~0x2FFまでのCAN IDメッセージを受信バッファに格納する場合は、CanIdMask = 0x700、CanIdCode = 0x200とします。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x000 ( 000 0000 0000)

0x001 ( 000 0000 0001)

0x200 ( 010 0000 0000)

0x2FF ( 010 1111 1111)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x700 ( 111 0000 0000)

0x700 ( 111 0000 0000)

0x700 ( 111 0000 0000)

0x700 ( 111 0000 0000)

0x700 ( 111 0000 0000)

(CAN ID) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x000 ( 000 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x700 ( 111 0000 0000)

コード指定(CanIdCode)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

(CanIdMask) AND (CanIdCode) した結果

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

AND演算結果の比較判定

不一致

不一致

一致

一致

不一致

受信バッファへの格納

格納しない

格納しない

格納する

格納する

格納しない

 

例4)標準フォーマットの0x200~0x23FまでのCAN IDメッセージを受信バッファに格納する場合は、CanIdMask = 0x7C0、CanIdCode = 0x200とします。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x000 ( 000 0000 0000)

0x200 ( 010 0000 0000)

0x23F ( 010 0011 1111)

0x240 ( 010 0100 0000)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x7C0 ( 111 1100 0000)

0x7C0 ( 111 1100 0000)

0x7C0 ( 111 1100 0000)

0x7C0 ( 111 1100 0000)

0x7C0 ( 111 1100 0000)

(CAN ID) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x240 ( 010 0100 0000)

0x7C0 ( 111 1100 0000)

コード指定(CanIdCode)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

(CanIdMask) AND (CanIdCode) した結果

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

AND演算結果の比較判定

不一致

一致

一致

不一致

不一致

受信バッファへの格納

格納しない

格納する

格納する

格納しない

格納しない

 

例5)標準フォーマットの0x280~0x2FFまでのCAN IDメッセージを受信バッファに格納する場合は、CanIdMask = 0x780、CanIdCode = 0x280とします。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x27F ( 010 0111 1111)

0x280 ( 010 1000 0000)

0x2FF ( 010 1111 1111)

0x300 ( 011 0000 0000)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x780 ( 111 1000 0000)

0x780 ( 111 1000 0000)

0x780 ( 111 1000 0000)

0x780 ( 111 1000 0000)

0x780 ( 111 1000 0000)

(CAN ID) AND (CanIdMask)した結果

0x200 ( 010 0000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x300 ( 011 0000 0000)

0x780 ( 111 1000 0000)

コード指定(CanIdCode)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

(CanIdMask) AND (CanIdCode) した結果

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

0x280 ( 010 1000 0000)

AND演算結果の比較判定

不一致

一致

一致

不一致

不一致

受信バッファへの格納

格納しない

格納する

格納する

格納しない

格納しない

 

例6)標準フォーマットの0x200~0x3FFまでのCAN IDメッセージを受信バッファに格納する場合は、CanIdMask = 0x600、CanIdCode = 0x200とします。

定義

パターン1

パターン2

パターン3

パターン4

パターン5

CAN ID

0x1FF ( 001 1111 1111)

0x200 ( 010 0000 0000)

0x3FF ( 011 1111 1111)

0x600 ( 110 0000 0000)

0x7FF ( 111 1111 1111)

マスク指定(CanIdMask)

0x600 ( 110 0000 0000)

0x600 ( 110 0000 0000)

0x600 ( 110 0000 0000)

0x600 ( 110 0000 0000)

0x600 ( 110 0000 0000)

(CAN ID) AND (CanIdMask)した結果

0x000 ( 000 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x600 ( 110 0000 0000)

0x600 ( 110 0000 0000)

コード指定(CanIdCode)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

(CanIdMask) AND (CanIdCode) した結果

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

0x200 ( 010 0000 0000)

AND演算結果の比較判定

不一致

一致

一致

不一致

不一致

受信バッファへの格納

格納しない

格納する

格納する

格納しない

格納しない