このレッスンでは、重要な振る舞いをモデル化するために、SystemUnderControl
にステートチャートを追加します。
SystemUnderControl はある初期温度の水が 720 リットル入ったプールで、
ControlSystem が提供する熱を使用して、この水を基準温度まで温める必要があります。SystemUnderControl
を特徴付けるために、属性はシステムの状態を示し、パラメトリックな制約は SystemUnderControl への入力 (Q) と出力 (デルタ T) の数学的な関係を指定します。
- ここでは、デルタ T は水温の変化 (degC) です。
- Q は入熱 (kJ) です。
- m は水の質量 (= 720 kg) です。
- cp は水の熱容量 (= 4.1855 J/g/degC) です。
この関係は、離散的な時間の定義域でも使用できるように変更することが可能です。Q をレートとして表現した場合、すなわち、ControlSystem (このモデルでは熱のソース) が最大レート
19.049 kJ/秒で熱を提供する場合、デルタ T はレート、すなわち、1 秒当たりの温度変化 (degC) となります。1 秒の陰的時間枠を使用することで、ステートチャート、離散的な時間の定義域の成果物を使用して、熱と温度変化の間の制約をモデル化することができます。
SystemUnderControl の振る舞いを示すステートチャートを追加するには、次の手順を実行します。
- ブラウザーで、を展開し、「外部フロー」をダブルクリックして内部ブロック図を開きます。
- ダイアグラムの SystemUnderControl パートを右クリックし、を選択します。
- 「スタンプ・モード」ツール
を選択し、「状態」をクリックします。 (スタンプ・モードを使用すると、同じダイアグラムの要素で複数のバージョンを描画することができます。)
- 空のステートチャートを 3 回クリックし、状態を 3 つ描画します。「スタンプ・モード」を再度クリックして、使用を終了します。
- 3 つの状態にそれぞれラベル名 idle、warming、および
cooling を入力します。
- 「デフォルト遷移」ツール
を選択し、idle 状態の上をクリックしてから、その状態の上部を再度クリックします。
- 遷移ラインをダブルクリックして、「フィーチャー」ウィンドウを開きます。
- 「一般」ページの「アクション」フィールドで、
setTemperature(initialT); と入力します。
- 「OK」をクリックします。遷移の構文の一部として自動的に「/」が追加されることを確認します。
- 「条件コネクター」ツール
を選択し、ステートチャートの中心をクリックします。
- 「遷移」ツール
を選択し、idle 状態から条件コネクターに矢印を描画します。この遷移に tm(1000) というラベルを付けます。
- 「ジャンクション・コネクター」ツールを選択し、warming 状態と cooling
状態の間でクリックします。
- warming と cooling からジャンクション・コネクターに遷移を描画します。
- ジャンクション・コネクターから idle
状態に遷移を描画します。遷移の「フィーチャー」ウィンドウを開き、次のテキスト行をセミコロンも含め「アクション」フィールドに追加し、「OK」をクリックします。setTemperature(heatFunction());
- 条件コネクターから warming
状態に遷移を描画します。この遷移に [heat>0] というラベルを付けます。
- 条件コネクターから cooling
状態に遷移を描画します。この遷移に [else] というラベルを付けます。
- ブラウザー内で、SystemUnderControl ブロックの下の「heatFunction」操作を見つけます。
- その操作をダブルクリックして「フィーチャー」ウィンドウを開き、「実装」タブを選択します。
- 実装コンテンツの最初の部分の、2 つのスラッシュ文字 (C++ コメント文字)
を削除します。テキストが緑色から別の構文固有の色に変わり、
Rational® Rhapsody® により構文解析が行われたことが示されます。
「OK」をクリックします。
作成されたステートチャートは、次の例のようになります。
このステートチャートでは、適用された熱 (存在する場合) と cooling を考慮して、1 秒単位で新しい温度が計算されます。1 秒のタイミングの状態遷移により連続時間の陰的仕様が提供されるため、制約の式が簡単になります。例えば、通常 degC_per_s
で表現される coolingRate は degC となります。
内部ブロック図のステートチャートを表示するには、次の手順を実行します。
- を選択します。
- 黄色のステートチャート・シンボル
が s:SystemUnderControl パートの右上隅にあります。ステートチャート・シンボルをクリックして、そのステートチャートを開きます。