MATLABプログラミング Simulink基礎編(1)
MATLABのプログラミング機能を使用すると、Simulinkモデルの調査(モデル中に、Switchブロックはいくつある?)・加工(モデル中のConstantブロックをぜんぶ赤色にしちゃえ!)などを全自動で出来るようになります。これから数回に分けて、そのための方法をご紹介します。
今回ご紹介するのは、
「パラメータを読み書きする」
です。
これがSimulink向けプログラミング基礎中の基礎、正直これさえ知っておけばなんとかなります。
そもそも、何ができるのか?
ある日、上司が突然こんな事を言い出しました。
「モデルの中にConstantブロックってあるじゃない?こいつのパラメータ『サンプル時間』を、ぜんぶ -1 にして欲しいのよ。期限?大まけにまけて、明日の朝まで。」
おいおい、Constantブロックがいったいいくつあると思ってるんだ!といったセリフはぐっと飲み込み、MATLABのプログラミング機能(m-file)を使って全自動でやってしまいましょう。手でやると何日もかかる作業だとしても、自動化できれば一瞬で片づけられます。
このプログラミング機能について、もうちょっと詳しく見ていきます。
たとえばSimulinkモデルの「シミュレーション」>「コンフィギュレーションパラメータ」を見てみると、設定項目がいっぱいあります。
Constantブロックをダブルクリックしてみても、「定数値」「ベクトルパラメーターを1-Dとして解釈」など、設定項目がいっぱいあります。
設定項目いっぱい
これらの設定項目は「パラメータ」と呼ばれます。そして、およそユーザーが手で設定できる「パラメータ」はすべて、MATLABプログラムから自由に読み書き出来るようになっています。
パラメータいっぱい
Simulinkモデルを調査・加工するといっても、所詮はこれらのパラメータを読み書きするだけです。(もちろん、ブロックや信号線の追加・削除もできます。)
そのため、MATLABのプログラミング機能を使用すれば、これまで人間の手でブロック設定の確認・変更していたような作業をすべて自動化できます。
演習1:モデルのパラメータを読み書きする
もしもお手元にMATLAB/Simulinkがあれば、実際に手を動かしてパラメータの読み書きをやってみましょう。
手順1
手順1:Simulinkモデルを作成し、ex1_1.mdl として保存する
結果1:ex1_1.mdl が生成されました
手順2
手順2:ex1_1.mdlを開いてから、MATLABコマンドウィンドウにて、get_paramコマンドを実行する
>> get_param( ‘ex1_1’, ‘StopTime’ )
結果2:Simulinkモデルの終了時間が取得できました
手順3
手順3:MATLABコマンドウィンドウにて、set_paramコマンドを実行する
>> set_param( ‘ex1_1’, ‘StopTime’, ‘123’ )
結果3:Simulinkモデルの終了時間が変更できました
ふりかえり
いきなり get_param, set_param コマンドが出てきました。実は、これらがパラメータを読み書きするためのコマンドです。
get_param( モデルやブロック名 , パラメータ名 )とすると、パラメータ取得結果が戻り値としてかえります。
set_param( モデルやブロック名 , パラメータ名 , パラメータ値 )とすると、パラメータを設定する事ができます。
これらのAPIを使うことで、Simulinkモデルのパラメータを読み書き出来ました。
演習2:ブロックのパラメータを読み書きする
では次に、Simulinkブロックのパラメータも読み書きしてみましょう
手順1
手順1:Simulinkモデルを作成し、ex1_2.mdl として保存する
結果1:ex1_2.mdl が生成されました
手順2
手順2:ex1_2.mdlに、Constantブロックを配置します
結果2:Constantブロックが配置されました
手順3
手順3:MATLABコマンドウィンドウにて、get_paramコマンドを実行する
>> get_param( ‘ex1_2/Constant’, ‘Value’ )
結果3:Constantブロックの「定数値」が取得できました
手順4
手順4:MATLABコマンドウィンドウにて、set_paramコマンドを実行する
>> set_param( ‘ex1_2/Constant’, ‘Value’, ‘2’ )
結果4:Constantブロックの「定数値」が設定できました
ふりかえり
やっていることは、モデルのパラメータ読み書きと変わりませんね。get_param, set_param の第一引数に、モデル名を指定するのか、ブロック名を指定するのかの違いだけです。
まとめ
今回、「パラメータを読み書きする」とはどういう事か?について確認をしました。すなわち、
- 「モデル」も「ブロック」も、「パラメータ」をいっぱいもっている
- 「パラメータ」を読み書きすれば、モデルやブロックの挙動を調査・加工できる
- 「パラメータ」の読み書きは、get_param コマンド、set_param コマンドで行う
Simulinkモデルを調査・加工するプログラムを作る際には、get_param / set_param を中心に組み立てていく事になります。
次回
次回も、「パラメータを読み書きする」についてご説明します。次回で、「パラメータを読み書きする」についての説明が完結します。
面白いです。
matlabでのプログラミングは、やっていましたし、simulinkでのブロック作成もやっていましたが、
matlabコマンドでsimulinkが制御できるのは初めて知りました。
matlabのfigureをプロパティでいろいろ制御できるのと似ているのでしょうか。
参考になりました。
コメントありがとうございます。おっしゃる通り、figureの制御に似ていますね。私も、はじめてsimulinkのコマンド制御方法を知った時は、色々できそうで楽しくなった記憶があります。