バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
今回はASAM XCPのDTOパケットのDAQ,STIMについての話。
DAQ、STIMは事前にとある情報をツール、ECUの間で共有する。
DAQは送出タイミングの話。
STIMで受けたあとの実際に更新されるタイミングの話。
などなど。
登場人物
博識フクロウのフクさん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
DTOの目的
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
で、今回は実際のDAQの話だっけ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう。
ちなみにDAQはCTOパケットじゃなくてDTOパケットになるんで。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あ、そういえば前回のCMDはCTOパケットだっけ?
DTOパケットってバリエーションが多いやつだったよね?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
うん。
DTOの目的から見てもバリエーションが多い理由が分かると思うよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
その目的は何になるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
一気にデータを読み出したり書き込んだりする。
物理層のフレームサイズがそのままスループットになるので、フレーム構成上の非データ領域の割合が多いとスループットが落ちることになる。
ちなみに、
読み出し側がDAQと呼ばれ、書き込み側STIMと呼ばれる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
?
一気に読みだすのはUPLOADじゃなかったっけ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
メモリダンプと言う意味ではUPLOADで良いが、
DAQは連続になっていない領域のデータをまとめて取得できる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
?
DAQの送信イメージ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
絵で描いた方が良いね。
![DAQリスト、ODT、ODTentry、アドレス、サイズ、メモリ空間、1フレーム(ODT)分の送信、設定されたODT数文のフレーム送信で1つのDAQリスト送信が完了する。](https://www.simulationroom999.com/blog/wp-content/uploads/2020/06/02_DAQの送信イメージ-1024x404.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、わかった!
アドレス、サイズ情報、順番をECUに渡しているから
モニタ用情報を事前共有しているイメージだね?
だから、純粋なデータ列だけでやり取りしても、それが何かが分かった状態になる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そのとおり。
CMDの場合はアドレスとサイズの情報を毎回通知するのに対し、
DAQ、STIMの場合は事前設定して、計測の際のはデータだけになる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
ということは、シンプル&効率的!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
いいね。今日は冴えてるじゃん。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、送信のタイミングは何で決まるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
ECU内部のイベントで決まる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
具体的には?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
周期的なタイマー割り込みだったりすることが多い。
\(10[ms]\)周期、\(100[ms]\)周期。
所謂、制御周期だね。
制御周期で各種データが更新した直後にDAQで送信すれば、常に最新値且つ更新漏れなく計測できる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
おー、なるほど。そういう理屈か。
周期以外もあったりするの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
あとはエンジン制御とかだと、
TDC(Top Dead Center:上死点)タイミングもイベントの候補になるかな。
こっちは時間で見ると周期的では無い。
本来のDAQの目的はこっちかもね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
なるほど。
周期的じゃないけど最小且つ最新を実現できるんだね。
STIMの受信イメージ
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、STIMはDAQの逆向きなんだっけ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/はてなフクロウ.png)
うん。
こっちはイメージ湧いてる?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
おおよそ分かるんだけど、
DAQの時のイベントってECU側で決められているものだったけど、
STIMだとそこらへんはどうなるのかなって疑問はあるね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
ツールから送る際はイベントに同期していることが望ましいが、
TDCタイミングだといつ送るべきかは全く予想ができないことになるもんね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、答えは?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
答えはシンプルで、「気にしない」になる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
え?それでいいの?
DAQの時は割とイベントと同期していることがものすごく価値を感じたんだけど。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
送る側は気にしないけど、実際に値が更新されるタイミングはイベントに同期することになる。
もうちょっと具体的に言うと、そのデータを利用する制御が走る前に一括更新されるイメージ。
Bypassの話をするときに見せた絵をもう一回だすよ。
今だと、ちょっと違った見え方になるんじゃないかな。
![Simulink、DAQ、STIM、ECU、制御対象、現行の制御仕様に合わせてSimulinkモデルの作成](https://www.simulationroom999.com/blog/wp-content/uploads/2020/06/03_XCP概要-1024x527.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、STIMは特定の関数の処理をする前に更新するようにしてるのか!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
Yes。
更新されるまでは前回値を維持するって振る舞いになるね。
XCPの仕様
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
XCPの振る舞いもわかったけど、Bypassのイメージも湧いてきた。
というか、Bypassを実現するための仕様がXCPって感じかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
うーん、
Bypassの実現はXCPの一部と思った方が良いね。
今回は説明はしないけど、オンラインキャリブレーションなんかもXCPの代表的な仕様だね。
まぁどちらも開発、検証を効率化するための先人に知恵みたいな感じ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
それを標準仕様として公開しているのか。
ASAMに加盟しておいた方が良いのかな。
でも、うちの会社だと「良く分からん」で一蹴されそう。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
会社組織自体は営利団体なんで、その仕様をどう利用していこうと考えているか、それがどう利益に繋がるかをアピールすれば良いんじゃないかな。
実際こういった案件も来ているわけだし、危機感を煽るってもありかもね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そこはちょっと作戦を練ってみるよ。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- DAQ、STIMは事前にアドレス、サイズの情報をツール、ECUの間で共有する。
- DAQはECU内の制御周期直後のタイミングで送出されるため常に更新後の最新値を効率的に得られる。
- STIMの送出自体はイベントと同期している必要はないが、実際に更新されるのは制御周期の直前。
バックナンバーはこちら
コメント