Real-Time Workshop User's Guide | ![]() ![]() |
実行時の構造
リアルタイムプログラムは、SimulinkとStethoScopeが同じまたは異なるホストワークステーション上で実行しているとき、VxWorks上で実行します。SimulinkとStethoScopeは、通信を扱うためにVxWorksターゲット上のタスクを要求します。
つぎの図は、SimulinkのexternalモードとStethoScopeを使ったVxWorksアプリケーションの構造を説明したものです。
プログラムは、リアルタイムシステム上で実行するためにVxWorksのタスクを作成します。そのタスクの1つは、Simulinkとの通信を行い、もう1つは、モデルを実行します。StethoScopeは、データ収集のためにタスクを作成します。
ホスト側のプロセス
リアルタイムプログラムと通信するホスト側では、2つのプロセスが実行されます。
VxWorksタスク
リアルタイムプログラムが実行できる2つのモードとして、シングルタスクとマルチタスクがあります。両方のモデルのコードは、つぎの場所にあります。
matlabroot
/rtw/c/tornado/rt_main.c
Real-Time Workshopは、ビルドプロセス中にモデルコードを使ってrt_main.c
をコンパイルし、リンクします。
シングルタスク. デフォルトでは、モデルは1つのタスクtSingleRate
として実行されます。これは、モデルによっては最高の性能(最高のサンプルレート)になる場合があります。
tSingleRate
タスクは、モデルのベースレートで実行し、遅いサンプルレートのすべてのコードを実行します。tSingleRate
タスクの実行は、通常VxWorksのsemTake
ルーチンの呼び出しによりブロックされます。クロック割り込みが起こるときに、割り込みサービスルーチンは、semTake
の呼び出しに戻るsemGive
ルーチンを呼び出します。実行可能になると、tSingleRate
タスクは、1時間ステップに対してモデルコードを実行します。その後ループは、再度semTake
を呼び出すまで待ちます。semTake
およびsemGive
ルーチンの詳細は、VxWorks Reference Manualを参照してください。このタスクはデフォルトでは、比較的高い優先度(30)で実行し、バックグランドシステムの挙動から割り込みされずに実行できます。
マルチタスク. モデルは、モデル内のサンプルレート毎に1つのマルチタスクとしてオプションで実行できます。
tBaseRate
-- このタスクは、ベース(最高の)サンプルレートで実行するモデルコードの構成部分を実行します。デフォルトでは、比較的高い優先度(30)で実行し、バックグランドシステムの挙動から割り込みされずに実行できます。tRate
n
-- プログラムは、システム内の追加のサンプルレートに対してサンプルレート毎のタスクを起動します。これらの追加のタスクは、tRate1
, tRate2
, ..., tRaten
と名付けられます。ここで、n
はシステム内の最も遅いサンプルレートです。追加されたタスクの優先度は、既存のものより低くなります(tRate1
はtBaseRate
より優先度が低くなります)。サポートするタスク.. ビルドプロセス中にexternalモードとStethoScopeを選択する場合、つぎのタスクも作成されます。
t
Extern
-- このタスクは、Simulinkからリアルタイムプログラムに転送されるデータを受け取るソケットストリーム接続側のサーバを実現します。この方式では、tExtern
は、Simulinkから届くメッセージを待ちます。メッセージが到着すると、tExtern
はそれを取得して、指定されたパラメータを修正します。tExtern
は、最も優先度が低いモデルのタスクtRaten
よりも低い優先度で実行します。tExtern
のソースコードは、matlabroot
/rtw/c/src/ext_svr.c
にあります。
tScopeDaemon
とtScopeLink
-- StethoScopeは、リアルタイムデータの収集と表示を可能にするために、VxWorksのタスクを提供します。シングルタスクモードでは、tSingleRateが信号を収集し、マルチタスクモードでは、tBaseRateが信号を収集します。両者ともベース時間ステップ毎にデータを収集します。その後、StethoScopeのタスクは、アイドルタイムがあるとき、つまりモデルがつぎの時間ステップが起こるのを待っているときに、表示のためにデータをホストに送信します。rt_main.c
は、これらのタスクが起動されていなければ起動します。![]() | パラメータチューニングとモニタリング | 実現方式の概要 | ![]() |