Main Content

ルート レベルの入力端子へのデータの読み込み

データをワークスペースから次のいずれかのブロックを使用してモデル化されたルートレベルの入力端子に読み込むことができます。

  • Inport ブロック

  • Enable ブロック

  • エッジベース (立ち上がり、立ち下がり、または両方) のトリガー タイプをもつ Trigger ブロック

これらのブロックは、[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターの値に基づいたワークスペースからデータをインポートします。

ヒント

多くの信号をルートレベルの入力端子にインポートする場合は、ルート Inport マッパー ツールの使用を検討してください。詳細については、ルート Inport 信号データのマッピングを参照してください。

また、From Workspace ブロックを使用して、ワークスペースからデータをインポートすることができます。詳細は、From Workspace のドキュメンテーションと基本テスト ケース用の入力データの読み込みを参照してください。

入力データの指定

入力データは [入力] コンフィギュレーション パラメーターを使用して手動で指定できます。ルートレベルの入力端子に多数の信号を読み込む場合は、ルート Inport マッパー ツールを使用を検討してください。これにより、このツールを使用してマップするデータが [入力] パラメーターに自動的に指定されます。詳細については、ルート Inport マッパー ツールを使用したデータのマッピングを参照してください。

  1. [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターを選択します。

    メモ

    [入力] コンフィギュレーション パラメーターの使用は、ログ データを保存する際の [形式] コンフィギュレーション パラメーターの設定とは無関係です。

  2. 隣のエディット ボックスに外部入力仕様を入力して、[適用] をクリックします。指定できるデータの形式の一覧については、入力データの形式を参照してください。

[入力] ボックスに、以下のいずれかの方法で信号入力を指定します。

  • MATLAB® 関数 (文字列として表現) または MATLAB 式の入力 u = UT(t) を使用して、シミュレーションのタイム ステップごとに実行時のデータを作成します。

  • 入力データの形式で説明するいずれかの入力データ形式を使用して、直接データを指定します。

コンマ区切りリスト

Dataset データを指定する場合、[入力] パラメーターには 1 つの Dataset オブジェクトのみを指定します。このオブジェクトをコンマ区切りのリストに含めないでください。

各変数または式は、モデル内の特定のルートレベルの入力端子に対応した、該当するオブジェクトとして評価されなければなりません。リストの各変数または式は、該当するオブジェクトとして評価されなければなりません。このオブジェクトは、モデルのルートレベルの入力端子のいずれかに対応します。最初の項目は、最初のルートレベルの入力端子に対応し、2 番目の項目は、2 番目のルートレベルの入力端子に対応します (以下同様)。各データ サンプルは入力ブロック パラメーターで指定したデータの次元と一致しなければなりません。

Enable または Trigger ブロックでは、イネーブル端子またはトリガー端子を駆動する信号は、コンマ区切りリストの最後の項目でなければなりません。イネーブル端子とトリガー端子の両方をもつ場合は、以下のように指定します。

  • イネーブル端子をリストの最後から 2 番目の項目として

  • トリガー端子を最後の項目として

空の行列を使用して、端子に対してグラウンド値を指定します。たとえば、入力端子 in1 および in3 のデータを読み込み、端子 in2 にグラウンド値を使用して、[入力] パラメーターに次を入力します。

in1, [], in3

入力データの形式

入力データは、次の形式で提供できます。

メモ

読み込む timetable データを指定するとき、timetable には 1 つの信号のみのデータを含めなければなりません。

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

入力パラメーターの時間値

[入力] パラメーターで指定する時間値は、ソルバーが使用する時間を制御しません。ソルバーには時間を伝播するための独自のロジックがあり、任意の時間値で入力データが必要になる場合があります。ルートレベルの入力ブロックの [内挿] パラメーター設定 (たとえば、ルートレベルの Inport ブロック) は、対応するワークスペース データが存在しないタイム ステップでの出力の処理方法を指定します。

[入力] パラメーターに指定する時間値をスパースにすることはできません。また、NAN または Inf の値を含めることもできません。

データの読み込み

対応する InportEnable または Trigger ブロックに対して [データを内挿する] オプションを選択すると、Simulink® は、必要に応じて入力値を線形に内挿または外挿します。

Simulink は、記号の解釈の説明のとおりに外部入力仕様で使用される記号を解決します。sim コマンドは、プログラミングによるシミュレーションでのみ使用できる一部のデータ インポート機能を提供します。

matlab.io.datastore.SimulationDatastore オブジェクトを要素として含む Simulink.SimulationData.Dataset オブジェクトを使用する場合、永続ストレージに格納されるデータがファイルからストリーミングされます。詳細については、シミュレーションのためのビッグ データの読み込みを参照してください。

データセット データのルートレベル入力への読み込み

Dataset オブジェクトを [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターの値として使用できます。Dataset オブジェクトを 1 つのみ指定し、コンマ区切りリストには含めないでください。Dataset の要素の数は、ルートレベルの入力端子の数と一致しなければなりません。

データセット要素

Dataset オブジェクトには、さまざまなデータ型の要素を含めることができます。

個々の非バス信号データでは、Dataset 要素に対して次のデータ型を指定できます。

  • timeseries

  • timetable

  • matlab.io.datastore.SimulationDatastore

  • double データの double ベクトルまたは構造体

  • Simulink.SimulationData.SignalSimulink.SimulationData.State または Simulink.SimulationData.DataStoreMemory オブジェクト

  • 次のいずれかの要件を満たす配列

  • 構造体 — データ構造体のルートレベル入力への読み込みを参照してください。

バスの場合は、次のいずれかの形式を使用して、各リーフ信号のデータ要素をもつ構造体を使用します。

  • MATLAB timeseries オブジェクト

  • MATLAB timetable オブジェクト

  • matlab.io.datastore.SimulationDatastore オブジェクト

  • 空行列

  • バス データの構造体に対するこれらの要件と一致する各信号のデータ要素をもつ別の構造体

メモ

読み込む timetable データを指定するとき、timetable には 1 つの信号のみのデータを含むことができます。

Inport ブロックに Dataset オブジェクトを作成

モデル内のルートレベルの Inport ブロックから Simulink.SimulationData.Dataset オブジェクトを生成するには、関数 createInputDataset を使用できます。生成されたデータセットの信号は、モデルの開始時間と停止時間における Inport ブロックのプロパティと対応するグラウンド値をもちます。読み込む信号の時間と値のために、timeseries オブジェクトと timetable オブジェクトを作成できます。他の信号はグラウンド値を使用します。各 timetable オブジェクトには、1 つの信号のみのデータを含めなければなりません。

ワークスペース内に存在する MATLAB timeseries オブジェクトで指定したルートレベルの入力端子データに読み込むことができます。

メモ

MATLAB timeseries データのインポートについて、このドキュメンテーションには、ルートの Inport ブロックの例が含まれています。特に指定がない限り、この例はルートレベルの Enable ブロック、Trigger ブロックおよび From Workspace ブロックに適用できます。

MATLAB timeseries データのルートレベル入力への読み込み

時間の次元

データを Simulink にインポートする MATLAB timeseries オブジェクトを作成する場合、時間の次元 (時間サンプルの数) は信号データの次元とタイプによって異なります。

信号のデータ次元またはデータ型時間の次元の配置timeseries コンストラクターの例

スカラーまたは 1 次元ベクトル

1 次

スカラー信号のコンストラクター。時間は最初の次元に整合されます。

t = (0:10)';
ts = timeseries(sin(t), t);

2 次元 (行ベクトルと列ベクトルを含む) 以上

最後

行列信号のコンストラクター。時間は最後の次元に整合されます。

t = 0;
ts = timeseries([1 2; 3 4], t);

2 次元行ベクトル、タイム ステップが 1 つだけ存在

最後

'InterpretSingleRowDataAs3D', true
以下に例を示します。
t = 0;
ts = timeseries([1 2], t, 'InterpretSingleRowDataAs3D', true);

Enum データ

timetable データに enum を指定する場合、対応する Inport ブロックの [データを内挿する] パラメーターをオフにします。

MATLAB timetable データのルートレベル入力への読み込み

一般に、MATLAB timetable データは MATLABtimeseries データの読み込みと同じ方法で読み込むことができます。各 timetable には、1 つの信号のみのデータを含めなければなりません。

データ構造体のルートレベル入力への読み込み

データ構造体

ルートレベルの入力端子データをワークスペースから構造体の形で読み込むことができます。この構造体の名前は、[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターで指定します。MATLAB 構造体の定義の詳細については、構造体配列を参照してください。

モデルの構造体を全体として、または端子ベースで指定することができます。[入力] パラメーター用の端子単位の構造体の指定の詳細は、すべての端子用の構造体または各端子用の構造体を参照してください。

この構造体には、常に値フィールドと次元フィールドを含む信号のサブ構造体が含まれています。実行するモデリング タスクに応じて、構造体に時間フィールドを含めることができます。使用する構造体の形式は、データをインポートしている以下の信号のタイプによって異なります。

  • 離散信号 (信号が時間の等間隔値で定義されている) — 空の時間ベクトルをもつ構造体を使用します。サブ構造体の配列を含む signals フィールドを指定し、サブ構造体はそれぞれモデル入力端子に対応しています。

  • 連続信号 (信号が時間のすべての値に定義されている) — データが滑らかな曲線 (連続) を表すか、データの範囲全体 (離散) にわたって不連続 (ジャンプする) かによって、方法が異なります。サブ構造体の配列を含む signals フィールドを指定し、サブ構造体はそれぞれモデル入力端子に対応しています。時間ベクトルを含む time フィールドを指定できます。時間データの指定を参照してください。

離散信号と連続信号のデータをインポートする例については、Control How Models Load Input Dataを参照してください。

すべての端子用の構造体または各端子用の構造体

モデル内のすべてのルートレベルの入力端子への入力を提供する 1 つの構造体を指定するか、端子ごとに別々の構造体を指定することができます。

端子別の構造体形式は、各端子に対する独立した時間付き構造体 1 個または時間なし構造体 1 個で構成されます。それぞれの入力データ構造体は 1 つの signals フィールドのみをもちます。このオプションを指定するには、[入力] テキスト フィールドに構造体の名前をコンマ区切りリスト in1, in2,..., inN として入力します。値 in1 はモデルの 1 番目の入力端子用のデータです。in2 は 2 番目の入力端子用で、その後も同様です。

すべての端子に 1 つの構造体を指定するには、次のようにします。

  • values フィールドには、対応する入力端子用の入力の配列を含まなければなりません。時間ベクトルを指定する場合、各入力は time フィールドで指定した時間値に対応しなければなりません。

    端子の入力がスカラー値またはベクトル値である場合、values フィールドは M-by-N 配列でなければなりません。時間ベクトルを指定する場合、Mtime フィールドで指定される時間点の数値でなければならず、N は各ベクトル値の長さです。

    端子の入力が行列 (2 次元配列) の場合、values フィールドは、M x N x T の配列でなければなりません。MN は各行列入力の次元であり、T は時間点の数です。たとえば、4 行 5 列の行列信号の 51 個の時間サンプルをモデルの入力端子の 1 つに入力するとします。このとき、ワークスペース構造体の対応する dimensions フィールドは、[4 5] に等しくなり、values 配列の次元は 4 × 5 × 51 になります。

  • dimensions フィールドは、入力の次元を指定します。各入力がスカラーまたはベクトル (1 次元配列) 値である場合、dimensions フィールドは、ベクトルの長さ (スカラーの場合は 1) を指定するスカラー値でなければなりません。各入力が行列 (2 次元配列) の場合、dimensions フィールドは、次の要素をもつ 2 要素ベクトルでなければなりません。

    • 1 番目の要素は行列の行数を指定する

    • 2 番目の要素は列数を指定する

    メモ

    Inport ブロックまたは Trigger ブロックの [端子の次元] パラメーターには、対応する入力構造体の dimensions フィールドと同じ値を設定します。値が異なる場合、モデルをシミュレーションしようとするとエラー メッセージが表示されます。

時間データの指定

インポートするデータ構造体の一部として double の時間ベクトルを指定できます。たとえば、信号データをインポートするときに時間ベクトルを指定して、連続プラントを表現したりテスト ケースを作成したりできます。離散アルゴリズムをテストするには、空の時間ベクトルをもつ構造体を使用します。次の表は、読み込む信号データの種類を基にした、時間値の指定に関する追加の推奨事項を示しています。

信号データ時間データの推奨値

離散サンプル時間のある Inport または Trigger ブロック

時間ベクトルを指定しないでください。Simulink はタイム ステップごとに 1 つの信号値を読み込みます。

等間隔離散信号

次の形式の式を使用します。

timeVector = startTime + sampleTime*(0:numSteps-1)'; 

コロン演算子を使用し、最初の点を 0、インクリメントを 1 として、ゼロから目的のタイム ステップ数から 1 を引いた値までカウントします。その後、ベクトルの要素間のインクリメントがサンプル時間と等しくなるように、結果のベクトルを目的のサンプル時間でスケーリングします。読み込みでサポートされるほとんどのデータ形式では時間ベクトルは列ベクトルである必要があるため、ベクトルが転置されます。開始時間がゼロ以外の時間ベクトルを作成するには、目的の開始時間をベクトルに加算します。

たとえば、1 から始まる 101 個の等間隔の時間点をもつサンプル時間 0.2 の時間ベクトルを作成するには、次のコードを使用します。

T1 = 1 + 0.2*(0:100)' 

メモ

次の形式の式を使用 "しないで" ください。

timeVector = [startTime:timeStep:endTime]' 

たとえば、次は使用しないでください。

T2 = [0:0.2:10]' 

倍精度の丸めが使用されるため、時間ベクトル T2 は時間ベクトル T1 と等しくなりません。T2 のように時間ベクトルで倍精度の丸めを使用すると、入力の時間ベクトルとソルバーで計算されるタイム ステップの間で差異が生じ、予期しないシミュレーション結果になる可能性があります。

等間隔ではない値

有効な MATLAB 配列式を使用します。たとえば、[1:5 5:10](1 6 10 15) などです。

From Workspace ブロック、From File ブロック、Signal Editor ブロックはゼロクロッシング検出をサポートしています。ルートレベルの入力端子がこれらのブロックのいずれかに接続されている場合、重複した時間エントリを使用してゼロクロッシング時間を指定できます。

信号および時間データの指定の例

1 番目の例では、単一の入力端子がある次のモデルを検討します。

  1. int8 型の 2 要素信号ベクトルの 11 個の時間サンプルを読み込む入力構造体を作成します。

    N = 10
    Ts = 0.1
    a.time = Ts*[0:N]';
    c1 = int8([0:1:10]');
    c2 = int8([0:10:100]');
    a.signals(1).values = [c1 c2];
    a.signals(1).dimensions = 2;
    
  2. [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターのエディット ボックスで、変数 a を指定します。

  3. Inport ブロックのダイアログ ボックスの [信号属性] タブで、[端子の次元]2 に設定し、[データ型][int8] に設定します。

もう 1 つの例として、2 つの入力のあるモデルを検討します。

1 番目の端子に正弦波、2 番目の端子に余弦波を入力するとします。MATLAB ワークスペースに次のような構造体 a を定義します。

a.time = 0.1*[0:1]';
a.signals(1).values = sin(a.time);
a.signals(1).dimensions = 1;
a.signals(2).values = cos(a.time);
a.signals(2).dimensions = 1;

[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターのエディット ボックスに構造体名 (a) を入力します。

メモ

このモデルでは、次元とデータ型を指定する必要はありません。これは既定値が 1 および double であるためです。

データ配列のルートレベル入力への読み込み

ルートレベルの入力端子データは、ワークスペースからデータ配列の形式で読み込むことができます。この形式は、[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターで指定します。

このインポート形式は、データ型 double の実数 (非複素数) 行列で構成されます。行列の最初の列は、昇順の時間ベクトルでなければなりません。残りの列は、入力値を指定します。

  • 各列は異なる Inport ブロック信号または Trigger ブロック信号に対する入力を表します (シーケンス順)。

  • 各行は対応する時間点の入力値です。

Trigger ブロックでは、トリガー端子を駆動する信号は、最後のデータ項目でなければなりません。

入力行列の列の総数は、n + 1 と等しくなければなりません。ここで、n はモデルの入力端子に入力する信号の総数です。

入力式の指定

モデルの既定の入力表現は [t,u] であり、既定の入力形式は配列です。tu を MATLAB ワークスペースで定義する場合、単純に [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターでモデル ワークスペースからの入力データを選択します。

次の 2 つの Inport ブロックを含むモデルがあると仮定します。

  • In1 ブロックは 2 つの信号を受け入れます (このブロックでは [端子の次元] パラメーターが 2 に設定されています)。

  • In2 ブロックは 1 つの信号を受け入れます (このブロックでは [端子の次元] パラメーターに既定値を使用します)。

tu を MATLAB ワークスペースで定義します。

numSteps = 9;
timeStep = 0.1;
t = (timeStep*(0:numSteps))';
u = [sin(t),cos(t),4*cos(t)];

シミュレーションを実行すると、信号データ sin(t)cos(t)In1 に代入され、信号データ 4*cos(t)In2 に代入されます。100 個の時間点の信号データが入力されます。

メモ

配列入力形式では、データ型 double の実数 (非複素数) のスカラー データまたはベクトル データのみを読み込むことができます。複素数データ、行列 (2 次元) データおよび double 以外のデータ型を入力するには、構造体形式を使用してください。

Function-Call Subsystem を駆動する入力端子の配列

配列を使用して、ルートレベルの入力端子を通して Function-Call Subsystem を駆動することができます。配列または Dataset オブジェクトの要素である配列を使用できます。配列は n 行 1 列の配列でなければなりません。ルートレベルの Inport ブロックで [関数呼び出しの出力] パラメーターを選択します。

たとえば、次の Dataset オブジェクトは配列要素 x を含んでいます。

ds = Simulink.SimulationData.Dataset;
x = [1 3 7 8]';
ds = ds.addElement(x,'theElementName');

このモデルは ds データセットを [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターで使用します。

このモデルのシミュレーションを実行すると、Function-Call Subsystem のログに記録された信号データの時間値によって、ds に格納されている配列で指定された時間にのみ Function-Call Subsystem がトリガーされたことが示されます。

>> logsout{1}.Values.Time

ans =

     1
     3
     7
     8

MATLAB 時間表現のルート入力端子への読み込み

入力式の指定

MATLAB 時間表現を使用して、ワークスペースからルートレベルの入力端子にデータを読み込むことができます。時間表現を使用するには、[データのインポート/エクスポート] ペインの [入力] フィールドに文字列で表した表現を一重引用符で囲んで入力します。時間表現は、長さがモデルの入力端子に入力する信号の数と等しい行ベクトルとして評価される MATLAB 式です。1 つのモデルに 2 つの信号を受け入れる 1 つのベクトル入力があると仮定します。また、timefcn は、長さが 2 要素の行ベクトルを返すユーザー定義関数であると仮定します。このようなモデルに有効な入力時間表現は次のとおりです。

'[3*sin(t), cos(2*t)]' 

'4*timefcn(w*t)+7'

この表現は、シミュレーションの各ステップで評価され、結果の値がモデルの入力端子に適用されます。Simulink がシミュレーションを実行するときに変数 t を定義します。また、変数が 1 つしかない関数の場合、表現の時間変数を省略することができます。たとえば、表現 sinsin(t) と解釈されます。

参考

ブロック

クラス

関連する例

詳細