バックナンバーはこちら
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社の製品だよね?

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

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

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


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

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

まぁそこは触ってみればわかるかな。
グローバル変数追加

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

あいよ。

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



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

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

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

(雑だ。)
SimulinkにCANapeIO接続

次はSimulink側だな。
ライブラリブラウザにCANapeIOってのがいるんで、
それのINとOUTを繋げばOK。


よし。つないだよ。


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

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


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

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

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

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

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


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

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

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

おーあった。
SimulinkDLLをCANapeへ組み込み

次はSimulinkDLLをCANapeに組み込む

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

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


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

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

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

はーい。


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

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

ついに!
ついにBypass!
まとめ

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