Main Content

setExternalInput

SimulationInput オブジェクトまたは Simulation オブジェクトを使用して、最上位の入力端子の外部入力データを指定する

説明

s = setExternalInput(s,indata) は、Simulink.SimulationInput オブジェクトまたは Simulation オブジェクトの s で外部入力データ indata を指定します。SimulationInput オブジェクトまたは Simulation オブジェクトで外部入力データを指定することは、そのオブジェクトを使用して実行するシミュレーションで [入力] パラメーターを構成することと等価です。モデルは初期化中に変更され、指定した外部入力データが読み込まれます。シミュレーションが完了すると、変更は元に戻ります。

最上位の入力端子で読み込むデータを指定することに加えて、関数 setExternalInput は以下を行います。

  • 必要に応じて、LoadExternalInput パラメーターおよび ExternalInput パラメーターを指定する

  • 外部入力データを含む変数がシミュレーションで確実に使用できるようにする

シミュレーション用の外部入力データの読み込みに関するこれらの側面を明示的に管理するために、関数 setModelParameter または setVariable を使用する必要はありません。

すべて折りたたむ

関数 setExternalInput を使用して、Simulink.SimulationInput オブジェクトに保存されているシミュレーション構成の外部データを指定します。次に、関数 setBlockParameter を使用して、入力データを連続信号として読み込むように Inport ブロックを構成します。最後に、Simulink.SimulationInput オブジェクトを使用してシミュレーションを実行します。

モデル LoadInputData を開きます。モデルには、[ゲイン] 値が 2 の Gain ブロックに接続されている 1 つの Inport ブロックが含まれています。Gain ブロックの出力が Outport ブロックに接続されています。

mdl = "LoadInputData";
open_system(mdl)

The model LoadInputData

モデルの Simulink.SimulationInput オブジェクトを作成します。

simIn = Simulink.SimulationInput(mdl);

Inport ブロックを使用して読み込む入力データを作成します。この例では、時間値の等間隔のベクトルを使用して正弦波を表すデータを作成します。次に、関数 sin を使用して各時点の信号値を作成します。

sampleTime = 0.1;
numSteps = 100;
time = sampleTime*(0:numSteps);
time = time';

data = sin(2*pi/3*time);

複数の形式を使用して、最上位の入力端子の外部入力データを指定できます。この例では、timetable 形式を使用します。timetable を作成するには、時間データが duration ベクトルでなければなりません。関数 seconds を使用して、秒を単位とする duration ベクトルを作成します。次に、timetable を作成します。

secs = seconds(time);
inData = timetable(secs,data);

関数 setExternalInput を使用して、Simulink.SimulationInput オブジェクト simIn 内のシミュレーション構成に外部入力データ inData を追加します。

simIn = setExternalInput(simIn,inData);

Simulink.SimulationInput オブジェクトを使用して、ブロック パラメーター値、モデル コンフィギュレーション パラメーター値、変数値など、シミュレーションの他の側面を構成することもできます。

入力データを連続信号として読み込むように Inport ブロックを構成するとします。関数 setBlockParameter を使用して、[内挿] パラメーターを有効にし、ブロックの [サンプル時間] パラメーターを連続 (0) として指定します。

inBlk = mdl + "/Inport";
simIn = setBlockParameter(simIn,inBlk,"Interpolate","on");
simIn = setBlockParameter(simIn,inBlk,"SampleTime","0");

SimulationInput オブジェクトのコンフィギュレーションを使用してモデルをシミュレートします。

out = sim(simIn);

シミュレーションが実行され、入力データが連続信号として読み込まれます。

A Dashboard Scope block displays the output from the Gain block.

モデルに複数の最上位の入力端子が含まれている場合、各入力端子のデータをもつ要素を含む Simulink.SimulationData.Dataset オブジェクトとして読み込む入力データを指定できます。オブジェクトの最初の要素には端子番号 1 の入力端子のデータが含まれ、2 番目の要素には端子番号 2 の入力端子のデータが含まれるといったようになります。

