プログラムによるモデル化の基礎
モデルの作成、モデルへのブロックの追加、パラメーターの設定など、Simulink® の基本的なモデル化操作のほとんどは MATLAB® コマンド ウィンドウでプログラムを使用して実行することができます。ここでは、それらのうちの一部のコマンドとそれらのコマンドの使用方法について説明します。
モデルの読み込み
モデルを読み込むと、モデルがメモリに格納されますが、Simulink エディターで編集用には開きません。モデルを読み込んだ場合は、モデルをプログラムで操作できます。Simulink エディターを使用してモデルを編集できるのは、モデルを開いた場合だけです。
システムを読み込むには、load_system コマンドを使用します。
たとえば、MATLAB パス上に myModel という名前のモデルがあるとします。モデルを読み込むには、MATLAB コマンド ウィンドウで次のコマンドを入力します。
load_system('myModel')モデルの作成とパラメーター設定の指定
モデルを作成して目的の設定を指定する関数を記述することができます。たとえば、次の関数では、背景が緑色で ode3 ソルバーを使用するモデルが作成されます。
function new_model(modelname) % NEW_MODEL Create a new, empty Simulink model % NEW_MODEL('MODELNAME') creates a new model with % the name 'MODELNAME'. Without the 'MODELNAME' % argument, the new model is named 'my_untitled'. if nargin == 0 modelname = 'my_untitled'; end % create and open the model open_system(new_system(modelname)); % set default screen color set_param(modelname,'ScreenColor','green'); % set default solver set_param(modelname,'Solver','ode3'); % save the model save_system(modelname);
モデルを開く際のプログラムによる変数の読み込み
ブロック パラメーターの値として変数を割り当てる場合、モデルで変数の値を定義しなければなりません。関数 set_param で PreloadFcn コールバックを使用することで、変数をプログラムで定義することができます。この関数の形式を次に示します。
set_param('mymodel','PreloadFcn','expression')
expression は MATLAB の検索パスにある MATLAB コマンドまたは MATLAB スクリプトです。このコマンドにより、指定した値にモデルの PreloadFcn コールバックが設定されます。モデルを保存すると設定が保存されます。
たとえば、MATLAB スクリプト loadvar.m でモデル modelname.slx に対する変数を定義する場合は、次のコマンドを使用します。
set_param('modelname','PreloadFcn','loadvar')
K に値 15 を割り当てるには、次のコマンドを使用します。
set_param('modelname','PreloadFcn','K=15')
モデルを保存すると、次にモデルを開いたときに PreloadFcn コールバックが実行されます。
プログラムによるブロックの追加と接続
この例では、関数を使用してブロックの追加やブロックの接続をプログラムで行う方法について示します。
"mymodel" という名前の空のモデルを作成して開きます。
new_system('mymodel'); open_system('mymodel');
add_block 関数を使用してブロックを追加します。
sine1 = 'mymodel/Sine1'; pulse1 = 'mymodel/Pulse1'; subsystem1 = 'mymodel/Subsystem1'; scope1 = 'mymodel/Scope1'; add_block('simulink/Sources/Sine Wave',sine1); add_block('simulink/Sources/Pulse Generator',pulse1); add_block('simulink/Ports & Subsystems/Subsystem',subsystem1); add_block('simulink/Sinks/Scope',scope1);
ブロック名が常に表示されるようにします。
set_param('mymodel',HideAutomaticNames="off");
Subsystem1 の内容を削除します。
Simulink.SubSystem.deleteContents('mymodel/Subsystem1');Subsystem1 内に Add ブロックを挿入します。
add1 = 'mymodel/Subsystem1/Add1'; add_block('simulink/Math Operations/Add',add1);
次に、モデル内のすべてのブロックを接続する線を追加します。Simulink.connectBlocks 関数を使用して Add1 を Scope1 に接続することから始めます。これらの 2 つのブロックを接続する方法は 1 つしかないため、関数の入力引数で接続する端子を指定する必要はありません。その代わりに、ブロック パスを指定するだけで済みます。
Simulink.connectBlocks(add1,scope1)
Sine1 を Add1 の最上位の入力端子に接続します。特定の端子を接続するには、接続する端子を関数の入力引数で指定する必要があります。接続する端子のハンドルを取得します。ブロックごとに、get_param 関数を使用してブロックのすべての端子のハンドルを取得します。その後、ドット表記と端子名を使用して、接続する端子のハンドルを抽出します。
allPortsSine = get_param(sine1,'PortHandles') srcPort = allPortsSine.Outport allPortsAdd = get_param(add1,'PortHandles') dstPort = allPortsAdd.Inport(1) Simulink.connectBlocks(srcPort,dstPort);
同じ方法を使用して、Pulse1 を Add1 の最下位の端子に接続します。
allPortsPulse = get_param(pulse1,'PortHandles');
srcPort = allPortsPulse.Outport;
dstPort = allPortsAdd.Inport(2);
Simulink.connectBlocks(srcPort,dstPort);モデルを自動調整します。
Simulink.BlockDiagram.arrangeSystem('mymodel')サブシステムを自動調整します。
Simulink.BlockDiagram.arrangeSystem('mymodel/Subsystem1')プログラムによるブロックのコメントアウトまたはコメントスルー
コメント化されたブロックの状態をプログラムで表示または変更するには、get_param コマンドと set_param コマンドを使用します。
コメント化されたブロックの状態を表示:
get_param(gcb,'commented');ブロックをコメントアウト:
set_param(gcb,'commented','on');ブロックをコメントスルー:
set_param(gcb,'commented','through');ブロックをコメント解除:
set_param(gcb,'commented','off');
プログラムによる信号の名前の設定
出力端子が信号線に接続されているブロックを選択します。
get_paramを使用して、現在選択しているブロックの端子ハンドルを変数 p に代入します。get_paramを使用して、その端子に接続されたラインのハンドルを変数 l に代入します。その後、信号線の名前を's9'に設定します。
p = get_param(gcb,'PortHandles') l = get_param(p.Outport,'Line') set_param(l,'Name','s9')
モデル レイアウトの自動調整
Simulink.BlockDiagram.arrangeSystem コマンドを使用して、モデルをレイアウトできます。このコマンドは、入力ブロックを左側、出力ブロックを右側、モデル要素を入力と出力の間の列に並べます。このコマンドは、一度に 1 つの層のみに影響します。
Simulink.BlockDiagram.routeLine コマンドを使用して、モデルの既存のラインをルーティングできます。既存のラインをルーティングすることで、ラインのルートの品質が向上し、ラインがモデル内の他のラインや障害物とオーバーラップすることを回避できます。
このコマンドは開かれている任意のモデルで使用できますが、プログラムによってビルドしたモデルで特に役立ちます。例については、プログラムによって入力されたモデルの調整を参照してください。
同じモデルを複数のウィンドウで開く
モデルを開くと、Simulink エディターのウィンドウにそのモデルが表示されます。たとえば、1 つのモデルが開いている場合、2 番目のモデルを開くと、そのモデルは 2 番目のウィンドウに表示されます。
同じモデルを 2 つの Simulink エディター ウィンドウに表示するには、MATLAB コマンド プロンプトで、window 引数を使用して open_system コマンドを入力します。たとえば、modelName というモデルを開いている状態で modelName のインスタンスをもう 1 つ開くには、次のように入力します。
open_system('modelName','window')
モデルのインデックス付けと検索、およびモデルの見つけやすさの向上のためのモデル ファインダーの使用
関数 modelfinder を使用して、複数のデータベースで例、モデル、およびプロジェクトを検索できます。既定では、modelfinder は MathWorks® Examples データベースを検索します。データベースをモデル ファインダーで構成することもできます。モデル ファインダーの詳細については、Configure, Share, and Search Databasesを参照してください。
強調表示を使用したブロック線図要素の特定
開いているモデル内のブロック、ライン、端子または注釈を強調表示するには、hilite_system を使用します。
プログラミングでの色の指定
MATLAB コマンド ラインで、または MATLAB プログラムで、set_param コマンドを使用すると、ブロック線図の背景色とブロック線図の要素の背景色および前景色を定義するパラメーターを設定できます。次の表は、モデルの色を制御するパラメーターをまとめたものです。
| パラメーター | 決定する対象 |
|---|---|
| モデルの背景 |
| ブロックおよび注釈の背景 |
| ブロックおよび注釈の前景 |
色パラメーターを名前のついた色または RGB 値に設定します。
名前の付いた色:
'automatic','black','white','red','green','blue','cyan','magenta','yellow','gray','lightBlue','orange','darkGreen'RGB 値:
'[r,g,b]'ここで、
r、gおよびbは、0.0から1.0の範囲に正規化された色の赤、緑および青成分です。
たとえば、次のコマンドは現在選択してあるシステムまたはサブシステムの背景色を薄い緑色に設定します。
set_param(gcs,'ScreenColor','[0.3, 0.9, 0.5]')
参考
load_system | open_system | new_system | save_system | Simulink.connectBlocks | delete_line | add_block | delete_block | set_param | get_param | gcb | Simulink.BlockDiagram.routeLine | hilite_system