Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

遷移の追加

このワークフローの第 4 段階では、"ステート間の遷移の定義" を行います。

自分で作成するか提供モデルを使用するかの選択

遷移を自分で追加するには、この節の演習を行ってください。演習を行わない場合は、提供されているモデルを開いて、遷移がチャートでどのように表示されているかを確認してください。MATLAB® プロンプトで次のコマンドを入力します。

addpath(fullfile(docroot, 'toolbox', 'stateflow', 'gs', 'examples'))
Stage4Transitions

ステート間の遷移の定義を設計する際の注意事項

以下の節では、ステートの遷移の定義に関して行う決定について説明します。

動作モード間でいつどのように遷移するかの決定

"遷移" によって、あるステートから別のステートへと、システムのロジックの流れの道筋が作成されます。ステート A からステート B への遷移が発生すると、ステート A は非アクティブになり、ステート B はアクティブになります。

遷移には方向性があり、Stateflow® では矢印付きのラインで表します。遷移は単方向であり、双方向にはできません。2 つのステート間の各方向の流れに対し、それぞれ遷移を追加しなければなりません。

排他的 (OR) ステートには遷移が必要です。2 つの排他的ステートは同時にアクティブにはならないことを説明しました。したがって、遷移を追加して、ある排他的ステートから別の排他的ステートへといつどこで制御が移行するのかを指定する必要があります。

通常、パラレル (AND) ステートは同時に実行できるため、遷移は不要です。

Air Controller チャートでは、電源スイッチのオン/オフが切り替えられ、電源がオンのときはファンのスイッチのオン/オフが切り替えられるシステムをモデル化します。6 つの排他的 (OR) ステートによりこれらの動作モードを表します。このアクティビティをモデル化するには、排他的 (OR) ステートの間に以下の遷移を追加する必要があります。

  • PowerOff から PowerOn

  • PowerOn から PowerOff

  • FAN1.Off から FAN1.On

  • FAN1.On から FAN1.Off

  • FAN2.Off から FAN2.On

  • FAN2.On から FAN2.Off

既定の遷移を配置する位置の決定

優れた設計基準では、各階層レベルで排他的 (OR) ステートに対するデフォルト遷移を指定することが求められます。Stateflow 階層内の同じレベルにおいて複数の排他的 (OR) ステートの中でどれがアクティブになるのかが不明確な場合に、"デフォルト遷移" によってアクティブになる排他的 (OR) ステートを指定します。Air Controller チャートにはこのような不明確な領域が 3 つあります。

  • チャートが起動するとき、電源はオンとオフのいずれになるか

  • FAN1 がアクティブになるとき、オンとオフのいずれになるか

  • FAN2 がアクティブになるとき、オンとオフのいずれになるか

それぞれの場合で初期状態はオフになるように、デフォルト遷移を PowerOffFAN1.Off、および FAN2.Off の各ステートに追加します。

遷移のガード方法の決定

"遷移のガード" とは、あるステートから別のステートへの遷移の発生を可能にする条件、アクション、またはイベントを指定することを意味します。Air Controller チャートの設計に基づき、ある排他的動作モードから別の動作モードへの遷移をガードするための要件を以下に示します。

遷移発生のタイミングガード方法

PowerOff から PowerOn

一定の時間間隔

エッジトリガー イベントを指定

PowerOn から PowerOff

FAN1.Off から FAN1.On

施設内の温度が 120 度を超えたとき

温度の値に基づいて条件を指定

FAN1.On から FAN1.Off

施設内の温度が 120 度より下がったとき

FAN2.Off から FAN2.On

1 台のファンでは必要な冷却が得られないことを示すしきい値である 150 度の温度を超えたとき

FAN2.On から FAN2.Off

温度が 150 度より下がったとき

ステート間の遷移の描画