データを含む変数を使用して読み込むデータを指定すると、指定した変数内のデータが Simulink.SimulationInput オブジェクトに追加されます。これにより、そのデータは、そのオブジェクトを使用して実行されるシミュレーションで使用できるようになります。

次の例では、SimulationInput オブジェクトを使用して構成されたシミュレーションに、3 つの最上位の入力端子のデータを読み込む方法を示します。各入力端子の入力データでは、使用可能な複数の形式を示すために異なる形式を使用しています。

モデル InportLoading を開きます。モデルには、3 つの Outport ブロックに直接接続された 3 つの Inport ブロックが含まれています。

mdl = "InportLoading";
open_system(mdl)

The model InportLoading.

関数 createInputDataset を使用して、モデルの各入力端子の要素を格納する Dataset オブジェクトを作成します。

inDS = createInputDataset(mdl);

既定では、関数 createInputDataset で作成された Dataset オブジェクトには、要素ごとにプレースホルダー timeseries オブジェクトが含まれます。各入力端子の入力データを作成して、プレースホルダー データを置き換えます。

最初の入力端子では、勾配が 0.5 のラインを表すデータをもつ timeseries オブジェクトを作成します。時間データで、サンプル時間 (間隔) として 0.5 を使用して、等間隔の時間ベクトルを作成します。信号値を作成するために、時間ベクトルに 0.5 を乗算します。

sampleTime = 0.5;
numSteps = 20;
time = sampleTime*(0:numSteps)';

data = 0.5*time;

lineTS = timeseries(data,time);

2 番目の入力端子で、正弦波を表すデータをもつ timetable を作成します。

  1. 正弦波で、サンプル時間として 0.1 を使用して、等間隔の時間ベクトルを作成します。

  2. 信号値を作成するために、関数 sin を使用します。

  3. timetable を作成するには、時間入力が duration ベクトルでなければなりません。関数 seconds を使用して、時間値を秒単位の duration ベクトルに変換します。

  4. timetable を作成します。

sampleTime = 0.1;
numSteps = 100;
time = sampleTime*(0:numSteps)';

sinVals = sin(2*pi/3*time);

secs = seconds(time);
sinTT = timetable(secs,sinVals);

3 つ目の入力端子で、値 3 の定数のデータを含む構造体を作成します。入力データの読み込みのために、構造体の形式にフィールド timesignals が含まれています。signals フィールドは構造体の配列です。各構造体のフィールド values 内に、信号のデータが含まれています。この例では、構造体で 1 つの入力端子の入力データが指定されているため、配列 signals の要素は 1 つだけです。

constStruct.time = [0 10]';
constStruct.signals.values = [3 3]';

プレースホルダー データを、各入力端子に作成したデータに置き換えます。

inDS{1} = lineTS;
inDS{2} = sinTT;
inDS{3} = constStruct;

Simulink.SimulationInput オブジェクトを作成してモデルのシミュレーションを構成します。

simIn = Simulink.SimulationInput(mdl);

関数 setExternalInput を使用し、Dataset オブジェクトを使用して 3 つすべての入力端子で読み込む入力データを指定します。関数は変数 inDsSimulationInput オブジェクトに追加します。

simIn = setExternalInput(simIn,inDS);

SimulationInput オブジェクトを使用してモデルをシミュレートします。

out = sim(simIn);

シミュレーションが実行され、SimulationInput オブジェクトで指定した入力データが読み込まれます。

A Dashboard Scope block displays the signals produced by the Inport blocks.

入力引数

すべて折りたたむ

最上位の入力端子で外部入力データを指定するシミュレーション仕様またはシミュレーション。Simulink.SimulationInput オブジェクトまたは Simulation オブジェクトとして指定します。

SimulationInput オブジェクトは、シミュレーションで使用する初期状態、外部入力、モデル パラメーター値、ブロック パラメーター値、変数値など、シミュレーションの仕様を表します。最初の入力引数を SimulationInput オブジェクトとして指定した場合、戻り引数として SimulationInput オブジェクトを指定する必要があります。

