ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

プログラムによるモデル化の基礎

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_paramPreloadFcn コールバックを使用することで、変数をプログラムで定義することができます。この関数の形式を次に示します。

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_paramposition 配列を使用して、ブロックのサイズと位置を設定します。(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 内の In1Out1 の間の既定の接続を削除します。また、ブロック ライブラリの 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');

プログラムによる信号の名前の設定

  1. 信号線のソースのブロックを選択します。

  2. 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.arrangeSystem(system)
system には、モデル名、ハンドル、またはサブシステムのパスを入力します。まず、Simulink エディターでモデルを開きます。

たとえば、モデル f14 のサブシステム Aircraft Dynamics Model をレイアウトします。

open_system('f14')
Simulink.BlockDiagram.arrangeSystem('f14/Aircraft Dynamics Model')

同じモデルを複数のウィンドウで開く

モデルを開くと、Simulink エディターのウィンドウにそのモデルが表示されます。たとえば、1 つのモデルが開いている場合、2 番目のモデルを開くと、そのモデルは 2 番目のウィンドウに表示されます。

同じモデルを 2 つの Simulink エディター ウィンドウに表示するには、MATLAB コマンド プロンプトで、window 引数を使用して open_system コマンドを入力します。たとえば、vdp モデルを開いている状態で vdp モデルのインスタンスをもう 1 つ開くには、次のコマンドを入力します。

open_system('vdp','window')

Simulink 識別子の取得

モデルのブロックにはそれぞれ Simulink 識別子 (SID) が割り当てられます。この識別子は一意であり、変更することはできません。SID はオブジェクトが存続している限り変更されることはなく、モデルに保存されます。オブジェクトの名前を変更した場合も SID は変更されません。SID は model_name:number という形式で指定されます。詳細については、Simulink 識別子を使用したブロック線図コンポーネントの検索を参照してください。

Simulink 識別子を使用したブロック線図コンポーネントの検索

Simulink 識別子 (SID) は、Simulink ブロック、モデルの注釈または Stateflow® チャート内の Stateflow オブジェクトに自動的に割り当てられた一意の指定です。SID によって、特にチーム内でモデルを共有する際に、ブロック線図でのこれらのコンポーネントの特定のインスタンスを特定しやすくなります。

コンポーネントをモデル内で視覚的に強調表示するには、SID を取得してそれを関数 Simulink.ID.hilite で使用します。

SID には以下の特性があります。

  • Simulink ブロック、モデル注釈または Stateflow オブジェクトが存在する間、変化することがありません

  • モデル ファイルに保存されます

  • ブロック名またはオブジェクト名が変更されても同じままです

  • 変更できません

SID の形式は以下のとおりです。

model_name:sid_number

  • model_name はブロック、注釈または Stateflow オブジェクトが格納されたモデル名です。

  • sid_number はモデル内で Simulink によって割り当てられる一意の番号です。

ブロックを強調表示

  1. vdp モデルを開くために、MATLAB コマンド プロンプトで「vdp」と入力します。

  2. Mu ブロックの SID を取得します。

    Simulink.ID.getSID('vdp/Mu')
    ans =
    
    vdp:4
    
    
  3. SID を使用してブロックを強調表示します。

    Simulink.ID.hilite('vdp:4')

    以下のように、モデルでブロックが強調表示されます。

注釈を強調表示

  1. モデル vdp を開きます。

  2. ブロック線図の上部にある注釈を選択します。

  3. 選択した注釈の annotation オブジェクトを取得します。

    ann = getSelectedAnnotations('vdp')
    ann =
    
    Simulink.Annotation
    
    
  4. 注釈の SID を取得します。

    ann.SIDFullString
    ans =
    
    vdp:13
    
    
  5. SID を使用して注釈を強調表示します。

    Simulink.ID.hilite('vdp:13')

    以下のように、注釈がモデルで強調表示されます。

Stateflow オブジェクトの強調表示

  1. モデル sf_resolve_signal_object を開きます。

  2. 以下のように、Signal Object Chart の Stateflow オブジェクトの SID を取得します。

    Simulink.ID.getSID('sf_resolve_signal_object/Signal Object Chart')
    
    ans =
    
    sf_resolve_signal_object:1
    
    

  3. SID を使用してオブジェクトを強調表示します。

    Simulink.ID.hilite('sf_resolve_signal_object:1')

    オブジェクトがモデルで強調表示されます。

プログラミングでの色の指定

MATLAB コマンド ラインで、または MATLAB プログラムで、set_param コマンドを使用すると、ブロック線図の背景色とブロック線図の要素の背景色および前景色を定義するパラメーターを設定できます。次の表は、ブロック線図の色を制御するパラメーターをまとめたものです。

パラメーター決定する対象

ScreenColor

ブロック線図の背景

BackgroundColor

ブロックおよび注釈の背景

ForegroundColor

ブロックおよび注釈の前景

色パラメーターを名前のついた色または RGB 値に設定します。

  • 名前の付いた色: 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'gray', 'lightBlue', 'orange', 'darkGreen'

  • RGB 値: '[r,g,b]'

    ここで、rg および b は、0.0 から 1.0 の範囲に正規化された色の赤、緑および青成分です。

たとえば、次のコマンドは現在選択してあるシステムまたはサブシステムの背景色を薄い緑色に設定します。

set_param(gcs,'ScreenColor','[0.3, 0.9, 0.5]')

参考

| | | | | | | | | |

関連するトピック