ステート間の遷移の定義を設計する際の注意事項では、以下の遷移が Air Controller チャートで発生することを説明しました。

  • 制御システムの電源スイッチがオンまたはオフになる。

  • それぞれのファンのスイッチがオンまたはオフになる。

PowerOnPowerOff のステート間、および各ファンの OnOff のステート間に遷移を描画することにより、このアクティビティをモデル化します。次の手順に従います。

  1. モデル Stage3Actions を開きます。ここまでの演習で作成したものでも、第 3 段階用に用意されたモデルでも構いません。

    用意されたモデルを開くには、MATLAB プロンプトで以下のコマンドを入力します。

    addpath(fullfile(docroot, 'toolbox', 'stateflow', 'gs', 'examples'))
    Stage3Actions

  2. モデルに Stage4Transitions という名前を付けてローカルの作業フォルダーに保存します。

  3. Stage4Transitions で Air Controller ブロックをダブルクリックして Stateflow チャートを開きます。

    チャートがデスクトップで開きます。

  4. PowerOff ステートから PowerOn ステートへと遷移を描きます。

    1. ポインターの形が十字に変わるまで PowerOff の上端にポインターを移動します。

    2. 左のマウス ボタンを押したままポインターを PowerOn の下端へドラッグし、マウス ボタンを離します。

      PowerOff から PowerOn へ向かう遷移が表示されます。

    3. 同じ手順に従って、PowerOn から PowerOff への遷移を描きます。

      チャートは以下のようになります。

  5. 手順 3 で説明した手順に従って、各ファンの Off ステートと On ステートとの間に以下の遷移を描きます。

    • FAN1Off から On への遷移

    • FAN1On から Off への遷移

    • FAN2Off から On への遷移

    • FAN2On から Off への遷移

    チャートは以下のようになります。

  6. Stage4Transitions を保存し、次の演習に備えてチャートは開いたままにします。

デフォルト遷移の追加

既定の遷移を配置する位置の決定では、PowerOffFAN1.Off、および FAN2.Off にデフォルト遷移を追加する必要があることを説明しました。次の手順に従います。

  1. Stateflow エディターのオブジェクト パレットでデフォルト遷移アイコンを左クリックします。

  2. ポインターを描画領域に移動します。

    ポインターの形が斜めの矢印に変わります。

  3. ポインターを PowerOff ステートの左端に合わせます。

  4. 矢印が端部と直交したらマウス ボタンを離します。

    デフォルト遷移が PowerOff ステートに加えられます。頭部が矢印で尾部が閉じた有向直線として表示されます。

  5. 同じ手順を繰り返して、デフォルト遷移を FAN1.OffFAN2.Off の上端に追加します。

    チャートは以下のようになります。

    ヒント

    デフォルト遷移の尾部の位置により、アクティブになるステートが決まります。したがって、デフォルト遷移によりアクティブになるステートの親の内部にデフォルト遷移が完全に収まるようにしてください。上記 Air Controller チャートの図では、FAN1.Off のデフォルト遷移は親ステートである FAN1 の内部に正しく収まっています。ここで以下のチャートについて考察します。

    この例では、デフォルト遷移の尾部が FAN1 ではなく PowerOn の内部に配置されています。したがって、この遷移では FAN1.Off ではなく FAN1 がアクティブになります。

  6. Stage4Transitions を保存し、次の演習に備えてチャートは開いたままにします。

遷移をガードする条件の追加

条件は大かっこで囲まれた式で表され、真または偽の値をとります。条件が真の場合は、遷移によって次のステートに移行します。条件が偽の場合は、遷移は発生せずに元のステートがアクティブなままとなります。

遷移のガード方法の決定で説明したように、気温によってファンのスイッチのオン/オフが決まります。この演習では、この動作をモデル化する条件を FAN1FAN2 の遷移に追加します。

