【XCP】最小構成のMBD事例 第2章 その220【仮想HILS③】

【XCP】最小構成のMBD事例 第2章 その220【仮想HILS③】事例
【XCP】最小構成のMBD事例 第2章 その220【仮想HILS③】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

スポンサーリンク

はじめに

前回まででPyFMIのDummyFMU関連の辻褄合わせを実施。
細かいことは抜けているかもしれないがおおよそFMU周りはOKだろう。

となると、今度はPID制御器を組み込んだ仮想ECUとのやり取りの部分に入る。
(つまりXCP関連)

スポンサーリンク

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

スポンサーリンク

XCP関連セットアップ処理追加

フクさん
フクさん

次はXCP関連の話になる。

太郎くん
太郎くん

以前、xcp_canってクラスを作ってるから
それを呼び出せば良いってイメージでいるのだけど、それでOK?

フクさん
フクさん

OKだ。

フクさん
フクさん

追加するコードもシンプルで以下になる。

# XCP関連セットアップ
self.xcp = xcp_can.xcp_can()
self.xcp.setup()
self.xcp.start_daq()
太郎くん
太郎くん

ほう。
start_daq()を呼び出しているってことは、ここでDAQ起動までしちゃうのね。
XCP関連の処理が隠蔽されてるから利用する側は相当楽ちんってことか。

フクさん
フクさん

仮想HILS側でXCP絡みをごちゃごちゃやりたくないからね。

スポンサーリンク

XCP DAQ受信部追加

フクさん
フクさん

次はDAQ受信部だね。
FMU_handler内のFMU処理部直前で呼び出すことを想定している。
コードとしてはこれもシンプル。

# XCP DAQ受信
daq = self.xcp.recv_daq()
if len(daq) > 0:
	self._voltage = float(int.from_bytes(daq['0'][0][5:7], byteorder='little', signed=True))/0x100
太郎くん
太郎くん

do_pidで使用していたself._voltageがここで登場するのか。

太郎くん
太郎くん

ところで、int.from_bytesって何?

フクさん
フクさん

DAQの結果がbytearrayで取得されるんで、複数バイトをまとめて整数型にしてる。
最終的にはfloatにするけど。

太郎くん
太郎くん

なるほど。
bytearrayからの変換か。
一撃で変換してくれるのはありがたいね。

スポンサーリンク

XCP STIM送信部追加

フクさん
フクさん

そしてXCP関連の最後のSTIM送信
これもFMU_handler内で呼び出す想定だが、
こちらはFMU_handler内のFMU処理部直後に呼び出す。

# XCP STIM送信
self.xcp.stim(int(self.deque_target[-1])*0x100, int(self.deque_speed[-1])*0x100)
太郎くん
太郎くん

一行で終わるのか!

フクさん
フクさん

うん。
ちなみにDAQ受信でもあったけど、
物理値の単位はどれも1/256にしてある。
変数としては2byte(16bit)長で、上位byteが整数部、下位byte小数部
ってイメージ。

太郎くん
太郎くん

1/256とか意味不明な単位だと思ったけど、
byteで考えるとちょうど良い単位なのか。

フクさん
フクさん

というわけで仮想HILSが作れるはずなので、

次回までにとりあえず動くところまでやっておこう。

スポンサーリンク

まとめ

フクさん
フクさん

まとめだよ。

  • XCP関連の処理を追加。
    • 基本xcp_canクラスを呼び出すだけ。
  • DAQ受信とSTIM送信はFMU処理が実装してあるFMU_handler内で呼び出す。
    • DAQ受信はFMU処理直前。
    • STIM送信はFMU処理直後。
    • これにより、仮想ECU側の変数と仮想HILS側のシグナルの同期が取れる。

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

コメント

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