バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はPython-CANの受信側の概要の話。
基本的には送信側と一緒。
受信部分はスレッドを分けるパターンもあるが、負荷が読みやすいポーリング方式に。
あとは、CAN受信をFMUへの入力源に採用するかどうかのチェックボックスを追加してみるのみ。
登場人物
博識フクロウのフクさん

イラスト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
tkinterのチェックボックス追加

まずはtkinterのチェックボックス追加だねー。

これは以前やったから、省略でもいいかな。

確かここでやったね。

まぁたぶんこんな感じのコードを追加すればOKかな?
self.canrcvbln = tkinter.BooleanVar()
self.canrcvbln.set(False)
chk = tkinter.Checkbutton(self.root, variable=self.canrcvbln, text="can rcv")
chk.place(x=0, y=110)

うん。OKだ。
チェックボックス判定追加

これに伴ってCAN受信のところもチェックボックス判定が必要になるのかな?

そうなるね。

といことは、
前回のコードに対してif文を一個追加すればOKか。
if self.canrcvbln.get():
recv_msg = self.bus.recv(timeout=0.0)
if recv_msg != None:
if recv_msg.arbitration_id == 0x111:
data = recv_msg.data[0]*0x10000 + recv_msg.data[1]*0x100 + recv_msg.data[2]
self.y_can_tmp = data/255.0

思った以上にチョロかった。

あとは、これを適切な箇所に組み込む必要があるな。

バス初期化とか、チェックボックスの生成は
def __init__(self):
に追加でOKだと思うけど、
CAN受信はどこに追加しようか?

sin波、のこぎり波の生成をFMU処理のタイマハンドラのところで実施しているから
そこに差し込むか。

そうだねー。
CANも入力源の一種とすると、そこに合わせる方が良いような気がする。

というわけで次回までにコードを修正してくるよ。

よろしくー。
まとめ

まとめだよ。
- GUI(tkinter)にチェックボックス追加。
- 「can rcv」というチェックボックス。
- チェック時に受信有効になる想定。
- CAN受信にチェックボックス判定追加。
- if文を追加したのみ。
- バス初期化、チェックボックス生成は__init__メソッドに追加予定。
- CAN受信はFMU処理のタイマハンドラ内に追加予定。
バックナンバーはこちら。
コメント