Simulink API (3) モデルの主要3要素


Simulink モデルの主要3要素

find_systemを使い倒す前に、Simulink モデル(以下モデル)を構成しているオブジェクトを抑えておく必要があります。

今回は、その中でもモデルの "振る舞い" に影響する重要な3つのオブジェクトを挙げます。
この3つのオブジェクトの関係性を理解することは、find_system関数の後に説明するget_param/set_param関数を使うときに非常に効力を発揮します。

  1. Block (Simulinkブロック)
  2. Port (Simulinkブロックの入出力口)
  3. Line (Simulinkブロック同士を接続する信号線)

何れも、名称(ラベル) を付与することができ、固有のハンドル値を持っています。
このハンドル値を使い、MATLABのプログラムを作成することが多いと思います。

次のモデルを例に、これら3つのハンドル取得を例示します。
今回ご紹介するハンドルを取得するだけでは、具体的に何か出来るわけではありませんが、
今回の記事の目的は、「モデルの構成要素が何かと、リスト方法を理解すること。」に留めます。

1. Block

Inport, Outport, UnitDelay, Gain, Add, ... などオプションのブロックセットを含めると数百種類はあると思います。ブロックはその種別により 'BlockType' という固有のプロパティ値を持っています。
モデル内のブロックハンドルをリストするには、find_system関数を使います。

qiita.matlab
blockHandle = find_system('myModel', 'FindAll', 'on', 'type', 'block')
blockHandle =

   1.0e+03 *

    4.0510
    4.0550
    4.0590

2. Port

Simulinkブロックには、入力、出力ポートを持っています。
ブロック種別によっては、イネーブル、リセット、トリガー、Ifアクションなどの特殊なポートを持つものもあります。

モデル内のポートハンドルをリストするには、find_system関数を使います。
Inportブロックの出力ポート1つ
Gainブロックの入力ポート1つ
Gainブロックの出力ポート1つ
Outportブロックの入力ポート1つ
計4つのポートがモデル内に存在します。

qiita.matlab
portHandle = find_system(gcs,'FindAll','on','type','port')
portHandle =

   1.0e+03 *

    4.0520
    4.0560
    4.0570
    4.0600

3. Line

Simulinkブロック同士を接続する信号線です。
信号線は、スカラ、ベクトル、バスといった種別があり、バス信号は信号線の入れ子構造(階層化)が可能です。
また、モデル上で信号線が分岐した場合、信号線オブジェクトに親子関係が作られます。
信号線の階層は少しだけ難しい話になるので、もう少し先に話をします。
(今回の記事の目的は、「モデルの構成要素を理解する」に留めます。ということでご容赦ください)

qiita.matlab
lineHandle = find_system(gcs,'FindAll','on','type','line')
lineHandle =

   1.0e+03 *

    4.0620
    4.0610

まとめ

  1. モデルを構成する主要3オブジェクトは、Block、Port、Lineです。
  2. 3オブジェクトのハンドル値は、何れもfind_system関数で取得できます。