Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

状態遷移表は、順序モーダル ロジックを表現する際の代替方法です。ステートと遷移を Stateflow® チャートでグラフィカルに描画する代わりに、状態遷移表を使用してモーダル ロジックを表形式で表現します。状態遷移表は、Simulink® モデル内のブロックとしてのみサポートされています。詳細については、Stateflow の状態遷移表を参照してください。

設計要件

この例では、状態遷移表を使用して、ボイラーの温度調節に用いるバンバン制御器をモデル化する方法を示します。制御器は、以下の設計要件を満たすためにボイラーのオン/オフを切り替えなければなりません。

  • 高温は摂氏 25 度を超えることはできない。

  • 低温は摂氏 23 度を下回ることはできない。

  • 定常状態での動作には 10 秒間のウォームアップが必要である。

  • アラーム信号が発生した場合、ボイラーはただちにシャットダウンしなければならない。

  • アラーム解除信号が発生した場合には、ボイラーを再度オンにすることができる。

システム属性の特定

このバンバン制御器の動作モードとデータ要件は、設計要件に基づいて特定できます。

動作モード

ボイラーの上位レベルの動作モードは次のとおりです。

  • Normal (ノーマル) 動作: アラーム信号が発生していない場合。

  • Alarm (アラーム) ステート: アラーム信号が発生している場合。

ノーマルの動作中には、ボイラーは次の 3 つのいずれかのステートにあります。

  • Off (オフ): 温度が摂氏 25 度を超えている場合。

  • Warmup (ウォームアップ): オンになってから最初の 10 秒間。

  • On (オン): 温度が摂氏 23 度未満になった場合の10 秒間のウォームアップ後の定常状態。

データ要件

バンバン制御器では次のデータが必要です。

スコープ説明変数名
入力高温の指令値reference_high
入力低温の指令値reference_low
入力アラーム インジケーターALARM
入力アラーム解除インジケーターCLEAR
入力ボイラーの現在の温度temp
ローカルボイラーのウォームアップ完了のインジケーターdoneWarmup
出力ボイラーのモードを設定するコマンド (オフ、ウォームアップまたはオン)boiler_cmd

コントローラーを自分で作成するか、提供されているモデルを使用するかの選択

状態遷移表を使用してバンバン制御器のモデルを自分で作成するには、以下の演習を行います。それ以外の場合は、完成したモデルを開くことができます。

新しい状態遷移表の作成

バンバン制御器を表現するには、状態遷移表を使用します。グラフィカルな状態遷移図に比べ、状態遷移表では隣接するステート間の遷移を含むモーダル ロジックをコンパクトに表現できます。この例では、MATLAB® をアクション言語として使用します。

  1. 部分的に作成されたボイラー プラント モデルを開きます。

    このモデルには、バンバン制御器以外の必要な Simulink ブロックがすべて含まれています。

  2. 5 つの Outport ブロックと 1 つの Inport ブロックを削除します。

  3. ライブラリ ブラウザーを開きます。[シミュレーション] タブで、[ライブラリ ブラウザー] をクリックします。

  4. ライブラリ ブラウザーの左側のペインで Stateflow ライブラリを選択し、右側のペインから State Transition Table ブロックをボイラーのモデルにドラッグします。

    モデルは次のようになります。

  5. ライブラリ ブラウザーを閉じます。

これで、状態遷移表にステートと階層を追加する準備が整いました。

ステートと階層の追加

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

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

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

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

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

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

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

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

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

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

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

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

各ステートで発生する動作を記述するには、表でステート アクションを指定します。この演習では、変数 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. 状態遷移表を保存します。

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

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

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

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

  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. 状態遷移表を保存します。

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

これで、シンボル ウィザードを使用してデータ定義を追加する準備ができました。

データの定義

MATLAB 構文を使用する状態遷移表を作成するときは、C/C++ コードの生成のための言語要件があります。これらの要件の 1 つとして、すべての MATLAB 変数のサイズ、型、実数/複素数を定義しなければなりません。こうすることで、コンパイル時にこれらのプロパティが特定されます。作成した状態遷移表ではまだ明示的にデータを定義していませんが、ここでシンボル ウィザードを使用することができます。シミュレーション中に未解決のシンボルが見つかった場合は、シンボル ウィザードによってアラートが表示されてプロパティが推測され、欠損データが表に追加されます。

  1. Simulink モデルで、[実行] を選択します。

    次の 2 つのダイアログ ボックスが表示されます。

    • 診断ビューアー: 状態遷移表に未解決のシンボルがあることを示します。

    • シンボル ウィザード: 欠損データの解決を試みます。ウィザードでは、入力 ALARM and CLEAR 以外のすべてのデータのスコープが正しく推測されます。

  2. シンボル ウィザードの [スコープ] ドロップダウン リストから [入力] を選択して、ALARMCLEAR のスコープを修正します。

  3. モデル エクスプローラーが開いたら、シンボル ウィザードによって必要なデータ定義がすべて正しく追加されたかどうかを検証します。

    入力の一部が誤った端子に割り当てられています。

  4. モデル エクスプローラーの [コンテンツ] ペインで、以下のように入力端子を再度割り当てます。

    割り当て:端子:
    reference_low2
    reference_high1
    temp5
    ALARM3
    CLEAR4
  5. 状態遷移表を保存します。

  6. 診断ビューアーとモデル エクスプローラーを閉じます。

Simulink モデルの State Transition Table ブロックに、定義した入力と出力が表示されます。これで、これらの入出力を Simulink 信号に接続し、モデルを実行する準備ができました。

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

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

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

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

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

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

Scope ブロックに次の出力が表示されます。

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

グラフィカルな表現の表示

Stateflow では、作成した状態遷移表のグラフィカルな表現が読み取り専用で自動的に生成されます。

  1. [デバッグ] タブで、[自動チャートの表示] をクリックします。

    最上部の状態遷移図は以下のようになります。

    Normal ステートがサブチャートとして表示されます。

  2. チャートに含まれるステートおよび遷移を表示するには、Normal ステートをダブルクリックします。

関連するトピック