Simulation オブジェクトはシミュレーションを表し、シミュレーションを制御および操作するためのインターフェイスを提供します。最初の入力引数を Simulation オブジェクトとして指定した場合、戻り引数として Simulation オブジェクトを指定することはオプションです。

例: simin = setExternalInput(simin,indata) は、SimulationInput オブジェクト simin に保存されているシミュレーション構成に外部入力データ indata を追加します。

例: sm = setExternalInput(sm,indata) は、外部入力データ indata を読み込むように、Simulation オブジェクト sm によって表されたシミュレーションの最上位の入力端子を構成します。

最上位の入力端子の外部入力データ。[入力] パラメーターでサポートされている形式を使用して指定します。

モデルに複数の最上位の入力端子が含まれている場合は、すべての最上位の入力端子のデータを含む単一の変数を使用して、すべての入力端子のデータを指定します。読み込む外部入力データを変数として指定すると、関数 setExternalInput は変数とその変数に含まれるデータを SimulationInput オブジェクトまたは Simulation オブジェクトに追加します。

次のような複数の形式を使用して、すべての最上位の入力端子の入力データを 1 つの変数に保存できます。

変数内の信号データの順序と端子番号に基づいて、変数内の信号データが最上位の各入力端子にマッピングされます。たとえば、Dataset オブジェクトの最初の要素は、端子番号 1 の最上位の入力端子にマッピングされます。

次のような複数の形式を使用して、最上位の各入力端子で読み込むデータの形式を設定できます。

  • timeseries

  • 単一信号のデータを含む 1 つの列が含まれた timetable

サポートされている形式の詳細については、「入力」を参照してください。

例: simin = setExternalInput(simin,indata) は、SimulationInput オブジェクト simin に保存されているシミュレーション構成に外部入力データ indata を追加します。

例: sm = setExternalInput(sm,indata) は、外部入力データ indata を読み込むように、Simulation オブジェクト sm によって表されたシミュレーションの最上位の入力端子を構成します。

メモ

SimulationInput オブジェクトまたは Simulation オブジェクトで入力データをコンマ区切りリストとして指定することは推奨されません。

入力データをコンマ区切りリストとして指定すると、関数 setExternalInput は、データが含まれている変数を SimulationInput オブジェクトまたは Simulation オブジェクトに "追加しません"。ワークスペースでデータを管理するか、関数 setVariable を使用して入力データを含む変数を SimulationInput オブジェクトまたは Simulation オブジェクトに自分で追加することで、実行するシミュレーションで入力データが確実に使用可能になるようにしなければなりません。

出力引数

すべて折りたたむ

入力データを追加または変更したシミュレーション仕様またはシミュレーション。Simulink.SimulationInput オブジェクトまたは Simulation オブジェクトとして返されます。

関数 setExternalInput を使用して SimulationInput オブジェクトで外部入力データを指定した場合、戻り引数として SimulationInput オブジェクトを指定する必要があります。

関数 setExternalInput を使用して Simulation オブジェクトで外部入力データを指定した場合、戻り引数の割り当てはオプションです。

ヒント

  • [入力] パラメーターではなくブロック パラメーターで指定されたデータを読み込むブロック用に外部入力データを指定するには、ブロックの入力データ パラメーターを変数として指定します。次に、関数 setVariable を使用して、SimulationInput オブジェクトまたは Simulation オブジェクトで変数の値を指定します。

    たとえば、From Workspace ブロックで読み込むデータを指定するには、From Workspace ブロックの [データ] パラメーターを変数として指定します。次に、関数 setVariable を使用して、変数の値を指定します。

  • ファイルから入力データを読み込むには、入力データを含むファイルにシミュレーションからアクセスできることを確認してください。関数 parsim および batchsim を使用してシミュレーションを実行すれば、名前と値の引数 AttachedFiles を使用してファイルをワーカーに送信できます。

バージョン履歴

R2017a で導入

すべて展開する