みなさん、お疲れ様です。最近私が絶賛悩み中のCAN通信に関する記事です。
あー!!!!CAN通信がわからねぇ!!!
何がわからないかわからない!!
でもわかってない感じはわかる!
こういうときはですね。とりあえず動きを見てみるのが一番ではないかと思います。そしたら何がわかってないか、わかるかもしれん。ってことで、本記事はとりあえずCAN通信のシミュレーション環境を用意してみました。という記事です。
色々書いたCAN関連記事は以下です。気になったら読んで頂ければと思います。
0回目:「CAN通信って何?」という人向けにCAN通信の解説をしてみる
1回目:【Vector Virtual CAN BUS & Python-can】CAN通信のシミュレーション環境構築(本記事)
2回目:【python-can】CANを定期的に送信する!!
3回目:【Python-can】受信したら返答するCANプログラム
4回目:【python-can】ISO-TPの勉強!シミュレーションで動作確認するぞ!!
5回目:【python-can】ISO-TPのリクエストとレスポンスをシミュレーションするぞ!
この記事でやっていることは以下の通りです。
VectorのVirtual CAN BUSのインストールと初期動作確認
python-canをインストールしてVirtual CAN BUSに接続
pythonでとりあえず信号を送ってみて、モニターしてみる
参考資料
↓こちらの記事がとても参考になります。

やりたいことの確認
やりたいことは以下です。
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を勉強してみようと思う方がささっと環境構築出来て、勉強に進めれば幸いです。
以上です。最後までお読みいただきありがとうございました!