状態遷移表を使用したバンバン制御器のモデル化
状態遷移表は、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を 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 アクションを入力します。
ステート: 入力する内容: 結果の動作 Offentry: boiler_cmd = 0; doneWarmup = false;
ボイラーをオフにし、ボイラーがウォームアップしていないことを示します。 Warmupentry: boiler_cmd = 2;
ボイラーのウォームアップを開始します。 Onentry: boiler_cmd = 1;
ボイラーをオンにします。 Alarmentry: 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® 変数のサイズ、型、実数/複素数を明示的に定義できます。
データは [シンボル] ペインを使用して定義できます。[モデル化] タブで [[シンボル] ペイン] をクリックします。[シンボル] ペインに、表で割り当てる変数に関連付けられているデータが表示されます。入力、出力、およびパラメーターであるデータが Stateflow で推定されますが、解決するまではデータは未定義になります。未定義のデータは [名前] 列の警告記号で示されます。

未定義のデータを解決するには、[シンボル] ペインで [未定義のシンボルを解決] アイコン
をクリックします。Stateflow エディターによってチャート内の各シンボルにスコープが割り当てられます。シンボル スコープ reference_high入力データ reference_low入力データ temp入力データ boiler_cmd出力データ doneWarmupローカル データ ALARMパラメーター CLEARパラメーター Stateflow エディターはコンテキストに基づいてスコープを推定するため、常に適切なスコープが割り当てられるとは限りません。
ALARMとCLEARのスコープを修正します。[タイプ] 列で [パラメーター データ] アイコン
を選択します。ドロップダウン メニューから [入力データ] を選択します。それぞれの入力について、[端子] 列で正しい値を割り当てます。
割り当て: 端子: reference_low2 reference_high1 temp5 ALARM3 CLEAR4 状態遷移表を保存します。
Simulink モデルの State Transition Table ブロックに、定義した入力と出力が入力端子および出力端子として表示されます。
状態遷移表の接続とモデルの実行
Simulink モデルで、状態遷移表を Simulink の入出力に接続します。

モデルを保存します。
状態遷移表を再度開きます。
[実行] を選択して、シミュレーションを開始します。
シミュレーションが実行されている間、状態遷移表のアニメーションによって、さまざまなステートが有効になる様子を確認できます。
対話型のデバッグを実行する場合は、さまざまなステートにブレークポイントを設定して、シミュレーションにおける異なった点でのデータ値を表示できます。デバッグの詳細については、チャートのデバッグのためのブレークポイントの設定を参照してください。