【上流検証】最小構成のモデルベース開発事例 その40【Bypass⑥】

【上流検証】最小構成のモデルベース開発事例 その40【Bypass⑥】 事例

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

はじめに

今回はASAM XCPのDTOパケットのDAQ,STIMについての話。

DAQ、STIMは事前にとある情報をツール、ECUの間で共有する。
DAQは送出タイミングの話。
STIMで受けたあとの実際に更新されるタイミングの話。

などなど。

登場人物

博識フクロウのフクさん

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

DTOの目的

太郎くん
太郎くん

で、今回は実際のDAQの話だっけ。

フクさん
フクさん

そうそう。
ちなみにDAQはCTOパケットじゃなくてDTOパケットになるんで。

太郎くん
太郎くん

あ、そういえば前回のCMDはCTOパケットだっけ?
DTOパケットってバリエーションが多いやつだったよね?

フクさん
フクさん

うん。
DTOの目的から見てもバリエーションが多い理由が分かると思うよ。

太郎くん
太郎くん

その目的は何になるの?

フクさん
フクさん

一気にデータを読み出したり書き込んだりする。
物理層のフレームサイズがそのままスループットになるので、フレーム構成上の非データ領域の割合が多いとスループットが落ちることになる。
ちなみに、
読み出し側がDAQと呼ばれ、書き込み側STIMと呼ばれる。

太郎くん
太郎くん


一気に読みだすのはUPLOADじゃなかったっけ?

フクさん
フクさん

メモリダンプと言う意味ではUPLOADで良いが、
DAQは連続になっていない領域のデータをまとめて取得できる。

太郎くん
太郎くん

DAQの送信イメージ

フクさん
フクさん

絵で描いた方が良いね。

DAQリスト、ODT、ODTentry、アドレス、サイズ、メモリ空間、1フレーム(ODT)分の送信、設定されたODT数文のフレーム送信で1つのDAQリスト送信が完了する。
太郎くん
太郎くん

あ、わかった!
アドレス、サイズ情報、順番をECUに渡しているから

モニタ用情報を事前共有しているイメージだね?
だから、純粋なデータ列だけでやり取りしても、それが何かが分かった状態になる。

フクさん
フクさん

そのとおり。
CMDの場合はアドレスとサイズの情報を毎回通知するのに対し、
DAQ、STIMの場合は事前設定して、計測の際のはデータだけになる。

太郎くん
太郎くん

ということは、シンプル&効率的!

フクさん
フクさん

いいね。今日は冴えてるじゃん。

太郎くん
太郎くん

で、送信のタイミングは何で決まるの?

フクさん
フクさん

ECU内部のイベントで決まる。

太郎くん
太郎くん

具体的には?

フクさん
フクさん

周期的なタイマー割り込みだったりすることが多い。
\(10[ms]\)周期、\(100[ms]\)周期。
所謂、制御周期だね。
制御周期で各種データが更新した直後にDAQで送信すれば、常に最新値且つ更新漏れなく計測できる。

太郎くん
太郎くん

おー、なるほど。そういう理屈か。
周期以外もあったりするの?

フクさん
フクさん

あとはエンジン制御とかだと、

TDC(Top Dead Center:上死点)タイミングもイベントの候補になるかな。
こっちは時間で見ると周期的では無い。
本来のDAQの目的はこっちかもね。

太郎くん
太郎くん

なるほど。
周期的じゃないけど最小且つ最新を実現できるんだね。

STIMの受信イメージ

太郎くん
太郎くん

で、STIMはDAQの逆向きなんだっけ?

フクさん
フクさん

うん。
こっちはイメージ湧いてる?

太郎くん
太郎くん

おおよそ分かるんだけど、
DAQの時のイベントってECU側で決められているものだったけど、
STIMだとそこらへんはどうなるのかなって疑問はあるね。

フクさん
フクさん

そうだね。
ツールから送る際はイベントに同期していることが望ましいが、
TDCタイミングだといつ送るべきかは全く予想ができないことになるもんね。

太郎くん
太郎くん

で、答えは?

フクさん
フクさん

答えはシンプルで、「気にしない」になる。

太郎くん
太郎くん

え?それでいいの?
DAQの時は割とイベントと同期していることがものすごく価値を感じたんだけど。

フクさん
フクさん

送る側は気にしないけど、実際に値が更新されるタイミングはイベントに同期することになる。
もうちょっと具体的に言うと、そのデータを利用する制御が走る前に一括更新されるイメージ。
Bypassの話をするときに見せた絵をもう一回だすよ。
今だと、ちょっと違った見え方になるんじゃないかな。

Simulink、DAQ、STIM、ECU、制御対象、現行の制御仕様に合わせてSimulinkモデルの作成
太郎くん
太郎くん

あ、STIMは特定の関数の処理をする前に更新するようにしてるのか!

フクさん
フクさん

Yes。
更新されるまでは前回値を維持するって振る舞いになるね。

XCPの仕様

太郎くん
太郎くん

XCPの振る舞いもわかったけど、Bypassのイメージも湧いてきた。
というか、Bypassを実現するための仕様がXCPって感じかな?

フクさん
フクさん

うーん、
Bypassの実現はXCPの一部と思った方が良いね。
今回は説明はしないけど、オンラインキャリブレーションなんかもXCPの代表的な仕様だね。
まぁどちらも開発、検証を効率化するための先人に知恵みたいな感じ。

太郎くん
太郎くん

それを標準仕様として公開しているのか。
ASAMに加盟しておいた方が良いのかな。
でも、うちの会社だと「良く分からん」で一蹴されそう。

フクさん
フクさん

会社組織自体は営利団体なんで、その仕様をどう利用していこうと考えているか、それがどう利益に繋がるかをアピールすれば良いんじゃないかな。
実際こういった案件も来ているわけだし、危機感を煽るってもありかもね。

太郎くん
太郎くん

そこはちょっと作戦を練ってみるよ。

まとめ

フクさん
フクさん

まとめだよ。

  • DAQ、STIMは事前にアドレス、サイズの情報をツール、ECUの間で共有する。
  • DAQはECU内の制御周期直後のタイミングで送出されるため常に更新後の最新値を効率的に得られる。
  • STIMの送出自体はイベントと同期している必要はないが、実際に更新されるのは制御周期の直前。

バックナンバーはこちら

コメント

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