Real-Time Workshop User's Guide | ![]() ![]() |
SimulinkとReal-Time Workshopのその他の作用
Simulinkエンジンは、あるブロックからつぎのブロックへと信号ラインに沿ってデータを伝達します。伝達されるデータは、以下のものです。
コード生成の第一段階は、ブロック線図のコンパイルです。このコンパイルステージは、Cプログラムのコンパイルと似ています。Cコンパイラは、タイプのチェックと前処理を行います。同様に、Simulinkはブロックの端子の入力/出力データタイプが一致していること、ブロック間のライン幅が正しい太さであること、接続しているブロックのサンプル時間が一致していることを確認します。
Simulinkエンジンは、一般的にsourceブロックから信号の属性を取得します。たとえば、Inportブロックのパラメータダイアログボックスは、ブロックに対する信号の属性を指定します。
この例題で、Inportブロックは、端子の幅が3、サンプル時間が.01秒、データタイプがdouble、信号が複素数です。
つぎの図は、簡単なブロック線図によって、Inportブロックに関連する信号の属性の伝達を示しています。
この例題で、GainおよびOutportブロックは、Inportブロックに対して指定された属性を継承します。
サンプル時間の伝達
ソースブロック(例 ルートのinport)内の継承されたサンプル時間によって、予期しない、また意図したものでないサンプル時間の割り当てが生じる場合があります。ブロックは、継承されたサンプル時間を指定するので、最初に利用可能な情報は、ブロック線図を完全にコンパイルするためには不十分である場合があります。そのような場合、Simulinkエンジンは、既知のあるいは割り当てられたサンプル時間を、サンプル時間を割り当てられていないが、継承されたサンプル時間をもつブロックに伝達します。そのため、Simulinkは、サンプル時間が可能な限り多くのブロックに割り当てられるまでブランク(未知のサンプル時間) を満たしたままにします。サンプル時間をもたないブロックは、つぎの規則に従って、デフォルトのサンプル時間を割り当てられます。
完全に確定的なモデル(すべてのサンプル時間が上記の規則を用いて設定されていない)を保証するには、すべてのソースブロックのサンプル時間を明示的に指定します。Sourceブロックは、ルートのinportブロックと、入力端子をもたないブロックを含みます。サブシステムの入力端子のサンプル時間を設定する必要はありません。しかし、モジュラーシステムを作成する場合にはそのようにしたいかもしれません。
未接続入力は、暗示的にgroundをソースとします。groundブロックとground接続に対して、デフォルトのサンプル時間はdestinationブロックまたはデフォルトの規則から得られます。
ブロックの実行の順序
Simulinkがブロック線図をコンパイルすると、model.rtw
ファイルを作成します(Cファイルから生成されるオブジェクトファイルと似ています)。model.rtw
ファイルは、モデルのすべての接続の情報や、必要な信号の属性を含みます。そのため、Real-Time Workshopのタイミングエンジンは、異なるレートをもつブロックがいつ実行されるかを認識しています。
この実行の順序は、モデル内の(手書きのコード内の)ブロックを直接呼び出すことによって変更することはできません。たとえば、下記のdisconnected_trigger
f()を直接呼び出すと、正常に動作せず、実行されません。その代わりに、下記のconnected_trigger
モデルに示すように、ファンクションコールジェネレータを使ってf()
が実行される速度を適切に指定します。
ファンクションコールジェネレータの代わりに、トリガ端子に接続する別のブロックを使うこともできます。このとき、トリガ関数を実行するためにモデルのメインエントリポイントを呼び出します。
マルチレートモデルに対して、Real-Time Workshopの一般的な利用は、個々のモデルを別々にビルドし、モデル間のI/Oをハンドコードすることです。この方法は、開発者にモデル間のデータの整合性という重荷を背負わせます。別の方法は、SimulinkとReal-Time Workshopがレート間のデータの整合性を保証し、マルチタスク環境での利用に対してマルチレートコードを生成することです。Real-Time Workshop Interrupt TemplateとVxWorks Supportライブラリは、同期および非同期データフローが可能なブロックを提供します。 Real-Time Workshopライブラリの説明は、「第14章、カスタムコードブロック」 と 「第15章 非同期サポート」を参照してください。マルチレートコード生成に関しては、「第7章、複数のサンプルレートをもつモデル」を参照してください。
![]() | Simulinkモデルで生成コードをトレースする | ターゲット構成の選択 | ![]() |