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

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

バックナンバーはこちら。
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処理のタイマハンドラ内に追加予定。

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

コメント

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