メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

状態遷移表を使用したバンバン制御器のモデル化

状態遷移表は、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を 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 ブロックを追加します。

ステートと階層の追加

ボイラーの動作モードを表現するには、状態遷移表にステートと階層を追加します。

  1. 状態遷移表を開きます。

  2. 上位レベルの動作モード (ノーマル モードとアラーム モード) を表現します。

    1. state1 をダブルクリックして、ステート名を「Normal」に変更します。

    2. state2 をダブルクリックして、ステート名を「Alarm」に変更します。

  3. ノーマル動作の 3 つのステートを Normal のサブステートとして表現します。

    1. Normal ステートを右クリックして、[行の挿入][子ステート行] を選択し、新しいステートに Off という名前を付けます。

    2. 手順 a をあと 2 回繰り返して、子ステート WarmupOn をこの順番で作成します。

    既定の設定では、ステートを明確に判断できない場合、階層の各レベルにおける一番上の排他的 (OR) ステートがまずアクティブになります。この理由により、デフォルト遷移は Normal ステートと Off ステートに表示されます。この構成は、このモデルの設計要件を満たします。デフォルト ステートを設定するには、ステートを右クリックして [デフォルトとして設定] を選択します。

状態遷移表は次のようになります。

State transition table with two top-level states called Normal and Alarm. Normal has three substates called Off, Warmup, and On.

これで、各ステートのアクションを指定する準備ができました。

ステート アクションの指定

各ステートで発生する動作を記述するには、表でステート アクションを指定します。この演習では、変数 boiler_cmd と変数 doneWarmup (データ要件を参照) を使用して、ボイラーが Normal ステートと Alarm ステートに入る際の動作モードを初期化します。

  1. 次のステートで、ステート名の後ろをクリックし、Enter キーを押して、指定する entry アクションを入力します。

    ステート:入力する内容:結果の動作
    Off
    entry:
    boiler_cmd = 0;
    doneWarmup = false;
    ボイラーをオフにし、ボイラーがウォームアップしていないことを示します。
    Warmup
    entry:
    boiler_cmd = 2;
    ボイラーのウォームアップを開始します。
    On
    entry:
    boiler_cmd = 1;
    ボイラーをオンにします。
    Alarm
    entry:
    boiler_cmd = 0;
    ボイラーをオフにします。
  2. 状態遷移表を保存します。

状態遷移表は次のようになります。

State transition table with specified entry actions.

これで、あるステートから別のステートへ遷移する場合の条件とアクションを指定する準備が整いました。

遷移の条件とアクションの指定

ある動作モードから別の動作モードに切り替えるタイミングを記述するには、表で遷移の条件とアクションを指定します。この演習ではデータ要件で説明した変数を使用して、ステートメントを作成します。

  1. Normal ステートの行で次のように入力します。

    if
    [ALARM]
     
    Alarm

    シミュレーション中:

    1. チャートでは Normal ステートがアクティブになります。

    2. 各タイム ステップにおいて、ノーマル動作は ALARM の条件が真になるまで OffWarmupOn のステートを繰り返します。

    3. ALARM の条件が真になった場合、ボイラーは Alarm ステートに遷移し、ただちにシャットダウンします。

  2. Off ステートの行で次のように入力します。

    if
    [temp <= reference_low]
     
    Warmup

    シミュレーション中に現在のボイラーの温度が摂氏 23 度を下回ると、ボイラーはウォームアップを開始します。

  3. Warmup ステートの行で次のように入力します。

    ifelse-if
    [doneWarmup]after(10, sec)
     {doneWarmup = true;}
    OnOn

    シミュレーション中にボイラーが 10 秒間ウォームアップすると、On ステートに遷移します。

  4. On ステートの行で次のように入力します。

    if
    [temp >= reference_high]
     
    Off

    シミュレーション中に現在のボイラーの温度が摂氏 25 度を上回ると、ボイラーはオフになります。

  5. Alarm ステートの行で次のように入力します。

    if
    [CLEAR]
     
    Normal

    シミュレーション中にアラーム解除の条件が真になると、ボイラーはノーマル モードに戻ります。

  6. 状態遷移表を保存します。

状態遷移表は次のようになります。

State transition table with specified transition conditions and actions.

これで、[[シンボル] ペイン] を使用してデータ定義を追加する準備ができました。

データの定義

次に、状態遷移表のデータを定義します。データを使用して、表に含まれる MATLAB® 変数のサイズ、型、実数/複素数を明示的に定義できます。

データは [シンボル] ペインを使用して定義できます。[モデル化] タブで [[シンボル] ペイン] をクリックします。[シンボル] ペインに、表で割り当てる変数に関連付けられているデータが表示されます。入力、出力、およびパラメーターであるデータが Stateflow で推定されますが、解決するまではデータは未定義になります。未定義のデータは [名前] 列の警告記号で示されます。

Symbols Pane showing unresolved symbols in state transition table.

  1. 未定義のデータを解決するには、[シンボル] ペインで [未定義のシンボルを解決] アイコン をクリックします。Stateflow エディターによってチャート内の各シンボルにスコープが割り当てられます。

    シンボルスコープ
    reference_high入力データ
    reference_low入力データ
    temp入力データ
    boiler_cmd出力データ
    doneWarmupローカル データ
    ALARMパラメーター
    CLEARパラメーター

  2. Stateflow エディターはコンテキストに基づいてスコープを推定するため、常に適切なスコープが割り当てられるとは限りません。

    ALARMCLEAR のスコープを修正します。[タイプ] 列で [パラメーター データ] アイコン を選択します。ドロップダウン メニューから [入力データ] を選択します。

  3. それぞれの入力について、[端子] 列で正しい値を割り当てます。

    割り当て:端子:
    reference_low2
    reference_high1
    temp5
    ALARM3
    CLEAR4

  4. 状態遷移表を保存します。

Simulink モデルの State Transition Table ブロックに、定義した入力と出力が入力端子および出力端子として表示されます。

状態遷移表の接続とモデルの実行

  1. Simulink モデルで、状態遷移表を Simulink の入出力に接続します。

    Completed Simulink model.

  2. モデルを保存します。

  3. 状態遷移表を再度開きます。

  4. [実行] を選択して、シミュレーションを開始します。

    シミュレーションが実行されている間、状態遷移表のアニメーションによって、さまざまなステートが有効になる様子を確認できます。

対話型のデバッグを実行する場合は、さまざまなステートにブレークポイントを設定して、シミュレーションにおける異なった点でのデータ値を表示できます。デバッグの詳細については、チャートのデバッグのためのブレークポイントの設定を参照してください。

参考

トピック