バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回まででPython-CANのインストール、import、バス初期化、送信の復習をしたところ。
必要な情報は思い出したので、
今回は実際の指令値をCANで送信するコードを見る。
登場人物
博識フクロウのフクさん
イラスト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で指令値送信のコードを書いてきた。
import sys
import can
import time
def cansend( cycle = 0.1, loop = False ):
# バス接続
bus = can.interface.Bus(bustype='vector', channel='1', bitrate=500000)
sndparam = [
0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,
100,100,
100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0,
0,0,0,0,0,0,0,0,0,0,
80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
]
while True:
for p in sndparam:
send_msg = can.Message(arbitration_id=0x111, extended_id=0, data=[0x00, p, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
print('Send msg : %s' % send_msg)
# 送信
bus.send( send_msg )
time.sleep(cycle)
if loop==False:
break;
if __name__ == '__main__':
cycle = 0.1
loop = False
args = sys.argv
if len(args)>1:
cycle = float(args[1])
if len(args)>2:
if int(args[2]) != 0:
loop = True
cansend(cycle=cycle, loop=loop)
コード解説
sndparamが指令値用のデータで、
真ん中あたりのwhileで順次送信してるってのは分かるけど、
if __name__ == ‘__main__’:
あたりでごちゃごちゃやってるのは何?
(ごちゃごちゃって・・・。)
そこはコマンドライン引数を取れるようにしただけだね。
特に指定しなくても動くんだけど、
送信周期と指令値送信を繰り返し実施したい場合を想定して追加しておいた。
察するに第1引数が周期で、第2引数が繰り返しかどうかってことろかな?
例えば、周期を200ms、繰り返しモードにしたいときは以下で実行する感じか。
python cansend.py 0.2 1
そうそう。
正解だ。
あとは実際に動かしてみるってことかな。
あれ?
受け側が居ないけど動作確認ってできるの?
BusMasterを使用すれば送ってるかどうかは見れるね。
実際のCANだと相手がいないとACKエラーになって正常なフレームを送信できないんだけど、
Virtual CAN Busの場合は特にそこは見ていないようなので、
動作確認としては問題無い。
BusMaster
以前、BusMasterの話をしたときの記事
ようわからんがBusMasterで見てわかるならOKか。
まとめ
まとめだよ。
- Python-CANで指令値送信のコードを提示。
- CAN関連の前回までの復習の話のまんま。
- 利便性を上げるためにコマンドライン引数を取り込む機能追加。
- 送信周期変更と繰り返し処理切替を追加。
- 動作確認はBusMasterでモニタすることで実施予定。
- 実際のCANだと対抗機が必要だがVirtual CAN Busでは不要。
バックナンバーはこちら。
コメント