次の手順に従います。

  1. FAN1.Off から FAN1.On への遷移をクリックします。

    遷移が強調表示され、疑問符 (?) が表示されます。

  2. 疑問符の横をクリックして点滅するテキスト カーソルを表示します。

  3. 以下の式を入力します。

    [temp >= 120]

    読みやすいように、条件を配置し直さなければならない場合があります。この場合は、条件の外側をクリックし、条件式を左クリックして別の場所へドラッグします。

  4. これらの手順を繰り返して、以下の条件を FAN1FAN2 の他の遷移に追加します。

    遷移条件
    FAN1.On から FAN1.Off[temp < 120]
    FAN2.Off から FAN2.On[temp >= 150]
    FAN2.On から FAN2.Off[temp < 150]

    チャートは以下のようになります。

  5. Stage4Transitions を保存し、次の演習に備えてチャートは開いたままにします。

遷移をガードするイベントの追加

"イベント" は、Stateflow チャートの実行中のアクティビティにトリガーをかける非グラフィカル オブジェクトです。イベントを定義する場所と方法に基づいて、遷移の発生、アクションの実行、およびステート ステータスの評価を行うようトリガーをかけることができます。この演習では遷移にトリガーをかけるイベントを定義します。

遷移のガード方法の決定で説明したように、制御システムでは定期的間隔で電源のオン/オフが繰り返されます。この動作をモデル化するには、まず入力信号の立ち上がりエッジまたは立ち下がりエッジで発生するイベントを定義し、そのイベントを PowerOn ステートと PowerOff ステート間の遷移と関連付けます。

エッジトリガー イベントを定義し、遷移と関連付けるには、以下の手順に従います。

  1. Stateflow エディターで、[モデル化] タブの [データの設計] にある [イベント入力] をクリックします。

    [イベント] プロパティ ダイアログ ボックスがデスクトップに開きます。

    イベントは端子 1 にトリガーをかけるように割り当てられていることに注意してください。

  2. 以下のプロパティを編集します。

    プロパティ指定する項目
    名前名前を SWITCH に変更します。
    トリガードロップダウン メニューから [両方] を選択して、イベントが信号の立ち上がりエッジか立ち下がりエッジのいずれかでトリガーされるようにします。
  3. [OK] をクリックし、変更を保存してダイアログ ボックスを閉じます。

  4. モデルを確認すると、Stateflow ブロックの上にトリガー端子が表示されていることがわかります。

    チャートに 1 つまたは複数の入力イベントを定義すると、Stateflow ソフトウェアによってブロックに単一のトリガー端子が追加されます。外部 Simulink® ブロックは、トリガー端子に接続した信号または信号ベクトルを介して、入力イベントをトリガーできます。

  5. Stateflow エディターに戻り、入力イベント SWITCH を遷移と関連付けます。

    1. PowerOff から PowerOn への遷移を選択し、疑問符をクリックしてテキスト カーソルを表示します。

    2. 定義したイベントの名前を「SWITCH」と入力します。

      読みやすいように、イベントのテキストを配置し直さなければならない場合があります。その場合は、テキストの外側をクリックし、テキストを左クリックして適切な場所へドラッグします。

    3. これらの手順を繰り返して、同じイベント SWITCHPowerOn から PowerOff への遷移に追加します。

    チャートは以下のようになります。

    遷移がイベント SWITCH と関連付けられたので、SWITCH が発生するたび、すなわちチャートにより立ち上がりエッジか立ち下がりエッジが検知されるたびに、制御システムによって電源のオン/オフが順に切り替えられます。

    sf_aircontrol モデルでは、Signal Builder ブロックのパルス信号 SWITCH がモデル階層の最上位に既に定義されていることに注意してください。

    ワークフローの次の段階では Stateflow チャートを SWITCH 信号と接続して、電源のオンとオフ間の遷移をトリガーします。

  6. Stage4Transitions を保存します。

次の手順-  これで、エッジトリガー イベントを実装して、チャートを一定間隔で起動する準備が整いました。トリガーの実装を参照してください。