バックナンバーはこちら
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の送信イメージ

絵で描いた方が良いね。


あ、わかった!
アドレス、サイズ情報、順番をECUに渡しているから
モニタ用情報を事前共有しているイメージだね?
だから、純粋なデータ列だけでやり取りしても、それが何かが分かった状態になる。

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

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

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

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

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

具体的には?

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

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

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

なるほど。
周期的じゃないけど最小且つ最新を実現できるんだね。
STIMの受信イメージ

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

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

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

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

で、答えは?

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

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

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


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

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

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

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

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

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

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

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