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演算結果の比較判定 |
不一致 |
一致 |
一致 |
不一致 |
不一致 |
受信バッファへの格納 |
格納しない |
格納する |
格納する |
格納しない |
格納しない |