自動車業界では、MATLAB/Simulinkをベースとしたモデルベース開発が有望視されています。言うと、適用方法によってはそれなりに工数削減や品質向上が出来ると言う事が実証されてきたからです。一方ではモデルベース開発によって逆に工数が増加してしまうケースもあり、まだまだ課題が山積みです。これは、ユーザー様にとっては課題が山積みと言えますが、私にとっては仕事のネタが山積みとも言えます。このブログでは、そういったモデルベース開発に関わっていく中で思った事について書いていきます。更新日は月曜日+気が向いた日です。yositakeTags:ちょっと前の話です。私「技術的には全く問題ございませんが、これは何のためのモデルでしょうか?」お客様「実は、こういうアルゴリズムをJavaで開発してるんだけど、やっぱり動かしてみたいんだよね。おエライさんへのデモ用とかで。私「では、SimulinkモデルにそのJavaコードを埋め込んで直接走らせてはいかがでしょうか?Javaコードのデバッグにもなり、デモにも使えて一石二鳥だと思うのですが?」お客様「!」はい、しゅーりょー。儲け話が1つ消えました。プラントモデルはあるけど制御モデルが無い、だから作って?というご依頼でしたので、私の仕事はありません。Simulator)と呼びます。自動車業界であれば、ECUに乗っけるCコードをSILSにする事が多いのですが、今回の場合は対象がJavaです。Javaとでも呼びましょうか。Javaは簡単に実現できますが、コツが分からないと苦労するかも分かりません。そこで、簡単にそのやり方をご紹介します。・じゃあ、Simulinkブロックから、Javaオブジェクトにアクセスできるよね?という風に考えます。今回の記事では、これを1つずつ追っていきます。MATLABからJavaオブジェクトを呼び出すたとえば、こういうJavaコードがあったとしましょう。カレントディレクトリに置いてあったとすると、こんな感じで呼び出せます。ファイルの位置を指定します。コマンドで、Javaオブジェクトのコンストラクタを呼び出します。ここでの戻り値「obj」は、Javaクラスそのものです。呼び出したら、1が返ったという感じで、正しく動いている事が分かりますね。Function」です。Coderにかけるのが前提ですからちょいと面倒です。Functionの方を使いましょう。(まぁ、どっちでもイケます。Functionsの中の「Fcn」ブロックで代用します。)ここにm-file名を書いておけば、シミュレーションステップ毎に呼び出してくれます。Java「Javaオブジェクトにアクセスするようなm-fileを作り、それをSimulinkブロックから呼び出す」というのが基本戦略ですが、1つだけ落とし穴があります。実は、m-file中で作ったMATLAB変数は、ヨソからアクセスできません。この辺はCと一緒です。グローバル変数を作れば、どこからでもアクセスできます。・Javaオブジェクトを、グローバル変数として作る・m-fileから、Javaオブジェクトにアクセス・Simulinkモデルから、m-fileにアクセスという風にしてやります。Javaオブジェクトを、グローバル変数として作るモデル開始時に自動的につくってくれるよう、こういう風にすると良いでしょう。Simulinkモデルの「ファイル」>「プロパティ」>「コールバック」タブにて、次のようにStartFcnの部分をセットします。内容をテキストでかくと、こうです。グローバル変数化しています。m-fileから、Javaオブジェクトにアクセスm-file側では、こんな感じでJavaオブジェクトにアクセスします。Functionの「MATLAB関数」のところに、用意したm-file名を指定してやるだけです。動かしてみると・・・1を渡して1を受け取る確かに、動いているカンジがします。.classファイルを生成しなおし、それからSimulinkモデルを実行します。すると、、、バッチリと2倍を返すようになりました。ヨタ話m-fileからJavaを簡単に扱えるんだから、ここから呼び出しちゃえ!というのが趣旨です。おんなじ様に、Cも簡単に呼び出せたらいいんですけど、なかなかそうはならないんですよね。レガシーコードツールなんてものもあって、それなりの仕事をしてくれるのですが、まぁイロイロとあって簡単ではありません。(レガシーコードツールの名誉のために言っておきますと、このツール自体はすばらしいものです。別次元の問題がイロイロとあって大変なのです。ここには書けませんが。)MBDというと、制御モデルをSimulinkで作ろうっていう話がまっさきに出てきますが、別にそれだけではありません。従来プロセスで開発は進めておいて、ソフトウェアの検証だけにSILSを使おうとか、ハードウェアの検証だけにHILSを使おうとかいうのでも全然アリです。その場合、実機とピッタリあうプランとモデルを書こうとするとすっごく大変ですから、ザックリと書いてザックリとデバッグするだけでも十分に役に立ちます。せ実機にはかなわないのですから。モーターHILSみたく、かなり実機と理論とが近いような領域であれば、実機以上の検証をHILSでやってみよう!というのも十分にアリです。コメントを投稿して頂くには、JavascriptとCookieを有効にしていただく必要がございます。