Using Simulink | ![]() ![]() |
Workspace I/Oページ
シミュレーション結果をワークスペース変数に直接出力したり、ワークスペースから入力と初期状態を得ることができます。Simulation Parameters ダイアログボックスで、Workspace I/O タブを選択します。つぎのようなページが表示されます。
ベースワークスペースから入力の読み込み
Simulinkは、シミュレーションの実行中、モデルの最上位の入力端子にモデルのベースワークスペースから入力を適用することができます。このオプションを指定するためには、Workspace I/O ページの Load from workspace エリアで Input ボックスをチェックします。それから、(つぎに示す)外部入力仕様を隣接する入力ボックスに入力し、Apply を選択します。
External Input Matrix. 外部入力行列の最初の列は、昇順の時間ベクトルでなければなりません。残りの列は、入力値を指定します。特に、各列が異なる(連続する順番の)Inportブロック信号に対する入力を表現し、各行が関連する時間点での入力値になります。Simulinkは、Interpolate data オプションが関連する入力に対して選択されているとき、必要であれば入力値を線形に内挿または外挿します(Interpolate dataを参照してください)。
入力行列の列の総数は n + 1
である必要があり、ここで n
はモデルの入力端子に入力される信号の総数となります。ベースワークスペースで t
と u
が定義されると、モデルに対する外部入力仕様を定義する必要がなくなります。これは、モデルに対する外部入力仕様のデフォルトが [t,u]
だからです。
たとえば、モデルが2つの入力端子を持ち、その内の1つが2つの信号を受けいれ、もう一方が1つの信号を受け入れると仮定してください。また、ベースワークスペースでつぎのように u
と t
が定義されていると仮定してください。
t = (0:0.1:1)'; u = [sin(t), cos(t), 4*cos(t)];
このとき、モデルに対する外部入力を指定するためには、単にモデルの外部入力ボックスをチェックするだけです。
Structure with time. Simulinkは、Input テキストフィールドで指定された名前の構造体の形式でワークスペースからデータを読み込むことができます。入力構造体は2つのトップレベルフィールド time
と signals
をもたなければいけません。time
フィールドはシミュレーション時間の列ベクトルです。signals
フィールドは構造体の配列で、おのおのがモデルの入力端子に関連します。各サブ構造はフィールド values
をもっています。values
フィールドは関連する入力端子に対する入力の列ベクトルです。
ベースワークスペースで、つぎのようなモデル入力ベクトル a
を定義すると仮定してください。
a.time = (0:0.1:1)'; a.signals(1).values = sin(a.time); a.signals(2).values = cos(a.time);
このとき、このモデルに対する外部入力としてaを指定するために、Input ボックスをチェックし、隣接したテキストフィールドに a
と入力します。
注意 Simulinkは、Structure with time 出力フォーマットでワークスペースに保存されたシミュレーションデータを再読み込みします。詳細は、Structure with time を参照してください。 |
Structure. 構造体フォーマットは、time
フィールドが空であることを除いて、Structure with time フォーマットと同じです。たとえば、先ほどの例題でつぎのようにtimeフィールドを設定することができます。
a.time = []
この場合、Simulinkは入力端子の値の配列の第1要素から最初の時間ステップに対する入力を読み込み、値の配列の第2要素から2番目の時間ステップに対する入力を読み込みます。その他も同様に読み込みます。
注意 Simulinkは、Structure 出力フォーマットでワークスペースに保存されたシミュレーションデータを再読み込みします。詳細は、Structure を参照してください。 |
Per-Port Structures. このフォーマットは、時間付き構造体や各端子に対する時間なし構造体の分割から構成されます。各端子の入力データ構造は signals
フィールドのみを持っています。このオプションを指定するために、Input テキストフィールドで、構造体の名前をコンマで分割したリスト in1, in2, ..., inN
のように入力します。ここで、in1
はモデルの最初の入力端子に対するデータ、in2
は2番目の入力端子に対するデータ、その他も同様に各入力端子に対するデータです。
External Input Time Expression.. 時間表現は、行ベクトルの長さがモデルの入力端子に入力される信号の数と等しくなるMATLAB表現です。例えば、モデルが2つの信号を受け入れる1つのベクトル入力を持っていると仮定します。更に、timefcn
が2要素の行ベクトルを出力するユーザ定義関数と仮定します。つぎの記述は、このようなモデルに対して妥当な入力時間の表現です。
'[3*sin(t), cos(2*t)]'
'4*timefcn(w*t)+7'
Simulinkはシミュレーションの各ステップにおいて表現を評価し、その結果の値をモデルの入力端子に適用します。シミュレーションを実行しているとき、Simulinkが変数t
を定義するということに注意してください。また、1つの変数をもつ関数に対する表現で時間変数を省略することができます。たとえば、Simulinkは表現 sin
を sin(t)
として解釈します。
Saving Output to the Workspace
このダイアログボックスページの Save to workspace領域内の Time, States, Output チェックボックスを選択することによって出力変数を指定することができます。出力変数を指定すると、Simulinkは(選択したのと同数の)時間、状態、出力軌跡に対する値をワークスペースに書き出します。
異なる変数に値を割り当てるためには、チェックボックスの右側のフィールドにそれらの変数名を指定します。複数の変数に出力を書き出すためには、コンマで区切ったリストとして変数名を指定します。Simulinkは、Save to Workspace 領域で指定した名前のベクトルでシミュレーション時間を保存します。
注意 Simulinkは、モデルのベースサンプルレートにおいて出力をワークスペースに保存します。他のサンプルレートで出力を保存したい場合は、To Workspaceブロックを使います(To Workspaceを参照)。 |
Save options 領域では、フォーマットを指定し、保存する出力のデータ数を制限することができます。
モデルの状態と出力に対するフォーマットオプションは、つぎの通りです。
Matrix. Simulinkは、Save to Workspace 領域で指定された名前(たとえば xout
)をもつ行列でモデル状態を保存します。状態行列の各列はモデル状態に対応し、各行は特定の時間での状態に対応します。モデル出力行列は、Save to Workspace 領域で指定した名前(たとえば yout
)をもちます。各列はモデル出力に関連し、各行は特定の時間での出力に関連します。
Structure with time. Simulinkは、Save to Workspace 領域で指定された名前(たとえば yout
)をもつ構造体でモデルの出力を保存します。構造体は2つのトップレベルフィールド time
と signals
をもちます。timeフィールドはシミュレーション時間です。signalsフィールドはサブ構造の配列をもち、おのおのモデルの出力に関連します。各サブ構造は3つのフィールド values
, label
, blockName
をもっています。values
フィールドは、関連する出力端子に対する出力のベクトルです。label
フィールドは、出力端子に接続される信号のラベルを指定します。blockName
フィールドは、outport名を指定します。Simulinkは、モデル出力の構造体として同じ構造でモデルの状態を保存します。
Structure. このフォーマットは、Simulinkが保存した構造体の time
フィールドにシミュレーション時間をストアしないことを除いて、上記と同じになります。
Per-Port Structures. このフォーマットは、時間付き構造体や各出力端子に対する時間なし構造体の分割から構成されます。各出力データ構造は signals
フィールドのみをもちます。このオプションを指定するために、Output テキストフィールドで構造体の名前をコンマで区切られたリスト out1, out2, ..., outN
のように入力します。ここで、out1
はモデルの最初の端子に対するデータ、out2
は2番目の端子に対するデータ、その他もそれぞれの端子に対するデータです。
保存するデータの行数を制限するには、Limit rows to last というラベルの付いたチェックボックスを選択し、保存する行数を指定します。間引きファクタを適用するには、Decimation ラベルの右側のフィールドに値を入力します。たとえば、値2は生成される点を1つおきに保存します。
状態のロードと保存
シミュレーションの開始時にシステムに適用される初期条件は、一般にブロック内で設定されます。ブロック内で設定された初期条件は、それらをこのページの States 領域に指定することによって変更することができます。
シミュレーションに対する最終状態を保存し、それらを別のシミュレーションに適用することもできます。この機能は、定常状態の解を保存し、その既知状態でシミュレーションを再開したいときに有効です。状態は、WorkspaceI/OページのSaveオプション領域で選択したフォーマットで保存されます。StructureまたはStructure with Timeを選択する場合、保存されるフォーマットはつぎのようになります。
Structure with time. Simulinkは、Save to Workspace 領域の Final State フィールドで指定された名前(たとえば xFinal
)をもつ構造体でモデルの状態を保存します。構造体は、2つのトップレベルフィールド time
と signals
をもちます。time
フィールドは、シミュレーション時間のベクトルです。signals
フィールドはサブ構造の配列で、おのおの状態を持つブロックに関連します。各サブ構造は、3つのフィールド values
, label
, blockName
をもちます。values
フィールドは、関連するブロックに対する状態のベクトルです。label
フィールドは、 CState
(連続状態に対して)か DState_n
のとちらかです。ここで、n は 1, 2, 3 ... で、関連するブロックに対する離散状態の集合の最大数までをとります。blockName
フィールドは、この構造要素で表現されるブロックの名前を指定します。
Structure. このフォーマットは、Simulinkが保存された構造体の time
フィールドにシミュレーション時間をストアしないことを除いて、上記と同じになります。
状態は、Initial State チェックボックスを選択し、初期状態値を含む変数の名前を指定します。この変数は、行列かsave final statesで利用したのと同じ形式の構造体です。これにより、Simulinkは Structure や Structure with time 形式を利用して、現在のセッションに対する初期状態を以前のセッションで保存された最終状態に設定します。
チェックボックスが選択されていないか、状態ベクトルが空([]
)の場合、Simulinkはブロックに定義されている初期条件を使用します。
最終状態(シミュレーションが終了したときの状態値)は、Final State チェックボックスを選択し、隣接するエディットフィールドに変数を入力することによって保存されます。
モデルに複数の状態がある場合 複数の状態をもつモデルに初期条件を指定したい場合は、状態の順序を決める必要があります。モデルの初期条件とその状態の順序は、つぎのコマンドを用いて決定することができます。
[sizes, x0, xstord] = sys([], [], [], 0)
ここで、sys
はモデル名です。コマンドは以下を出力します。
sizes
は、特定のモデルの特徴を示すベクトルです。最初の2つの要素のみが初期条件に適用されます。sizes(1)
は連続状態の数、sizes(2)
は離散状態の数です。sizes
ベクトルに関する詳細は、このガイドと対になる、Writing S-Functions を参照してください。x0
: ブロックの初期条件です。xstord
: モデル内の状態をもつすべてのブロックのフルパス名を含む文字列行列です。xstord
と x0
ベクトル内のブロックの順序は同じです。たとえば、つぎのステートメントは vdp
モデルに対する初期条件の値と状態の順序を取り出します(例では、連続状態の数を表す sizes(1)
の値と離散状態の数を表す sizes(2)
の値のみを示します)。
[sizes, x0, xstord] = vdp([], [], [], 0
)
sizes =
2
0
x0 =
2
0
xstord =
'vdp/Integrator1'
'vdp/Integrator2'
![]() | Solverページ | Diagnosticsページ | ![]() |