このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
内部状態表現をもつブロックの処理
操作点オブジェクトでの内部状態をもつブロックの除外
線形化と制御設計に使用する操作点オブジェクトには、次のような、内部状態表現をもつ Simulink® ブロックを含めることができません。
Memory ブロック
Transport Delay ブロックと Variable Transport Delay ブロック
無効にされた If Action Subsystem ブロックと Switch Case Action Subsystem ブロック
Backlash ブロック
永続データをもつ MATLAB Function ブロック
Rate Transition ブロック
Stateflow® ブロック
連続値または double の離散値として登録されていない状態をもつ S-Function ブロック
たとえば、次の Simulink モデルについて定常状態の操作点を計算する場合、結果として得られる操作点オブジェクトには Backlash ブロックの状態が含まれません。これらの状態には内部表現があるからです。この操作点オブジェクトを使用して Simulink モデルを初期化する場合、Backlash ブロックの初期条件は操作点と適合しない可能性があります。
例として、モデル myModel
の操作点を 10 秒の時点でのシミュレーションのスナップショットから計算し、この操作点でモデルを線形化できます。この場合、関数 linearize
は、モデルを線形化する前にモデルの状態を操作点で初期化します。
op = findop('myModel',10); linsys = linearize('myModel',io,op);
myModel
に内部状態表現をもつブロックが 1 つ以上含まれている場合、op
に内部状態は含まれません。そのため、linsys
がモデルの正確な線形表現にならない可能性があります。
シミュレーションのスナップショットで操作点を見つける代わりに、モデルをスナップショット時間までシミュレートし、スナップショット自体でモデルを線形化できます。
linsys = linearize('myModel',io,10);
この方法であれば、状態情報がない操作点でモデルが初期化されることはありません。
定常状態の操作点探索に対応した、初期状態をもつブロックの設定
内部状態をもつブロックが原因で、定常状態の操作点探索 (平衡化) に問題が発生する可能性があります。"直達がない" 場合、現時点でのブロックへの入力によって、現時点のブロックの出力が決まりません。
Memory ブロック、Transport Delay ブロックまたは Variable Transport Delay ブロックに関してこの問題を修正するには、操作点の探索や定常状態でのモデルの線形化を行う前に [線形化中に入力を直達する] ブロック パラメーターを選択します。この設定により、こうしたブロックは、操作点探索に際してゲイン 1 をもつかのように動作するようになります。
たとえば、次のモデルには Transport Delay ブロックが含まれています。この場合は、Transport Delay の出力が常にゼロとなるため、最適化を使用して定常状態の操作点を検出できません。基準信号が 1 なので、Plant ブロックの出力を 1 にして定常状態にするには、Plant ブロックへの入力をゼロ以外の値にしなければなりません。
操作点探索を行う前に、[ブロック パラメーター] ダイアログ ボックスで [線形化中に入力を直達する] オプションを選択します。この設定により、PID Controller ブロックが非ゼロの値を Plant ブロックに渡すことができるようになります。
直達オプションはコマンド ラインで設定することもできます。
ブロック | 直達を指定するコマンド |
---|---|
Memory | set_param(blockname,'LinearizeMemory','on') |
Transport Delay または Variable Transport Delay | set_param(blockname,'TransDelayFeedthrough','on') |
内部状態をもつ他のブロックの場合、操作点を計算する前に、ブロックの出力が状態微分または目的の出力レベルに影響を与えるかどうかを調べます。ブロックがこれらの微係数または出力レベルに影響を与える場合は、Configurable subsystem を使用してそれらを置き換えることを検討してください。