Real-Time Workshop User's Guide    

ラピッドプロトタイピングシステム独立成分

これらの成分は、すべての環境で同じアプリケーションモジュールを利用してこれらの操作を実現するため、まとめてシステム依存と呼ばれます。この節では、モデルコードから開始します(また、モデルが連続状態をもつ場合は、数値積分ルーチンを呼び出します)。この節では、Simulinkデータ構造体(SimStruct)を定義、作成、破棄するコードも含みます。プログラムに含まれるモデルコードとすべてのS-ファンクションは、それら自身のSimStructを定義します。

モデルコードの実行ドライバは、モデルコード内で関数を呼び出して、モデル出力を計算し、離散状態をアップデートし、状態を積分(可能な場合)、時間をアップデートします。これらの関数は、その後計算結果をSimStructに書き出します。

モデルの実行

各サンプリング間隔で、メインプログラムは、コントロールをモデル実行関数に渡します。これは、モデルの1ステップを実行します。このステップは、外部ハードウェアから入力を読み込み、モデル出力を計算し、出力を外部ハードウェアに書き出し、状態をアップデートします。

つぎの図は、これらのステップを示します。

図 6-7: モデルの実行

この仕組みでは、状態がアップデートされる前にシステム出力をハードウェアに書き出します。状態のアップデートを出力計算と分離することにより、入力と出力操作間の時間が最小化されます。

連続状態の積分

リアルタイムプログラムは、入力および状態ベクトルのカレント値に対して、微係数ベクトルdx/dtに基づき連続状態のつぎの値を計算します。

これらの微係数は、その後状態方程式を使って状態のつぎの値を計算するために用いられます。以下に示すのは、1次Euler法(ode1)に対する状態方程式です。

ここで、hはシミュレーションのステップサイズで、xは状態ベクトルを表わし、
dx/dt
は微係数ベクトルです。その他のアルゴリズムは、出力および微分ルーチンを複数回呼び出すことによって、より正確な推定を出力する場合があります。

しかし、リアルタイムプログラムは、与えられた時間内ですべてのタスクを完了することを保証する必要があるので、固定ステップサイズを用います。これは、モデルに対して高次の積分法を大きく変化するダイナミクスで利用するとき、高次の方法は余分な計算時間を必要とすることを意味します。代わりに、余計な計算時間によって、最初に高次の積分法から求められる精度の増加をさせない、大きいステップサイズの利用を余儀なくさせる場合があります。

一般的に方程式がスティッフである(すなわち、広範囲を変化する時間定数をもつシステム内のダイナミクスが大きいほど)と、利用しなければならない方法の次数は高くなります。

実際には、非常にスティッフな方程式のシミュレーションは、非常に低いサンプルレートを除いて、リアルタイムの目的用には現実的ではありません。リアルタイムプログラムで用いるモデルを実現する前に、Simulinkで固定ステップサイズの積分をテストして、安定性と精度をチェックすべきです。

線形システムに対して、シミュレート中のモデルを離散時間バージョンに、たとえばControl System Toolboxのc2d関数を使って変換することは、より現実的です。

システム独立成分に対するアプリケーションモジュール

システム独立成分は、つぎのモジュールを含みます。

システム独立成分は、Simulinkデータ構造体(SimStruct)を定義、作成、破棄するコードも含みます。プログラムに含まれるモデルコードとすべてのS-ファンクションは、それら自身のSimStructを定義します。

SimStructデータ構造体は、ブロックパラメータや出力を含む、モデルまたはS-ファンクションに関連するすべてのデータをカプセル化しています。SimStructに関する情報は、Writing S-Functionsを参照してください。


 ラピッドプロトタイピングシステム依存部分 ラピッドプロトタイピングアプリケーション成分