【上流検証】最小構成のモデルベース開発事例 その49【Bypass⑮】

【上流検証】最小構成のモデルベース開発事例 その49【Bypass⑮】 事例

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

はじめに

今回はグローバル変数定義とSimulinkDLLの作成。

登場人物

博識フクロウのフクさん

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

Simulinkモデル組み込みの方針

フクさん
フクさん

喜べ。今回はSimulinkネタだ。

太郎くん
太郎くん

やっと、モデルベースっぽいところに戻ってきた・・・。

太郎くん
太郎くん

雰囲気としてはCANoeの時と似た感じで良いのかな?

フクさん
フクさん

そうだね。
CANoeの時はCANoeIOブロックをSimulinkモデルのIn/Outに繋いだと思うけど、
今回はCANapeIOブロックというものを繋ぐ。

太郎くん
太郎くん

似たイメージで良かった。
とりあえず、A2Lで定義した変数に書き込むようなイメージで良いのかな?

フクさん
フクさん

最終的にはそれだけど、
やっぱり一個一個確認していった方が良い。
よって、CANapeでグローバル変数というのを定義して、
そのグローバル変数への読み書き状態をCANapeで確認する。

太郎くん
太郎くん

グローバル変数?

フクさん
フクさん

CANoeの時のシステム変数と一緒だね。
何故か名前が違う。

太郎くん
太郎くん

なんで違うの?

フクさん
フクさん

しらん。そもそも異なるアプリケーションだからじゃない?

太郎くん
太郎くん

同じVector社の製品だよね?

フクさん
フクさん

でも異なるアプリケーションだし。

太郎くん
太郎くん

(マジか、フクさんの中では納得できてしまってるのか。)

フクさん
フクさん

とりあえず、イメージ図を書いたよ。

CANape、SBWモデル、グローバル変数、CANoeの「システム変数」相当。まずは、これを計測。なんで名前ちがうんだ
太郎くん
太郎くん

なんかダイアログっぽいのがあるけど、
これなに?

フクさん
フクさん

パネルってやつだね。
CANoeにも同じようなのがあるけど、
ボタンとかテキストボックスを設置出来て、
GUIで各種変数を制御できるようになる。
今回はボタンでシフト操作相当をやらせることになる。
割と簡単に作れるんだけど、文章にするとえらいことになるんで、説明は省略かな。

太郎くん
太郎くん

まぁそこは触ってみればわかるかな。

グローバル変数追加

フクさん
フクさん

グローバル変数の追加方法を説明するよ。

太郎くん
太郎くん

あいよ。

フクさん
フクさん

メニューのツールから関数エディタを起動する。

CANape、Window、ツール、関数エディター
フクさん
フクさん

関数エディタの右側のペインにグローバル変数ってのがあるで、
右クリックで新規ってを選んで、
あとは名前とか型とか定義すれば良いよ。

太郎くん
太郎くん

なんか今回は説明が雑だな。

フクさん
フクさん

今回はあんまりXCPとかA2LとかのASAM仕様の影響を受ける特殊な要素が無いからね。
純粋にCANapeの使い方なんで、たぶん雑でもオッケー。

太郎くん
太郎くん

(雑だ。)

SimulinkにCANapeIO接続

フクさん
フクさん

次はSimulink側だな。
ライブラリブラウザにCANapeIOってのがいるんで、

それのINとOUTを繋げばOK。

Simulinkライブラリブラウザー、Vector CANape/vSignalyzer Target、CANape I/O、Input、Output
太郎くん
太郎くん

よし。つないだよ。

Simulinkモデル、SWBモデル
フクさん
フクさん

各IOに名前を設定するのを忘れないでね。

太郎くん
太郎くん

あ、CANoeの時と同じ流れだね。

Simulink,Sinkブロックパラメータ、Symbolic Name、Rows、Cols
太郎くん
太郎くん

CANoeの時はSimulinkとCANoe間でシンボル定義が連携した状態で見れた気がしたけど、
CANapeは連携してる感じはしないね?

フクさん
フクさん

まぁここ名前はCANapeで定義したグローバル変数である必要性はないんだけどね。
手動で紐づけすることになるんで、好きな名前にして良いけど、
わからなくなると思うので同じ名前にしておきな。

太郎くん
太郎くん

うん。そこはちゃんと従おう。

太郎くん
太郎くん

あとはCANoeと同じようにコード生成すれば良いのかな?

フクさん
フクさん

そうだね。
システムターゲットファイルで「cnp.tlc」を選ぶのが違いかな。

Simulink、コンフィグレーションパラメータ、コード生成、ターゲットの選択、cnp.tls、言語、C言語、説明、ビルドプロセス、TLCオプション、makefileの設定、makefileの生成、makeコマンド、make_rtw、template makefile、cnp_msdll.tmf、コード生成アドバイザー、目的を選択、指定なし、コード生成アドバイザー、目的を選択、制定なし、コードを生成する前にモデルをチェックする、オフ、モデルのチェック、コード生成のみ、コードとアイテムのパッケージ化、ビルド
太郎くん
太郎くん

これでビルドすればOKだね。

太郎くん
太郎くん

今回もDLLができてると思って良いのかな?

フクさん
フクさん

そうだね。
Simulinkモデルのディレクトリからみて、
[モデル名]_cnp_rtw\Release_x64\[モデル名]_x64.dll
が出来ているはずだよ。(64bitOS環境の場合)

太郎くん
太郎くん

おーあった。

SimulinkDLLをCANapeへ組み込み

フクさん
フクさん

次はSimulinkDLLをCANapeに組み込む

太郎くん
太郎くん

CANoeの時はノードに割り付けたけど、
CANapeはノードって概念は無いよね?
どこに割り付けるイメージ?

フクさん
フクさん

測定設定の中にアルゴリズムってのがあって、
その中にMATLAB/Simulinkモデルを設定する項目がある。

CANape、MATLAB/Simulinkモデル、割り当て、追加ファイル
フクさん
フクさん

ここで先ほどのSimulinkDLLを割り当てる。
そして、入力と出力の割り当ての項目もあるので、
SimulinkDLLとグローバル変数をリンクさせる。

太郎くん
太郎くん

あーここでさっきのCANapeIOブロックで指定した名前が出てくるんだね。
たしかに同じ名前にしておけば悩まないね。

いざ、シミュレーション

フクさん
フクさん

よし、シミュレーションして
SimulinkDLLが動作しているか確認しよう。

太郎くん
太郎くん

はーい。

simulation結果
太郎くん
太郎くん

うん、想定通りの波形が出てるよ。

フクさん
フクさん

であれば、SimulinkDLLは問題無く組み込めたということだ。
じゃ、次回は実際にプロトタイプECUに対してのBypassだな。

太郎くん
太郎くん

ついに!
ついにBypass!

まとめ

フクさん
フクさん

まとめだよ。

  • CANapeでは計測対象の変数以外にCANape内でのみ読み書き可能なグローバル変数が定義できる。
    • 関数エディタから追加編集可能。
  • SimulinkにCANapeIOブロックを繋ぐことでCANapeと連携可能なDLLが作成可能。
    • CANoeと異なり、CANapeIOの変数名はCANapeと合わせる必要はない。
    • しかし、合わせておいた方が楽ではある。
  • グローバル変数をモニタすることが可能。
    • SimulinkDLLの動作確認だけであれば、グローバル変数で見た方が問題が起きた際の実機との切り分けがし易い。

バックナンバーはこちら

コメント

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