みなさん、お疲れ様です。最近私が絶賛悩み中のCAN通信に関する記事です。
こういうときはですね。とりあえず動きを見てみるのが一番ではないかと思います。そしたら何がわかってないか、わかるかもしれん。ってことで、本記事はとりあえずCAN通信のシミュレーション環境を用意してみました。という記事です。
色々書いたCAN関連記事は以下です。気になったら読んで頂ければと思います。
この記事でやっていることは以下の通りです。
参考資料
↓こちらの記事がとても参考になります。
やりたいことの確認
やりたいことは以下です。
Vector Virtual CAN BUSという仮想CAN BUSにPython(python-canライブラリを使って)でCANを送信してみる!
Virtual CAN BUSとはVectorが無償提供している仮想のCAN BUSです。python-canはpythonでCAN通信を簡単にやってくれるライブラリです。python-canのドキュメントは以下にあります。
このドキュメントの”Installation”に移動してVectorの項目を読むと
Vector
To install
python-can
using the XL Driver Library as the backend:1.Install the latest drivers for your Vector hardware interface.
2.Install the XL Driver Library or copy the
vxlapi.dll
and/orvxlapi64.dll
into your working directory.3.Use Vector Hardware Configuration to assign a channel to your application.
https://python-can.readthedocs.io/en/master/installation.htmlのVectorの項目より引用
1.最新のドライバをインストールしろ!2.XL Driver Libraryをインストールしろ!3.Vector Hardware Configurationを使ってお前のアプリ(python-can)をアサインしろ!!
と書いてあるので、それを順番にやっていきます。
ひとまずpython-canをインストールしておく
以下のコマンドでインストールです。
$ pip install python-can
succesfullyって出たらOKです。念のため確認したい人は$pip listで見たらpython-canと表示されるのでそれで確認できます。次。
最新のドライバをインストールする
latest drivers←こちらへ飛びます。
私のOSがwindows10なので下の方をクリックします↓。
1.43GBです。あけておきましょう。Download nowをクリックします↓。
ダウンロードファイルを解凍して”setup”を実行します↓。
すると「どのドライバをインストールする?」と聞かれます。Vector製品なぞ触ったことない人間からしたら「そんなこと言われても。。。」状態です。適当にVN1610を選んどきます。んで、”install”をクリックします↓。
あー完了しました↓。
次。
XL Driver Libraryをインストールする
XL Driver Library← こちらへ飛びます。
↓XL Driver Libraryをクリックします。
↓同じように解凍してSetupを実行します。
特に何も考えずにnextを押していたらインストールが終わりました↓。
はい、次。
Vector Hardware Configurationを使ってpython-canをアサインする
XL driver libraryをインストールしたら”Vector Hardware Configurator”というものが一緒にインストールされてます↓。これを起動します。
Application->addをクリックします↓。
Application nameに”python-can”と入力してOKをクリックします↓。
そしたら左の欄のApplicationにpython-canが加わります。CAN1とCAN2のところで右クリックして、Virtual CAN BUSのChannel1とChannel2を選択します↓。
こんな感じになりました↓。
これで準備完了です。次。
モニター用にBUSMasterをインストール
CAN BUSをモニターするためにBUSMasterというソフトをインストールします。
ここ↓からインストールします。大して詰まらないので、説明は割愛します。
Virtual CAN BUSにつなぐ方法は
起動後にDriver Selection->Vector XLを選択->モニターしたいchannelを選択してConnectをクリックします。
はい、次。
pythonで動かしてみる
channel1にメッセージを送信して、Busmasterでモニターしてみます。
pythonのコードは以下の通りです↓。
>>> import can
>>> bus = can.interface.Bus(bustype='vector', channel=0, bitrate=500000, app_name='python-can')
>>> msg = can.Message(arbitration_id = 0xa1, data = [1,2,3,4,5,6,7,8])
>>> bus.send(msg)
コードの意味を書いておくと、、、
・python-canをインポートして
・Busを「vectorのchannel0でbitrateをapp_nameをpython-canです。」と初期化をして
・送信内容「1,2,3,4,5,6,7,8」をmsgに定義して
・送る。
って意味です。
上記のコードをBUSmasterをconnectした状態で実行します。
BUSmasterでの受信値は以下の通りです↓。
ちゃんと送信IDとmessageが受信できています。
ん?channelが0指定したのに1になってる。違くない?と思いましたが、python上でchannel0はVector hardware config上のchannel1のようです。
んーまぁとりあえず送信できたので、良しとします。
終わりに
お試しに信号を送信してみるだけで一苦労でした。この記事でCANを勉強してみようと思う方がささっと環境構築出来て、勉強に進めれば幸いです。
以上です。最後までお読みいただきありがとうございました!