App Designer で Simulink モデルのシミュレーションアプリを作る
こんにちは、テクニカルサポートエンジニアの遠藤と申します。
前回の投稿は2月19日ということで、約3か月ぶりの投稿となります。
前回の記事ではSimulink API を用いて MATLAB から Simulink のモデルを編集する方法について書かせていただきました。今回はそれに関連して、MATLABのApp Designer 機能を用いて Simulink モデルのシミュレーションや編集を行うアプリケーションを作成する方法について書いていきたいと思います。
普段業務でSimulinkしか使っていないという方も、App Designer でシミュレーションアプリを自作することで業務効率アップにつながるかも……?
App Designer とは
App Designer とは、MATLABで対話型アプリケーションを簡単に作成するためのアプリケーションです。
アプリの設計やプログラムの作成を直感的な操作で簡単に行うことができるツールとなっています。
App Designer でシミュレーションアプリを作成するメリット
App Designer でシミュレーションアプリを作成すると、アプリ上の操作で Simulink モデルのパラメータ設定やシミュレーション実行を行えるようになります。
シミュレーションアプリの例
このようなシミュレーションアプリを作成するメリットとしては、
- 特定のパラメータ値の変更など決められたタスクを頻繁に行う場合に操作を簡略化できる(業務効率の向上)
- アプリ上で自由にシミュレーション結果を可視化できる(可視性の向上)
- Simulink モデルをよく知らない人でもアプリ上の操作のみでパラメータの設定やシミュレーションの実行ができる(使用性の向上)
などが挙げられます。特に 3 つ目のメリットは、Simulink を普段あまり使っていない人にモデルを使ってもらう時などにとても役立ちます。
App Designer の使い方
Simulink モデルとの連携方法の前に、App Designer の基本的な使い方について簡単に解説します。こちらのビデオもご参照ください。
まず、App Designer を起動します。MATLABのコマンドウィンドウで
>> appdesigner
と実行する、あるいはホームタブの「新規作成」->「アプリ」から起動することができます。
スタートページが起動します。このスタートページからは、新規アプリの作成や既存のアプリの編集、チュートリアルなどを行うことができます。今回は「空のアプリ」を選択します。
アプリの編集画面が開きます。今開いているのが「設計ビュー」となっており、ボタンやスライダーなどのコンポーネントをアプリ上に配置することができます。右上のボタンから「コードビュー」に切り替えてみます。
今度はアプリのコードが開きます。ここでは実際のアプリの処理をコーディングすることができます。上部のツールバーからアプリにプロパティ(アプリが持つ変数)、関数(アプリが持つ関数)、コールバック(ユーザーの操作に反応して実行される関数)を追加することができます。
シミュレーションアプリの作成
それでは Simulink モデルと連携したシミュレーションアプリを作っていきましょう。今回は例として下のような “myModel.slx” というモデルに対してアプリを作っていきます。
①シミュレーション実行ボタンの作成
最初にアプリからシミュレーションを実行するためのボタンを作成します。まず、設計ビューでアプリ上にボタンを配置し、ボタンのテキスト を “Run” に変更します。
つぎに、このボタンが押されたときの処理をプログラムします。ボタンを右クリックして「コールバック」->「ButtonPushedFcn コールバックの追加」を選ぶと、自動的にコードビューに切り替わります。
新しく “RunButtonPushed” という関数が作成されたことがわかります。この関数は先ほど配置した Run ボタンを押したときに実行されます。このように、コンポーネントを配置してコールバックを追加することで、コンポーネントに対してユーザーが操作を行ったときの処理を実装することができます。
さっそくこの関数内にシミュレーションを実行するコードを記述します。シミュレーションを実行するには sim という関数を用います。
function RunButtonPushed(app, event)
sim('myModel');
end
これで Run ボタンを押すとシミュレーションが実行されるようになります。
実際にアプリを起動して確認してみます。App Designer の実行ボタンからアプリを実行します。初回は保存ダイアログが表示されるので、ここでは “myApp.mlapp” という名前で保存します。アプリのウィンドウが起動するので追加した「Run」ボタンを押してみると……
シミュレーションが実行されました!
②シミュレーション結果をプロットする
シミュレーションが実行できたので、その結果をアプリ上にプロットしてみます。そのために、まず Scope ブロックのログを設定します。
これで sim 関数の戻り値に Scope のログデータが保存されるようになりました。
つぎに、アプリ上に「座標軸」コンポーネントを配置します。シミュレーション結果のプロットなので、Title.String を “Simulation Result”、XLabel.String を “Time”、Ylabel.String を “Value” に設定します。
つぎに、先ほど作成した “RunButtonPushed” 関数にプロットするコードを追加します。
function RunButtonPushed(app, event)
out = sim('myModel');
data = out.ScopeData;
plot(app.UIAxes, data(:,1), data(:,2));
end
注意点として、plot 関数の第一引数には追加した座標軸(app.UIAxes)を指定してあげる必要があります(これを指定しないと新しくfigureが作成され、そこにプロットされてしまいます)。詳しくはこのドキュメントをご参照ください。
これで Run ボタンを押すとシミュレーション実行後にシミュレーション結果がプロットされるようになりました。
③モデルのパラメータを変更する
つぎは、「スライダー」コンポーネントを使ってゲインの値を変更できるようにしてみましょう。設計ビューでスライダーを追加し、ラベルを “Gain”、初期値を 1、範囲を 0,5 に設定します。
設定が終わったら、ボタンの時と同じようにコールバックを追加します。スライダーの場合は ValueChangedFcn と ValueChangingFcn の 2 つがありますが、ここではスライダーの値が変化したときに実行されるコールバックである ValueChangedFcn を追加します。
function GainSliderValueChanged(app, event)
value = app.GainSlider.Value;
end
コードビューに上記のような関数が追加されます。あらかじめスライダーの値を “value” という変数に格納する処理が用意されているので、これを使ってゲインの値を変更する処理を実装します。使うのはもちろん前回の記事でも紹介した set_param 関数です。
function GainSliderValueChanged(app, event)
value = app.GainSlider.Value;
set_param('myModel/Gain', 'Gain', num2str(value));
end
Gain パラメータにはゲイン値を文字列で設定する必要があるので、num2str 関数でスライダーの値を文字列に変換しなければならない点に注意です。
これでスライダーによってゲインの値を変更できるようになりました。
④モデル起動時にアプリも同時に起動する
最後に、モデルとシミュレーションアプリを別々に起動するのは面倒なので、モデルコールバック機能を用いてモデル起動時にアプリも同時に起動するように設定してみましょう。モデルコールバックは、モデルや読み込まれたときやシミュレーション実行時などに特定の処理を行うための機能で、モデルプロパティから設定することができます。
今回はモデル読み込み時にアプリを起動したいので、PreLoadFcn にアプリを起動するコマンドを記述します。アプリの起動には、アプリ名(今回は myApp)をそのまま実行します。
これでモデルを開くときに同時にアプリも起動するようになりました。
その他の参考情報
この記事では基本的な App Designer と Simulink の連携方法をご紹介しましたが、MATLAB Answers にも App Designer と Simulink モデルの連携方法が解説されている投稿がいくつかあります。独自のアプリを作成する際にはこれらもご参考ください。
set_param を用いてモデルのスタートとストップをアプリから制御する例(ファイルつき)
注意事項
MATLAB Compiler という製品のアプリケーションコンパイラー機能を使用すると、App Designer で作成したアプリからスタンドアローンのアプリケーションを生成することができます。しかし、MATLAB Compiler は Simulink モデルをサポートしていないため、MATLAB Compiler だけでは Simulink モデルを実行するアプリケーションをスタンドアローン化することはできません。
MATLAB R2020a からリリースされた Simulink Compiler という製品を使用すると Simulink モデルを実行するためのスタンドアローンアプリを作成することができますが、その際には Simulink Compiler に適した形でアプリケーションを設計する必要があります。詳しくは Simulink Compiler のドキュメントページをご確認ください。
おわりに
今回は App Designer と Simulink モデルの基本的な連携方法についてご紹介しました。
日々の業務で Simulink での設定変更を面倒に感じている方、モデルを他チームに渡す際に説明事項が多くてお困りの方は
独自のシミュレーションアプリを開発することで業務効率が一気に上がるかもしれませんよ!
- Category:
- App Designer,
- 機能と使い方
Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.