バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
AUTOSAR-Dcmのシミュレーションの話。
DiagnosticSessionControlのシミュレーション結果。
登場人物
博識フクロウのフクさん
イラスト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
DiagnosticSessionControlのシミュレーションの結果(メッセージ)
まず、DiagnosticSessionControlを復習しておいた方がよいかも。
ここでやってたねー。
実際のメッセージログは以下になる。
一応コメントも追記しておいたよ。
Send msg : 1001 // defaultSessionへ遷移
Recv msg : 50010010012c // P2時間=16[ms],P2*時間=3000[ms]
Send msg : 1002 // programmingSessionへ遷移
Recv msg : 5002002001f4 // P2時間=32[ms],P2*時間=5000[ms]
Send msg : 1003 // extendDiagnosticSessionへ遷移
Recv msg : 5003003001f4 // P2時間=48[ms],P2*時間=5000[ms]
Send msg : 1004 // safetySystemSessionへ遷移
Recv msg : 5004003100c8 // P2時間=49[ms],P2*時間=200[ms]
Send msg : 1005 // 存在しないSessionへ遷移
Recv msg : 7f1012 // NRC$12(subFunctionNotSupported)
Send msg : 100102 // メッセージ長異常
Recv msg : 7f1013 // NRC$13(incorrectMessageLengthOrInvalidFormat)
Exiting
DiagnosticSessionControlのシミュレーションの結果(CAN回線)
そして、CAN回線上のログ。
Begin Triggerblock
0.000000 Start of measurement
// defaultSessionへ遷移
0.000000 1 18DA10F1x Rx d 8 02 10 01 CC CC CC CC CC
0.001778 1 18DAF110x Rx d 8 06 50 01 00 10 01 2C 55
// programmingSessionへ遷移
0.208806 1 18DA10F1x Rx d 8 02 10 02 CC CC CC CC CC
0.210887 1 18DAF110x Rx d 8 06 50 02 00 20 01 F4 55
// extendDiagnosticSessionへ遷移
0.409289 1 18DA10F1x Rx d 8 02 10 03 CC CC CC CC CC
0.411329 1 18DAF110x Rx d 8 06 50 03 00 30 01 F4 55
// safetySystemSessionへ遷移
0.618988 1 18DA10F1x Rx d 8 02 10 04 CC CC CC CC CC
0.620962 1 18DAF110x Rx d 8 06 50 04 00 31 00 C8 55
// 存在しないSessionへ遷移
0.818225 1 18DA10F1x Rx d 8 02 10 05 CC CC CC CC CC
0.820298 1 18DAF110x Rx d 8 03 7F 10 12 55 55 55 55
// メッセージ長異常
1.021387 1 18DA10F1x Rx d 8 03 10 01 02 CC CC CC CC
1.023386 1 18DAF110x Rx d 8 03 7F 10 13 55 55 55 55
End TriggerBlock
DiagnosticSessionControlのシミュレーションの結果を見た感じの考察
おー。なんかちょっと感動!
ところでNegativeResponseって特に独自に記載しなくても勝手に判定してくれる感じなのかな?
今回のNegativeResponseはそうだね。
存在しないSessionもメッセージ長異常もコンフィグレーションから判断できる情報なんで。
その言い方だと独自に判断するパターンもあるような感じだねー。
うん。
例えば、NRC$22ことconditionsNotCorrectなんかは割と代表的。
これは車両状態が該当サービスを実施する上で望ましくない場合に返るNegativeResponse。
今回の場合だと、車両が走行中にprogrammingSessionへ遷移されると都合が悪いことがある。
その場合はconditionsNotCorrectが返るかもね。
セッション遷移が都合が悪いことってあるの?
あんまり制御には影響ないような気がするんだけど?
programmingSessionは遷移した瞬間からリプログラミングモードに入る仕様になっていることがあって、
そのモードになると制御の保証ができないことがある。
よって、走行中のprogrammingSession遷移は許可しないって仕様になることが多い。
ほー。なるほどー。
まとめ
まとめだよ。
- DiagnosticSessionControlのシミュレーションの結果を確認
- メッセージレベルの確認。
- CAN回線レベルの確認。
- NegativeResponseはDcmで自動判定して返すものと独自にコードを追加して返すものがある。
- メッセージ長やパラメータ異常は自動判定。
- 車両状態による拒否は独自コード。
バックナンバーはこちら。
コメント