【XCP】最小構成のMBD事例 第2章 その228【CAN-FD⑤】

【XCP】最小構成のMBD事例 第2章 その228【CAN-FD⑤】 事例
【XCP】最小構成のMBD事例 第2章 その228【CAN-FD⑤】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回で仮想ECU側のXCP関連のCAN-FD向けの調整が完了。
XCPとしてはMAX_CTOとMAX_DTOを8から64に変更すればOK。

仮想ECU側はこれ以外にPID制御の入出力の変数を調整する必要がある。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

PID制御の入出力の定義

太郎くん
太郎くん

そういえば、PID制御の入出力ってどう定義してたんだっけ?

フクさん
フクさん

こんな感じで定義してたね。

extern uint8_t g_XcpDebugMemory[1024];
sint16 *g_pwTarget = (sint16*)&g_XcpDebugMemory[0x100];	// LSB:1/256[rad/s]
sint16 *g_pwInput  = (sint16*)&g_XcpDebugMemory[0x102];	// LSB:1/256[rad/s]
sint16 *g_pwOutput = (sint16*)&g_XcpDebugMemory[0x104];
太郎くん
太郎くん

なるほど。
特定のアドレスを符号付き16bit変数って体で定義したのか。

太郎くん
太郎くん

ってことはこれを符号付き32bit長にすればOKってことか。

フクさん
フクさん

あとはアドレス16bit境界になってるから32bit境界にする必要もあるね。

太郎くん
太郎くん

あ、そうか。
じゃないと、各変数が16bit分被るから、お互いがお互いの16bit分を書き換えるって事象がおきちゃう!

PID制御の入出力の修正

フクさん
フクさん

というわけで以下に修正だ。

extern uint8_t g_XcpDebugMemory[1024];
sint32 *g_pwTarget = (sint32*)&g_XcpDebugMemory[0x100];	// LSB:1/65535.0[rad/s]
sint32 *g_pwInput = (sint32*)&g_XcpDebugMemory[0x104];	// LSB:1/65535.0[rad/s]
sint32 *g_pwOutput = (sint32*)&g_XcpDebugMemory[0x108];
太郎くん
太郎くん

この変数というかポインタを使う側は修正しなくてもOK?

フクさん
フクさん

このポインタ変数を利用してる側は、そのままfloat64として扱ってるから
今回の構成としては修正は不要かな。

	float64 target = (*g_pwTarget) * LSB / NORMALIZE;
	float64 Input = (*g_pwInput)   * LSB / NORMALIZE;
	float64 Output;
	float64 Output_zi = (*g_pwOutput) * LSB / NORMALIZE;
太郎くん
太郎くん

なるほど。
ポインタの参照先が16bitか32bitかはあまり気にしなくてもOKなのね。

フクさん
フクさん

というわけで仮想ECU側の修正はこんなもんだろう。

太郎くん
太郎くん

次は指令器の辻褄合わせか。

まとめ

フクさん
フクさん

まとめだよ。

  • 仮想ECU側のPID制御の入出力定義はポインタで実施。
    • 元々が符号付き16bit変数へのポインタだったのでこれを符号付き32bit長変数に差し替え。
    • 上記に伴い、参照先のアドレス境界を16bitから32bitに切替。
  • PID制御器の入力はfloat64で、参照変数が16bitか32bitかは気にしなくてもOKなコード。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました