バックナンバーはこちら。
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
ReadDataByIdentifierサービスのリクエストメッセージ

じゃ、早速だけど、
ReadDataByIdentifierサービスのリクエストメッセージはこんなん。
Position | Parameter Name | Value |
---|---|---|
1 | ReadDataByIdentifier Request SID | 0x22 |
2~3 | dataIdentifier#1 | 0xFFFF |
… | – | – |
n~n+1 | dataIdentifier#m | 0xFFFF |

dataIdentifierってDIDだっけ?
これを元に読みだすパラメータが決まるってやつ。

そうそう。
良く覚えてたね。

あれ?
DIDって複数送れるの?

うん。
まぁ完成車メーカ依存の仕様としての個数制限とか
レスポンスメッセージ長の都合でエラーになることもあるけど。

完成車メーカ依存の仕様はわかるけど、
「レスポンスメッセージ長の都合でエラー」ってのは?

1DIDで結構な長さの電文になることがあるんだけど、
DIDの個数が多いとその分必要な電文長が長くなる。
その結果、ECU側で内包している送信バッファサイズや
ISO15765-2で規定されている4095byteを超えるようだとエラー。
ってだけ。

あー。言われてみればそうだね。
ReadDataByIdentifierサービスのレスポンスメッセージ

次はレスポンスメッセージ。
Position | Parameter Name | Value |
---|---|---|
1 | ReadDataByIdentifier Response SID | 0x62 |
2~3 | dataIdentifier#1 | 0xFFFF |
4~x | dataRecord#1 | XXXX |
… | – | – |
n~n+1 | dataIdentifier#m | 0xFFFF |
n+2~x | dataRecord#m | XXXX |

うーん、表からだとちょっとイメージ湧かないけど、
DIDの後に欲しいデータことdataRecordが来て、複数のDIDを要求されていると
必要数分、その並びが出来る感じかな?

そうだね。

そういえば、このdataRecordの長さって決まってるの?

決まってない。
完成車メーカの方でDID毎に自由に決めてるね。

そうすると、複数DIDで要求すると
レスポンスメッセージのどこが次のDIDかわからなくない?

電文からだと分からないねー。
ここは読み出す側が知っていること前提になるよ。

え?そうなの?
複数DIDで読み出せるのは便利と思う反面、
実際に読み出す場合、実は結構面倒だったり?

そうだねー。
ここら辺は別の定義ファイル等を読み込んで
DID長とかをオフボードテスタ―が事前に知っている必要はあるね。
それを嫌って複数DIDでは読み出さないようなツールもあるといえばある。

へー。
まとめ

フクさん:
まとめだよ。
- ReadDataByIdentifierサービスのリクエストメッセージの説明。
- 複数DIDが設定できる。
- 設定できるDIDの個数制限がある場合があり、それを超えるとエラー。
- レスポンスメッセージが4095byteを超える場合もエラー。
- ReadDataByIdentifierサービスのレスポンスメッセージの説明
- DIDとdataRecordの組み合わせ。
- 複数DIDの場合は上記組み合わせが複数一つの電文に載る。
バックナンバーはこちら。
コメント