コシミュレーション信号補償
この例では、信号のインターフェイスにコシミュレーションと信号補償を使用する方法を示します。
コシミュレーション アプリケーションでは、コンポーネントをローカル ソルバーでシミュレートします。ローカル ソルバーは独自のタイムラインを保持し、コンポーネントと統合モデルの間で交換される I/O データを使用して前の時間点から現在の時間までを統合します。コシミュレーション コンポーネントの内部状態はグローバル ソルバーに提示されません。
Simulink でコシミュレーション コンポーネントが統合されている場合、コンポーネント間での I/O データの交換に周期的離散レートを使用できます。ただし、コシミュレーション コンポーネント間の通信により、データ交換の際に 1 ステップの遅延による誤差が生じることがあります。これにより、シミュレーションの精度や安定性が低下する可能性があります。
Simulink では、この問題を軽減するために、それらのコンポーネント間のインターフェイス信号から数値補償の対象となる信号を自動的に識別します。これらの信号は、コシミュレーションに起因して必要になる離散化で理想的な連続量です。Simulink では、コシミュレーションの誤差を減らすために、それらの信号を自動的に補償します。信号が補償される場合、入力端子に 'ギア' アイコンが表示されます。
PI コントローラーをもつ 2 つのコシミュレーション コンポーネント
このモデル例には、2 つのコシミュレーション コンポーネントと離散 PI コントローラーが含まれています。結果を比較するためのベースラインとして、2 つの連続レートのシステムおよび同じ PI コントローラーをもつモノリシックなシステムを使用します。
プラント #1 は、S-Function cosim_plant1_sfcn.c
で実現され、状態空間モデル cosim_plant1.slx
と等価です。
プラント #2 は、Co-Simulation FMU v2.0 cosim_plant2_fmu.fmu
で実現され、伝達関数 cosim_plant2.slx
と等価です。
これらはいずれも、出力信号が入力に直接は依存しない因果的なシステムです。ローカル ソルバーのステップ サイズは 0.01
です。通信ステップ サイズは 0.3
です。
統合モデルを更新すると、2 つのコシミュレーション コンポーネントの入力端子にギア アイコンが表示され、Simulink で数値補償の対象の信号として識別されたことが示されます。あるいは、アイコン (またはブロック) を右クリックして [コシミュレーションの数値補償] ダイアログを開くことができます。
[連続量] 列には、コシミュレーション コンポーネントの I/O がそのコンポーネント自体で連続量として宣言されているかどうかが示されます。この信号の接続元と接続先の両方が一定の要件を満たしていれば、Simulink で自動補償の対象としてマークされます。たとえば、プラント #1 の入力端子 1 は連続量として宣言されていますが、その接続元である PI コントローラーの出力端子 1 は離散レートの制御信号です。そのため、プラント #1 の入力端子 1 は自動で補償されません。
[補償の要求] 列では、この動作をオーバーライドして、数値補償を常に許可するか許可しないように指定できます。信号が [常時] とマークされているか既に対象である場合、[補償の詳細設定...] ボタンを使用して数値補償の詳しい設定を構成できます。
以下のプロットは、このモデルに対して数値補償を有効にした場合と無効にした場合の違いを示しています。数値補償をオンにした場合は次のようになります。
コシミュレーションに起因する累積誤差は 0.4342
です。
数値補償なしの場合は次のようになります。
コシミュレーションに起因する累積誤差は 6.8520
です。