Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

setExternalInput

Simulink.SimulationInput オブジェクトを使用して構成されたシミュレーションにおける最上位の入力端子の外部入力データを指定する

説明

simIn = setExternalInput(simIn,inData) は、Simulink.SimulationInput オブジェクト simIn 内のシミュレーション構成に外部入力データ inData を追加します。外部入力データが指定されている SimulationInput オブジェクトを使用してシミュレーションを実行すると、[入力] モデル コンフィギュレーション パラメーターが選択され、inData として読み込む入力データが指定されます。

この関数を使用して、モデルの最上位の入力端子を使用して読み込む外部入力データを指定します。

すべて折りたたむ

関数 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 オブジェクトとして指定します。

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

モデルに複数の最上位の入力端子が含まれている場合は、すべての最上位の入力端子のデータを含む単一の変数を使用して、すべての入力端子のデータを指定します。変数として読み込む外部入力データを指定すると、変数内のデータが SimulationInput オブジェクトに追加され、ローカル ワーカーやリモート ワーカーでのシミュレーションなど、そのオブジェクトを使用して実行する任意のシミュレーションでそのデータを使用できるようになります。

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

  • Simulink.SimulationData.DatasetDataset オブジェクトの各要素は、最上位の入力端子の入力データを示します。

  • Simulink.SimulationData.DatasetRef — MAT ファイルに保存されている Dataset オブジェクトからデータがストリーミングされます。

  • 時間付きまたは時間なしの構造体 — 入力構造体の signals フィールドの各構造体は、最上位の入力端子の入力データを示します。

  • 配列 — 最初の列は、すべての信号の時間データを示します。後続の各列は、最上位の入力端子のスカラー信号値を示します。

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

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

  • timeseries

  • timetable

    各 timetable オブジェクトには、単一信号のデータを含む 1 つの列が含まれている必要があります。

  • 時間付きまたは時間なしの構造体 — この場合、構造体は 1 つの入力端子の入力データのみを定義します。

  • 配列 — この場合、配列は 1 つの入力端子の入力データのみを定義します。

詳細については、ルート レベルの入力端子へのデータの読み込みを参照してください。

コンマ区切りリスト

Simulink.SimulationInput オブジェクトの入力データをコンマ区切りリストとして指定する方法は、一般的に推奨されません。

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

出力引数

すべて折りたたむ

外部入力が追加されたシミュレーションの構成。Simulink.SimulationInput オブジェクトとして返されます。

ヒント

  • ワークスペースから読み込むデータを指定するパラメーターをもつブロックで読み込む入力データを指定するには、ブロック パラメーター値を変数として指定します。次に、関数 setVariable を使用して、SimulationInput オブジェクトで表されているシミュレーション構成内の変数の値を指定します。

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

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

バージョン履歴

R2017a で導入