【PyFMI】最小構成のMBD事例 第2章 その140【CAN連携④】

【PyFMI】最小構成のMBD事例 第2章 その140【CAN連携④】 事例
【PyFMI】最小構成のMBD事例 第2章 その140【CAN連携④】

バックナンバーはこちら。
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拡張フレームの指定ができる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました