このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
レートベース モデルの作成
レートベース モデルは、サブシステムを明示的にスケジュールしたモデルです。Subsystem ブロックに接続している Inport ブロック、Subsystem ブロック、または [サンプル時間] を指定できる Subsystem ブロック (たとえば Delay ブロック) の [サンプル時間] パラメーターを指定することで、周期的実行レートをもつサブシステムをスケジュールできます。
完成したレートベース モデルを開くには、ex_rate_based_model
を参照してください。
メモ
Integrator ブロックのような連続時間ブロックの使用は許可されません。代わりに同等の離散時間ブロックを使用します。
以下のモデルには 2 つの Atomic Subsystem ブロックが含まれます。Subsystem1 はその入力を 2 で乗算しますが、Subsystem2 はその入力を 4 で乗算します。
Inport 1 のダイアログ ボックスを開きます。[信号属性] タブで、[サンプル時間] を
0.2
に設定します。Inport 2 のダイアログ ボックスを開きます。[信号属性] タブで、[サンプル時間] を
0.4
に設定します。レートベース モデルに複数のレートがある場合、シングル タスクは許可されません。コンフィギュレーション パラメーター [各離散レートを個別のタスクとして扱う] のチェック ボックスをオンにします。
コード生成のためのマルチタスクとマルチレート モデル
マルチタスクに対してシングルタスク、マルチレートに対してシングルレートを選択すると、生成されたコードでエントリ ポイントが制御されます。
コンフィギュレーション パラメーター | 明示的にスケジュールされたレート | 生成されたコードのエントリ ポイント |
---|---|---|
シングルタスク | シングルレート Subsystem1 Subsystem2 | 0.2 秒ごとに周期的に呼び出される 1 つのエントリポイント関数 void model_component_step(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; model_component_Y.Out2 = 4.0 * model_component_U.In2; } |
シングルタスク | マルチレート Subsystem1 Subsystem2 | 0.2 秒ごとに周期的に呼び出される 1 つのエントリポイント関数。関数内のスケジュール カウンターによって、実行されるレートとサンプル時間が決定される。 void model_component_step(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; if (model_component_M->Timing.TaskCounters.TID[1] == 0) { model_component_Y.Out2 = 4.0 * model_component_U.In2; } rate_scheduler(); } |
マルチタスク | シングルレート Subsystem1 Subsystem2 | 1 つのエントリポイント関数。シングルレートをもつシングルタスクと同じコード。ユース ケースではないが、コードはエラーなしで生成する |
マルチタスク | マルチレート Subsystem1 Subsystem2 | 2 つのエントリポイント関数。1 つは 0.2 秒ごとに周期的に呼び出され、もう 1 つは 0.4 秒ごとに周期的に呼び出される。レートは優先順位が設定されたプリエンプティブ マルチタスク スキームを使用して実行される。速いレートに割り当てられる優先順位は高くなるため、先に実行される。 void model_component_step0(void) { model_component_Y.Out1 = 2.0 * model_component_U.In1; } void model_component_step1(void) { model_component_Y.Out2 = 4.0 * model_component_U.In2; } |