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 を中心に組み立てていく事になります。

次回

次回も、「パラメータを読み書きする」についてご説明します。次回で、「パラメータを読み書きする」についての説明が完結します。

2 thoughts on “MATLABプログラミング Simulink基礎編(1)”

  1. 面白いです。
    matlabでのプログラミングは、やっていましたし、simulinkでのブロック作成もやっていましたが、
    matlabコマンドでsimulinkが制御できるのは初めて知りました。
    matlabのfigureをプロパティでいろいろ制御できるのと似ているのでしょうか。
    参考になりました。

  2. コメントありがとうございます。おっしゃる通り、figureの制御に似ていますね。私も、はじめてsimulinkのコマンド制御方法を知った時は、色々できそうで楽しくなった記憶があります。

Comments are closed.