このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
状態遷移表を使用したバンバン制御器のモデル化
状態遷移表は、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を Stateflow® チャートで描画する代わりに、状態遷移表を使用して、グラフィカル オブジェクトのメンテナンスが必要最小限で済む簡潔でコンパクトな形式でステート マシンをモデル化できます。詳細については、状態遷移表を使用した順序論理の表形式での表現を参照してください。
設計要件
この例では、状態遷移表を使用して、ボイラーの温度調節に用いるバンバン制御器をモデル化する方法を示します。制御器は、以下の設計要件を満たすためにボイラーのオン/オフを切り替えなければなりません。
高温は摂氏 25 度を超えることはできない。
低温は摂氏 23 度を下回ることはできない。
定常状態での動作には 10 秒間のウォームアップが必要である。
アラーム信号が発生した場合、ボイラーはただちにシャットダウンしなければならない。
アラーム解除信号が発生した場合には、ボイラーを再度オンにすることができる。
システム属性の特定
このバンバン制御器の動作モードとデータ要件は、設計要件に基づいて特定できます。
動作モード
ボイラーの上位レベルの動作モードは次のとおりです。
Normal (ノーマル) 動作: アラーム信号が発生していない場合。
Alarm (アラーム) ステート: アラーム信号が発生している場合。
ノーマルの動作中には、ボイラーは次の 3 つのいずれかのステートにあります。
Off (オフ): 温度が摂氏 25 度を超えている場合。
Warmup (ウォームアップ): オンになってから最初の 10 秒間。
On (オン): 温度が摂氏 23 度未満になった場合の10 秒間のウォームアップ後の定常状態。
データ要件
バンバン制御器では次のデータが必要です。
スコープ | 説明 | 変数名 |
---|---|---|
入力 | 高温の指定値 | reference_high |
入力 | 低温の指定値 | reference_low |
入力 | アラーム インジケーター | ALARM |
入力 | アラーム解除インジケーター | CLEAR |
入力 | ボイラーの現在の温度 | temp |
ローカル | ボイラーのウォームアップ完了のインジケーター | doneWarmup |
出力 | ボイラーのモードを設定するコマンド (オフ、ウォームアップまたはオン) | boiler_cmd |
新しい状態遷移表の追加
この演習では、バンバン制御器以外の必要な Simulink ブロックを含む Simulink モデルに状態遷移表を追加します。
モデルを自分で実装するには、以下の手順に従います。それ以外の場合は、完成したモデルを開くことができます。
1. 例を開きます。
2.5 つの Outport ブロックと 1 つの Inport ブロックを削除します。
3. モデルに State Transition Table ブロックを追加します。
ステートと階層の追加
ボイラーの動作モードを表現するには、状態遷移表にステートと階層を追加します。
状態遷移表を開きます。
上位レベルの動作モード (ノーマル モードとアラーム モード) を表現します。
state1
をダブルクリックして、ステート名を「Normal
」に変更します。state2
をダブルクリックして、ステート名を「Alarm
」に変更します。
ノーマル動作の 3 つのステートを
Normal
のサブステートとして表現します。Normal
ステートを右クリックして、[行の挿入] 、 [子ステート行] を選択し、新しいステートにOff
という名前を付けます。手順 a をあと 2 回繰り返して、子ステート
Warmup
とOn
をこの順番で作成します。
既定の設定では、ステートを明確に判断できない場合、階層の各レベルにおける一番上の排他的 (OR) ステートがまずアクティブになります。この理由により、デフォルト遷移は
Normal
ステートとOff
ステートに表示されます。この構成は、このモデルの設計要件を満たします。デフォルト ステートを設定するには、ステートを右クリックして [デフォルトとして設定] を選択します。
状態遷移表は次のようになります。
これで、各ステートのアクションを指定する準備ができました。
ステート アクションの指定
各ステートで発生する動作を記述するには、表でステート アクションを指定します。この演習では、変数 boiler_cmd
と変数 doneWarmup
(データ要件を参照) を使用して、ボイラーが Normal ステートと Alarm ステートに入る際の動作モードを初期化します。
次のステートで、ステート名の後ろをクリックし、Enter キーを押して、指定する entry アクションを入力します。
ステート: 入力する内容: 結果の動作 Off
entry: boiler_cmd = 0; doneWarmup = false;
ボイラーをオフにし、ボイラーがウォームアップしていないことを示します。 Warmup
entry: boiler_cmd = 2;
ボイラーのウォームアップを開始します。 On
entry: boiler_cmd = 1;
ボイラーをオンにします。 Alarm
entry: boiler_cmd = 0;
ボイラーをオフにします。 状態遷移表を保存します。
状態遷移表は次のようになります。
これで、あるステートから別のステートへ遷移する場合の条件とアクションを指定する準備が整いました。
遷移の条件とアクションの指定
ある動作モードから別の動作モードに切り替えるタイミングを記述するには、表で遷移の条件とアクションを指定します。この演習ではデータ要件で説明した変数を使用して、ステートメントを作成します。
Normal
ステートの行で次のように入力します。if [ALARM]
Alarm シミュレーション中:
チャートでは
Normal
ステートがアクティブになります。各タイム ステップにおいて、ノーマル動作は ALARM の条件が真になるまで
Off
、Warmup
、On
のステートを繰り返します。ALARM の条件が真になった場合、ボイラーは
Alarm
ステートに遷移し、ただちにシャットダウンします。
Off
ステートの行で次のように入力します。if [temp <= reference_low]
Warmup シミュレーション中に現在のボイラーの温度が摂氏 23 度を下回ると、ボイラーはウォームアップを開始します。
Warmup
ステートの行で次のように入力します。if else-if [doneWarmup]
[after(10, sec)]
{doneWarmup = true;}
On On シミュレーション中にボイラーが 10 秒間ウォームアップすると、
On
ステートに遷移します。On
ステートの行で次のように入力します。if [temp >= reference_high]
Off シミュレーション中に現在のボイラーの温度が摂氏 25 度を上回ると、ボイラーはオフになります。
Alarm
ステートの行で次のように入力します。if [CLEAR]
Normal シミュレーション中にアラーム解除の条件が真になると、ボイラーはノーマル モードに戻ります。
状態遷移表を保存します。
状態遷移表は次のようになります。
これで、シンボル ウィザードを使用してデータ定義を追加する準備ができました。
データの定義
MATLAB 構文を使用する状態遷移表を作成するときは、C/C++ コードの生成のための言語要件があります。これらの要件の 1 つとして、すべての MATLAB® 変数のサイズ、型、実数/複素数を定義しなければなりません。こうすることで、コンパイル時にこれらのプロパティが特定されます。作成した状態遷移表ではまだ明示的にデータを定義していませんが、ここでシンボル ウィザードを使用することができます。シミュレーション中に未解決のシンボルが見つかった場合は、シンボル ウィザードによってアラートが表示されてプロパティが推測され、欠損データが表に追加されます。
Simulink® モデルで、[実行] を選択します。
次の 2 つのダイアログ ボックスが表示されます。
診断ビューアー: 状態遷移表に未解決のシンボルがあることを示します。
シンボル ウィザード: 欠損データの解決を試みます。ウィザードでは、入力
ALARM and CLEAR
以外のすべてのデータのスコープが正しく推測されます。
シンボル ウィザードの [スコープ] ドロップダウン リストから [入力] を選択して、
ALARM
とCLEAR
のスコープを修正します。モデル エクスプローラーが開いたら、シンボル ウィザードによって必要なデータ定義がすべて正しく追加されたかどうかを検証します。
入力の一部が誤った端子に割り当てられています。
モデル エクスプローラーの [コンテンツ] ペインで、以下のように入力端子を再度割り当てます。
割り当て: 端子: reference_low
2 reference_high
1 temp
5 ALARM
3 CLEAR
4 状態遷移表を保存します。
診断ビューアーとモデル エクスプローラーを閉じます。
Simulink モデルの State Transition Table ブロックに、定義した入力と出力が表示されます。これで、これらの入出力を Simulink 信号に接続し、モデルを実行する準備ができました。
状態遷移表の接続とモデルの実行
Simulink モデルで、状態遷移表を Simulink の入出力に接続します。
モデルを保存します。
状態遷移表を再度開きます。
[実行] を選択して、シミュレーションを開始します。
シミュレーションが実行されている間、状態遷移表のアニメーションによって、さまざまなステートが有効になる様子を確認できます。
Scope ブロックに次の出力が表示されます。
対話型のデバッグを実行する場合は、さまざまなステートにブレークポイントを設定して、シミュレーションにおける異なった点でのデータ値を表示できます。デバッグの詳細については、チャートのデバッグのためのブレークポイントの設定を参照してください。