バックナンバーはこちら。
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が未定義なパターンも。
バックナンバーはこちら。
コメント