ルート レベルの入力端子へのデータの読み込み
データをワークスペースから次のいずれかのブロックを使用してモデル化されたルートレベルの入力端子に読み込むことができます。
これらのブロックは、[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターの値に基づいたワークスペースからデータをインポートします。
ヒント
多くの信号をルートレベルの入力端子にインポートする場合は、ルート Inport マッパー ツールの使用を検討してください。詳細については、ルート Inport 信号データのマッピングを参照してください。
また、From Workspace ブロックを使用して、ワークスペースからデータをインポートすることができます。詳細は、From Workspace のドキュメンテーションと基本テスト ケース用の入力データの読み込みを参照してください。
入力データの指定
入力データは [入力] コンフィギュレーション パラメーターを使用して手動で指定できます。ルートレベルの入力端子に多数の信号を読み込む場合は、ルート Inport マッパー ツールを使用を検討してください。これにより、このツールを使用してマップするデータが [入力] パラメーターに自動的に指定されます。詳細については、ルート Inport マッパー ツールを使用したデータのマッピングを参照してください。
[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターを選択します。
メモ
[入力] コンフィギュレーション パラメーターの使用は、ログ データを保存する際の [形式] コンフィギュレーション パラメーターの設定とは無関係です。
隣のエディット ボックスに外部入力仕様を入力して、[適用] をクリックします。指定できるデータの形式の一覧については、入力データの形式を参照してください。
[入力] ボックスに、以下のいずれかの方法で信号入力を指定します。
MATLAB® 関数 (文字列として表現) または MATLAB 式の入力
u = UT(t)
を使用して、シミュレーションのタイム ステップごとに実行時のデータを作成します。入力データの形式で説明するいずれかの入力データ形式を使用して、直接データを指定します。
コンマ区切りリスト
Dataset
データを指定する場合、[入力] パラメーターには 1 つの Dataset
オブジェクトのみを指定します。このオブジェクトをコンマ区切りのリストに含めないでください。
各変数または式は、モデル内の特定のルートレベルの入力端子に対応した、該当するオブジェクトとして評価されなければなりません。リストの各変数または式は、該当するオブジェクトとして評価されなければなりません。このオブジェクトは、モデルのルートレベルの入力端子のいずれかに対応します。最初の項目は、最初のルートレベルの入力端子に対応し、2 番目の項目は、2 番目のルートレベルの入力端子に対応します (以下同様)。各データ サンプルは入力ブロック パラメーターで指定したデータの次元と一致しなければなりません。
Enable または Trigger ブロックでは、イネーブル端子またはトリガー端子を駆動する信号は、コンマ区切りリストの最後の項目でなければなりません。イネーブル端子とトリガー端子の両方をもつ場合は、以下のように指定します。
イネーブル端子をリストの最後から 2 番目の項目として
トリガー端子を最後の項目として
空の行列を使用して、端子に対してグラウンド値を指定します。たとえば、入力端子 in1
および in3
のデータを読み込み、端子 in2
にグラウンド値を使用して、[入力] パラメーターに次を入力します。
in1, [], in3
入力データの形式
入力データは、次の形式で提供できます。
Simulink.SimulationData.Dataset
— ログ データを MATLABtimeseries
の形式にまとめたものです。詳細については、データセット データのルートレベル入力への読み込みを参照してください。MATLAB
timeseries
— 詳細については、以下を参照してください。Simulink.SimulationData.DatasetRef
— 詳細については、シミュレーションのためのビッグ データの読み込みを参照してください。MATLAB
timetable
— 詳細については、MATLAB timetable データのルートレベル入力への読み込みを参照してください。配列 — データ配列のルートレベル入力への読み込みを参照してください。
Simulink.SimulationData.Signal
— 詳細については、別のシミュレーションでログ記録されたデータの読み込みを参照してください。matlab.io.datastore.SimulationDatastore
— 詳細については、シミュレーションのためのビッグ データの処理を参照してください。構造体 — 外部の入力データを簡単に指定するには、ルートレベルの入力端子ブロックのサブセットにデータを読み込みます。この方法により、グラウンド値を使用する端子のデータ構造を作成せずに済みます。グラウンド値の詳細については、信号と離散状態の初期化を参照してください。構造体データの読み込みの詳細については、データ構造体のルートレベル入力への読み込みを参照してください。
すべての入力端子のデータを含む構造体配列。
空の行列 — データ値を作成せずに、グラウンド値を使用する端子に対して空の行列を使用します。
時間表現 — 詳細については、MATLAB 時間表現のルート入力端子への読み込みを参照してください。
メモ
読み込む timetable
データを指定するとき、timetable
には 1 つの信号のみのデータを含めなければなりません。
バス データのインポートの詳細については、ルート レベルの入力端子へのバス データの読み込みを参照してください。
入力パラメーターの時間値
[入力] パラメーターで指定する時間値は、ソルバーが使用する時間を制御しません。ソルバーには時間を伝播するための独自のロジックがあり、任意の時間値で入力データが必要になる場合があります。ルートレベルの入力ブロックの [内挿] パラメーター設定 (たとえば、ルートレベルの Inport ブロック) は、対応するワークスペース データが存在しないタイム ステップでの出力の処理方法を指定します。
[入力] パラメーターに指定する時間値をスパースにすることはできません。また、NAN
または Inf
の値を含めることもできません。
データの読み込み
対応する Inport、Enable または 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.Signal
、Simulink.SimulationData.State
またはSimulink.SimulationData.DataStoreMemory
オブジェクト次のいずれかの要件を満たす配列
最初の列に時間が含まれ、残りの列がそれぞれ入力端子に対応している配列。データ配列のルートレベル入力への読み込みを参照してください。
Function-Call Subsystem を駆動するルート Inport の
n 行 1 列
の配列。
構造体 — データ構造体のルートレベル入力への読み込みを参照してください。
バスの場合は、次のいずれかの形式を使用して、各リーフ信号のデータ要素をもつ構造体を使用します。
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 つだけ存在 | 最後 |
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
配列でなければなりません。時間ベクトルを指定する場合、M
はtime
フィールドで指定される時間点の数値でなければならず、N
は各ベクトル値の長さです。端子の入力が行列 (2 次元配列) の場合、
values
フィールドは、M x N x Tの配列でなければなりません。
M
とN
は各行列入力の次元であり、T
は時間点の数です。たとえば、4 行 5 列の行列信号の 51 個の時間サンプルをモデルの入力端子の 1 つに入力するとします。このとき、ワークスペース構造体の対応するdimensions
フィールドは、[4 5]
に等しくなり、values
配列の次元は4 × 5 × 51
になります。dimensions
フィールドは、入力の次元を指定します。各入力がスカラーまたはベクトル (1 次元配列) 値である場合、dimensions
フィールドは、ベクトルの長さ (スカラーの場合は 1) を指定するスカラー値でなければなりません。各入力が行列 (2 次元配列) の場合、dimensions
フィールドは、次の要素をもつ 2 要素ベクトルでなければなりません。1 番目の要素は行列の行数を指定する
2 番目の要素は列数を指定する
時間データの指定
インポートするデータ構造体の一部として double の時間ベクトルを指定できます。たとえば、信号データをインポートするときに時間ベクトルを指定して、連続プラントを表現したりテスト ケースを作成したりできます。離散アルゴリズムをテストするには、空の時間ベクトルをもつ構造体を使用します。次の表は、読み込む信号データの種類を基にした、時間値の指定に関する追加の推奨事項を示しています。
信号データ | 時間データの推奨値 |
---|---|
離散サンプル時間のある Inport または Trigger ブロック | 時間ベクトルを指定しないでください。Simulink はタイム ステップごとに 1 つの信号値を読み込みます。 |
等間隔離散信号 | 次の形式の式を使用します。 timeVector = startTime + sampleTime*(0:numSteps-1)'; コロン演算子を使用し、最初の点を たとえば、 T1 = 1 + 0.2*(0:100)' メモ 次の形式の式を使用 "しないで" ください。 timeVector = [startTime:timeStep:endTime]' たとえば、次は使用しないでください。 T2 = [0:0.2:10]' 倍精度の丸めが使用されるため、時間ベクトル |
等間隔ではない値 | 有効な MATLAB 配列式を使用します。たとえば、 From Workspace ブロック、From File ブロック、Signal Editor ブロックはゼロクロッシング検出をサポートしています。ルートレベルの入力端子がこれらのブロックのいずれかに接続されている場合、重複した時間エントリを使用してゼロクロッシング時間を指定できます。 |
信号および時間データの指定の例
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;
[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターのエディット ボックスで、変数
a
を指定します。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]
であり、既定の入力形式は配列です。t
と u
を MATLAB ワークスペースで定義する場合、単純に [コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターでモデル ワークスペースからの入力データを選択します。
次の 2 つの Inport ブロックを含むモデルがあると仮定します。
In1
ブロックは 2 つの信号を受け入れます (このブロックでは [端子の次元] パラメーターが2
に設定されています)。In2
ブロックは 1 つの信号を受け入れます (このブロックでは [端子の次元] パラメーターに既定値を使用します)。
t
と u
を 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 つしかない関数の場合、表現の時間変数を省略することができます。たとえば、表現 sin
は sin(t)
と解釈されます。
参考
ブロック
クラス
関連する例
- ルート レベルの入力端子へのバス データの読み込み
- MATLAB timeseries データのルートレベル入力への読み込み
- データ配列のルートレベル入力への読み込み
- MATLAB 時間表現のルート入力端子への読み込み
- データ構造体のルートレベル入力への読み込み
- 信号読み込みの手法の比較