バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
ISO14229ことUDSの話。
ReadDataByIdentifierサービスの具体的な電文について。
登場人物
博識フクロウのフクさん

イラスト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
前提となるDIDリソース状態

ReadDataByIdentifierサービスの説明は前回のでOKといえばOKだと思うのだけど。

うーん、やっぱり具体的な電文を見たいなぁ。

じゃー、まずDIDリソースの状態定義からするか。

何それ?

簡単にいうと、DIDに紐づいたdataRecordが何byte長かって話だね。
実際はどういうパラメータがどのような配置って話なんだけど、
そこまでは詰めなくても良いかな。

えーっと、細かいパラメータは一旦抜きの方向で・・・。

はいよ。

とりあえずDIDは2つで、それぞれのサイズ
- 0x1234:2byte
- 0x5678:4byte
まぁ実際は数十byteとかでもっと大きいと思うけど。

ここで変なリアリティは要らないよ。
短くていいよ!(切実)

じゃ、上の構成で。
シングルDIDの送受信

じゃ、基本のシングルDIDの場合の送受信は以下になる。
Req: 0x22 0x12 0x34 // DID=0x1234 要求
Res: 0x62 0x12 0x34 0x01 0x02
Req: 0x22 0x56 0x78 // DID=0x5678 要求
Res: 0x62 0x12 0x34 0x03 0x04 0x05 0x06

うん、これは単純で分かり易い。
マルチDIDの送受信

次はマルチDIDの場合の送受信は以下になる。
Req: 0x22 0x12 0x34 0x56 0x78 // DID=0x1234/0x5678 要求
Res: 0x62 0x12 0x34 0x01 0x02 0x56 0x78 0x03 0x04 0x05 0x06
Req: 0x22 0x56 0x78 0x12 0x34 // DID=0x5678/0x1234 要求
Res: 0x62 0x56 0x78 0x03 0x04 0x05 0x06 0x12 0x34 0x01 0x02

あ、DIDは勝手にソートされないんだね。
要求した順番になるんだ。
マルチDIDの送受信(未サポートDIDがある場合)

ついでにこれもやっておこう。
Req: 0x22 0x11 0x11 0x12 0x34 // DID=0x1111/0x1234 要求
Res: 0x62 0x12 0x34 0x01 0x02
Req: 0x22 0x56 0x78 0x22 0x22 // DID=0x5678/0x2222 要求
Res: 0x62 0x12 0x34 0x03 0x04 0x05 0x06

え?何やってるの?
DIDが0x1111と0x2222の話なんて出てきてないよ?

うん。
これは存在しないDIDを混ぜるとどうなるかをやってみただけ。

エラーにはならずに存在するDIDだけを返すんだ。

そうそう。
マルチDIDの場合、こういうのがあるんで、ちゃんとレスポンスメッセージに乗っているDIDもチェックが必要。

なんでエラーにしないの?

機能アドレスを利用した運用を想定しているのかもね。
全ECUに同一のDIDを複数要求して、多少未サポートDIDがあっても可能な限り返すって仕様。

確かに、そっちの方が効率的と言えば効率的かー。

まぁそんな使い方は私も見たことはないけどね。

とりあえず、ReadDataByIdentifierサービスは大体わかった?

バッチリ―・・・とまでは行かないけど、雰囲気としてはわかったよー。
まとめ

まとめだよ。
- シングルDIDの送受信を見た。
- マルチDIDの送受信を見た。
- 一部のDIDが未定義なパターンも。
バックナンバーはこちら。
コメント