このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
プログラムによるモデル化の基礎
モデルの作成、モデルへのブロックの追加、パラメーターの設定など、Simulink® の基本的なモデル化操作のほとんどは MATLAB® コマンド ウィンドウでプログラムを使用して実行することができます。ここでは、それらのうちの一部のコマンドとそれらのコマンドの使用方法について説明します。
モデルの読み込み
モデルを読み込むと、モデルがメモリに格納されますが、Simulink エディターで編集用には開きません。モデルを読み込んだ場合は、モデルをプログラムで操作できます。Simulink エディターを使用してモデルを編集できるのは、モデルを開いた場合だけです。
システムを読み込むには、load_system
コマンドを使用します。たとえば、vdp
モデルを読み込むには、MATLAB コマンド プロンプトで次のように入力します。
load_system('vdp')
モデルの作成とパラメーター設定の指定
モデルを作成して目的の設定を指定する関数を記述することができます。たとえば、次の関数では、背景が緑色で 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
コールバックが実行されます。
プログラムによるブロックの追加と接続
この例では、関数を使用してブロックの追加やブロックの接続をプログラムで行う方法について示します。モデルにブロックを追加した後で、ルーティング指定ライン、端子ハンドル、端子 ID の 3 つの異なる方法を使用してそれらを接続します。ルーティング指定ラインは、すべての接続線セグメントのエンドポイントの正確な (x,y) 座標を指定できます。端子ハンドルと端子 ID は、端子位置の座標を知らなくても接続線をブロック端子に接続できます。
'mymodel
' という名前の空のモデルを作成して開きます。
ブロックを追加します (サブシステム ブロックを含む)。関数 set_param
で position
配列を使用して、ブロックのサイズと位置を設定します。(x,y) 座標を使用してブロックの左上隅と右下隅を設定します。
add_block('simulink/Sources/Sine Wave','mymodel/Sine1'); set_param('mymodel/Sine1','position',[140,80,180,120]); add_block('simulink/Sources/Pulse Generator','mymodel/Pulse1'); set_param('mymodel/Pulse1','position',[140,200,180,240]); add_block('simulink/Ports & Subsystems/Subsystem','mymodel/Subsystem1'); set_param('mymodel/Subsystem1','position',[315,120,395,200]); add_block('simulink/Sinks/Scope','mymodel/Scope1'); set_param('mymodel/Scope1','position',[535,140,575,180]);
Subsystem1
内の In1
と Out1
の間の既定の接続を削除します。また、ブロック ライブラリの In1
をコピーして名前を変更することにより、2 番目の入力端子を追加します。
delete_line('mymodel/Subsystem1','In1/1','Out1/1'); add_block('simulink/Sources/In1','mymodel/Subsystem1/In2');
Subsystem1
内の内部入力端子ブロックと内部出力端子ブロックの位置を変更します。
set_param('mymodel/Subsystem1/In1','position',[50,50,90,70]); set_param('mymodel/Subsystem1/In2','position',[50,130,90,150]); set_param('mymodel/Subsystem1/Out1','position',[500,80,540,100]);
Subsystem1
内に Add
ブロックを挿入して配置します。
add_block('simulink/Math Operations/Add','mymodel/Subsystem1/Add1'); set_param('mymodel/Subsystem1/Add1','position',[250,80,290,120]);
次に、モデル内のすべてのブロックを接続する線を追加します。ルーティング指定ラインを使用して Sine1
ブロックと Pulse1
ブロックを接続することから始めます。
Sine1
出力端子の (x,y) 座標を調べます。
Sine1_Port = get_param('mymodel/Sine1','PortConnectivity')
Sine1_Port = struct with fields: Type: '1' Position: [185 100] SrcBlock: [] SrcPort: [] DstBlock: [1×0 double] DstPort: [1×0 double]
get_param
は、端子の位置が [185 100] であることを示しています。
Pulse1
出力端子の (x,y) 座標を調べます。
Pulse1_Port = get_param('mymodel/Pulse1','PortConnectivity')
Pulse1_Port = struct with fields: Type: '1' Position: [185 220] SrcBlock: [] SrcPort: [] DstBlock: [1×0 double] DstPort: [1×0 double]
get_param
は、端子の位置が [185 220] であることを示しています。
ルーティング指定ラインの 3 つのセグメントを使用して、Sine1
の出力を Subsystem1
の最初の入力に接続します。
add_line('mymodel', [185 100; 275 100]); add_line('mymodel', [275 100; 275 140]); add_line('mymodel', [275 140; 310 140]);
ルーティング指定ラインの 3 つのセグメントを使用して、Pulse1
の出力を Subsystem1
の 2 番目の入力に接続します。
add_line('mymodel', [185 220; 275 220]); add_line('mymodel', [275 220; 275 180]); add_line('mymodel', [275 180; 310 180]);
get_param
を使用して接続するブロック端子のハンドルを取得します。次にブロック端子のハンドルを使用して Subsystem1
の出力を Scope1
の入力に接続します。
SubsysPortHandles = get_param('mymodel/Subsystem1','PortHandles'); ScopePortHandles = get_param('mymodel/Scope1','PortHandles'); add_line('mymodel',SubsysPortHandles.Outport(1),... ScopePortHandles.Inport(1));
端子名と端子 ID を使用して Subsystem1
内の Add1
ブロックをサブシステムの入力および出力と接続します。Simulink は端子の接続に最も直接的なパスを使用します。
add_line('mymodel/Subsystem1','In1/1','Add1/1'); add_line('mymodel/Subsystem1','In2/1','Add1/2'); add_line('mymodel/Subsystem1','Add1/1','Out1/1');
プログラムによるブロックのコメントアウトまたはコメントスルー
コメント化されたブロックの状態をプログラムで表示または変更するには、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
コマンドを入力します。たとえば、vdp
モデルを開いている状態で vdp
モデルのインスタンスをもう 1 つ開くには、次のコマンドを入力します。
open_system('vdp','window')
強調表示を使用したブロック線図要素の特定
開いているモデル内のブロック、ライン、端子または注釈を強調表示するには、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
| add_line
| delete_line
| add_block
| delete_block
| set_param
| get_param
| gcb
| Simulink.BlockDiagram.routeLine
| hilite_system