MATLABプログラミング Simulink基礎編(3)
前回に引き続き、「パラメータを読み書きする」についてご説明します。
モデルやブロックのパラメータ読み書きは、get_param, set_paramコマンドを使用するのですが、その際に次の2種類の情報が必要です。
- どのブロック(モデル)に対して?
- どのパラメータを?
前回は「どのブロック(モデル)に対して?」について確認しましたので、今回は「どのパラメータを?」について見ていく事にします。
どんなパラメータがあるのか?
モデルにせよブロックにせよ、そもそもどんなパラメータがあるのか?を知らなければ、何が出来るのかも良く分かりません。
実は、パラメータ一覧表がSimulinkのマニュアルにちゃんと載っています。
マニュアル:モデルとブロックパラメーター
(もしも上記がリンク切れであれば、マニュアルの「リファレンス」>「モデルとブロックパラメーター」の項目をご覧ください。)
この一覧表をパッと見て、そうか!全て分かった!という方とはここでお別れです。
「うーん、おおよそ分かるんだけど、いまいちスッキリしないなぁ・・・」という方は、この一覧表をどのように解釈して、どのように利用すれば良いのか、これから一緒に見ていきましょう。
一覧表の項目を見てみる
「モデルとブロックパラメーター」の中には、次の4つのカテゴリがあります。(2012年2月20日時点)
- モデルパラメーター
- 共通のブロックパラメーター
- ブロック固有のパラメーター
- マスクパラメーター
このうち、モデルのパラメーターは「モデルパラメーター」にまとめられています。それ以外の3つはブロックのパラメーターです。ちなみに「マスク」というのは、Simulinkブロックに独自のダイアログを付けて設定できるようにするための機能です。
では、「共通のブロックパラメーター」を見てみましょう。「パラメーター」「説明」「値」の3つが並んでいる事と思います。
「パラメーター」とは、get_param, set_param に指定するパラメータ名です。
「説明」は、そのパラメータが何を表しているのかについての説明です。
「値」は、そのパラメータにどんな値を設定できるかです。
これから、「値」についてもう少し詳しく見ていきましょう。
パラメータの値の種類あれこれ
マニュアルから、いくつかのパラメータを転載します。
パラメーター |
説明 |
値 |
Name |
ブロック名。 |
文字列 |
DropShadow |
ドロップ シャドウの表示。 |
{‘off’} | ‘on’ |
FontWeight |
フォントの重み。 |
‘light’ | ‘normal’ | ‘demi’ | ‘bold’ | {‘auto’} |
Position |
モデル ウィンドウでのブロックの位置。 |
引用符に囲まれない座標ベクトル (ピクセル単位): [left top right bottom] |
FontSize |
フォント サイズ。 値が -1 のときは、このブロックが DefaultBlockFontSize モデル パラメーターで指定されるフォント サイズを継承することを示します。 |
real {‘-1’} |
実は、これらのパラメータの値は、データ型(※あとでご説明します)が微妙に異なっています。そのため、取得 / 設定方法がそれぞれ微妙に違っています。何がどう違っているのか、演習という形で確かめてみましょう。
演習1:いろんなパラメータを読み書きしてみる
事前準備
モデル ex1_6.mdl を作成し、そこにConstantブロックを1つ置きます
手順1
手順1:MATLABコマンドプロンプトにて、ブロック名を取得してから、これを変更します
>> get_param( ‘ex1_6/Constant’, ‘Name’ )
>> set_param( ‘ex1_6/Constant’, ‘Name’, ‘Constant2’ )
結果1:ブロック名が取得・設定できました
ここで、MATLABの「ワークスペース」ウィンドウを見てみると、ans が次のようになっています。Constantという文字列が ‘ で囲まれているのがポイントです。
手順2
手順2:MATLABコマンドプロンプトにて、ドロップシャドウの値を取得してから、これを変更します
>> get_param( ‘ex1_6/Constant2’, ‘DropShadow’ )
>> set_param( ‘ex1_6/Constant2’, ‘DropShadow’, ‘on’ )
結果2:ドロップシャドウの値が取得・設定できました
ここで、MATLABの「ワークスペース」ウィンドウを見てみると、ansが次のようになっています。on という文字列が ‘ で囲まれているのがポイントです。
手順1~2のふりかえり
パラメータ Name, DropShadow ともに、値を ‘ で囲んでいました。これは、MATLABの「文字列型」の特徴です。
Nameの場合は、自由に名前を付けることができるため、’ で囲んだ自由な文字列を指定できます。
一方、DropShadowはON/OFFしかできない種類のパラメータです。こういったパラメータに対しては、値 ‘on’, ‘off’ のいずれかしか指定できません。
これは、データ型としては「文字列型」です。しかし、自由な文字列を指定できるわけではなく ‘on’, ‘off’ の2種類固定になっています。
手順3
手順3:MATLABコマンドプロンプトにて、フォントサイズを取得してから、これを変更します
>>get_param( ‘ex1_6/Constant2’, ‘FontSize’ )
>>set_param( ‘ex1_6/Constant2’, ‘FontSize’, 32 )
結果3:フォントサイズを取得、変更できました
ここで、MATLABの「ワークスペース」ウィンドウを見てみると、ansが次のようになっています。 -1 が ‘ などで囲まれていないのがポイントです。
手順4
手順4:MATLABコマンドプロンプトにて、ブロック位置を取得してから、これを変更します
>> get_param( ‘ex1_6/Constant2’, ‘Position’ )
>> set_param( ‘ex1_6/Constant2’, ‘Position’, [ 50, 50, 100, 100 ] )
結果4:ブロック位置を取得、変更できました
ここで、MATLABの「ワークスペース」ウィンドウを見てみると、ansが次のようになっています。 数字が [ ]で囲まれているのがポイントです。
手順3~4のふりかえり
パラメータ FontSize, Position ともに、 ‘ では囲まれていませんでした。これはMATLABの「数値型」です。
FontSizeは最初 -1 で、これを 32 に変更しました。 -1 というのは「デフォルトのサイズですよ」という特殊な値です。これを32にすることでフォントサイズを大きくする事ができました。
Positionは、[ 35, 24, 65, 65 ] という、数字が [ ] で囲まれた形になっています。これは、MATLABの数値型の一種です。数値を [ ] で囲うことによって、行列型にすることができます。ブロック位置は、「左端」「上端」「右端」「下端」という4つの座標が必要なため、数値が4つ必要になります。
全体のふりかえり
今回の手順で、「ブロック名」「ドロップシャドウの表示」「フォントサイズ」「ブロック位置」の4つのパラメータを取得・設定してきました。get_param / set_param を使うという点では一緒ですが、「値」の形が4者4様でした。
どういった形にするべきなのかは、マニュアルを見て判断するしかありません。しかし、だいたいが「文字列」「on/offなど、決まりきった文字列」「数値あるいは配列」で事足りますので、良く分からなければ1つずつ試してみるのもアリです。たとえば、 on / off しか入らないパラメータに変な値をセットしようとすると、次のようにエラーが出ます。
いろいろ試してみて、エラーが出なければ当たりです。
おまけ
どんなパラメータがあるのかを見るのに、いちいちマニュアルを見るのもめんどくさい、という方は次のコマンドを試してみてください。
>> get_param( ブロック名, ‘ObjectParameters’ )
すると、そのブロックの持つパラメータの一覧がざっと表示されます。
まとめ
これまで3回にかけて、Simulink向けMATLABプログラミングの基礎の基礎についてご紹介してきました。
ずーっと色々な事をやってきましたが、結局のところ「パラメータの読み書きをする」というだけの話です。 get_param / set_param さえあれば、結構な事ができそうだというイメージを持っていただけたなら幸いです。
さて、ここまでのお話は最重要事項であり基礎の基礎でした。次回からは、2番目に重要な「Simulinkブロックの検索」についてご説明します。