バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はCAN経由で渡した情報やPython-CANのインストール、importの話。
今回はバス初期化、送信の仕方の復習になる。
一応、同じ話は過去記事でも扱ってはいる。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
Python-CANのバス初期化

次はPython-CANのバス初期化でなんだが、
使うデバイスによって指定するbustypeパラメータが異なる。
詳細は過去記事を見てもらうとして、
今回はVectorデバイスを前提としたバス初期化を出しておこう。
bus = can.interface.Bus(bustype='vector', channel='1', bitrate=500000)
過去記事

bitrate=500000
は500Kbpsで通信するよ。
って意味合いだよね。

今回はVirtual CAN Busなのでどんなボーレートを設定してもOKだが、
まぁ500Kbpsなことが多いからとりあえずそれにしてるだけだね。

戻り値のbusは何に使うんだっけ?

この後説明する送信の時だね。
当然、受信の時も使用する。
今回は使用しないが、複数のCAN回線を制御する場合は、
回線別にバス初期化が必要で、戻り値のbusを元にそれぞれの回線での送受信を実施することになる。

と言うことはしっかり記憶させておく必要のある重要なパラメータってことか。
送信方法

送信方法もシンプル。
以下のようなコードになる。
send_msg = can.Message(arbitration_id=0x111, extended_id=0, data=[0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88])
# 送信
bus.send( send_msg )

これは記憶に残ってるぞ。

arbitration_idってのが所謂CANIDで、今回の場合だと0x111。
extended_idは標準フレームか拡張フレームかを切り替えるもので
0だと標準フレーム、1だと拡張フレームになる。
尚、標準フレーム時のCANIDは11bit長で
拡張フレーム時のCANIDは29bit長になる。

そして、さっきのbusのメソッドであるsendにMessageを渡すことで送信になる。

おー!
バッチリだ!!

(まぁ散々やらされたからねぇ。)

とりあえず、必要な情報は復習したと思うので次回は実際に指令値を送るコードを書き出してみよう。
まとめ

まとめだよ。
- Python-CAN関連は基本的には過去記事参照でOK。
- バス初期化時に使用するデバイスやボーレートを設定。
- 回線が複数ある場合は、回線毎にバス初期化をする。
- そして戻り値のbusをもって通信先を識別する。
- CANのメッセージはcan.Messageで作成。
- CANID、標準or拡張フレームの指定ができる。
バックナンバーはこちら。
コメント