【MATLAB/Simulink】スクリプトでモデル内のブロックを検索

Simulinkで作成したモデル内 の入出力一覧を出したいというようなシーンはよくあるかと思いますが、スクリプトによるブロック検索を知っているとそのような作業の効率が飛躍的に向上します。

ここではSimulinkで作成したモデル内に存在するブロックをMATLABスクリプトを用いて検索する方法をご紹介します。

ここで紹介していることはブロック検索の基本ですがモデルのブロック検索についてはここに書いてあることで大体のことは実現できるかと思います。

スポンサーリンク

サンプルモデル

ここでは以下のモデルの検索を行ってみたいと思います。

例:今開いているモデルの中に存在する入力ポートのパスを出力

モデルのブロック検索にはfind_system関数を使用します。検索したいモデルを開いた状態で以下のコマンドをコマンドウインドウ上に入力して実行します。

find_system(gcs, 'BlockType', 'Inport')

上記コマンドは

今開いているサブシステムのInportブロックを検索

という意味になります。

※「gcs」は現在開いているサブシステムのパスを返すコマンド

実行すると以下のようにモデルに存在するInportブロックのパスが表示されます。

例:今開いているモデルの中に存在する入力ポートの名前をリストアップ

Inportブロックのパスではなく名前を取得する場合はfind_system関数とget_param関数を組み合わせます。

まず先ほどのようにfind_system関数を実行しますが、その際以下のように変数にパス一覧が格納されるようにします。

blockList = find_system(gcs, 'BlockType', 'Inport')

上記を実行すると変数blockListにInportブロックのパスが格納されます。その後以下のコマンドを実行します。

nameList = get_param(blockList, 'Name')

上記コマンドは

指定したブロック(blockListに格納されているブロック)の名前情報を取得

という意味になります。

これを実行結果は以下の通りです。

Inportブロックの名前が無事取得できました。

取得した名前をエクセルなどにコピー

コマンドを実行するとワークスペースに変数が作成されます。先ほどの例であればnameListという変数が作られていると思いますので、それをダブルクリックします。

そうすると以下のようなエクセルライクなエディタが表示されるので、セルを選んで文字列をコピーすることができます。

get_param関数で取得できる情報について

get_param関数は名前だけでなく、ブロックが持っている様々な情報を取得することができます。例えばポート番号を取得したい場合は以下コマンドになります。

nameList = get_param(blockList, 'Port')

ブロックがどのような情報を持っているか手っ取り早く調べるには

ブロック選択

ブロックを上記のように選択した状態で

get(gcbh)

とコマンドを打てばそのブロックが持っている情報を全てコマンドプロンプト上に出力することができます。

出力結果

ここに表示されているものがget_param関数で検索できる情報となります。

タイトルとURLをコピーしました