メインコンテンツ

ジャンクションを使用した遷移の接続

ジャンクションを使用して、複数の遷移を単一パス、分岐パス、またはフロー チャートに接続できます。

Stateflow® では、"パス" は遷移元を遷移先に接続する 1 つ以上の遷移です。それぞれの遷移をジャンクションに接続することで、複数の遷移をもつパスを作成できます。ジャンクションは判定点を表すグラフィカル オブジェクトであり、キャンバス上で円として表示されます。たとえば、以下のチャートでは、複数の遷移とジャンクションが、あるステートから別のステートへの単一パスを形成しています。

ステートまたはジャンクションは、複数の入力パスまたは出力パスをもつことができます。ステートまたはジャンクションに複数の出力パスがある場合、チャートは評価する順にパスに番号を付けます。

この例では、ジャンクションを使用して、充電式バッテリー システムのモデル内のフロー チャートを作成します。フロー チャートは、バッテリーの制限値を超えないように、バッテリー システムの出力を、接続されたデバイスの要求に合わせます。

モデルを開く

モデルを作成するには、チュートリアルの前のステップの指示に従います。または、上記の [モデルを開く] ボタンを使用して、sfGetStartedFlowchart モデルを開きます。

Chart ブロックをダブルクリックして、Battery チャートを開きます。

ステート ChargeDischarge は、バッテリー システムの動作モードを表しています。それぞれのステートには、バッテリーが満たされるか空になったときの充放電速度を表す子ステートが含まれます。入力 isCharging はアクティブ ステートを決定します。データ sentPower および charge は、バッテリーの出力ワット数と充電レベルを表します。

フロー チャートの作成

Stateflow で、フロー チャートは、子がジャンクションおよび遷移のみで構成されるチャートまたはステートを指します。フロー チャート内のすべてのパスは、単一の共有ジャンクションで終了する必要があります。チャート階層の任意のレベルでフロー チャートを作成できます。

現在、バッテリーの放電と電力供給が同時に行われている場合、常に同じワット数が出力されます。Powered ステートで、バッテリー出力を接続デバイス要求に合わせ、最大値を超えないようにするフロー チャートを作成します。

バッテリーの供給可能電力を超える電力を要求しているデバイスを表すパスを追加します。

  1. Discharge ステートで、entry アクションを削除します。

  2. Powered ステートで、during アクションを削除します。

  3. Powered ステートで、最初のジャンクションを追加します。パレットで、[ジャンクション] アイコンをクリックします。ジャンクションを Powered ステートに配置します。

  4. 2 番目のジャンクションを最初のジャンクションの右に追加します。

  5. 3 番目のジャンクションを 2 番目のジャンクションの下に追加します。

  6. 最初のジャンクションから 2 番目のジャンクションへの遷移を描画します。条件 [deviceDemand>maxPower] を追加します。

  7. 2 番目のジャンクションから 3 番目のジャンクションへの遷移を描画します。アクション {sentPower=maxPower;} を追加します。

バッテリー制限内の電力要求を表すパスを追加します。

  1. 4 番目のジャンクションを最初のジャンクションの下に追加します。

  2. 最初のジャンクションから 4 番目のジャンクションへの遷移を描画します。アクション {sentPower=deviceDemand;} を追加します。

  3. 3 番目のジャンクションから 4 番目のジャンクションへの遷移を作成します。

最初のジャンクションの数字は、評価順序を示しています。[deviceDemand>maxPower] のラベルが付いた遷移は順位ラベルが 1 であり、最初に評価されることを示します。{sentPower=deviceDemand;} のラベルが付いた遷移は順位ラベルが 2 であり、2 番目に評価されることを示します。

終端ジャンクションは、出力遷移のないジャンクションです。両方のパスを共有終端ジャンクションに接続します。終端ジャンクションへの遷移では、出力ワット数に比例するようにバッテリーの充電を減らします。

  1. 5 番目のジャンクションを 4 番目のジャンクションの下に追加します。

  2. 4 番目のジャンクションから 5 番目のジャンクションへの遷移を作成します。アクション {charge=charge-sentPower;} を追加します。

内部遷移を使用したアクティブなステップの間の評価

内部遷移は during アクションのグラフィカルに相当するものです。ステートに内部遷移が含まれる場合、内部遷移はステートがアクティブなすべてのステップを評価しますが、ステートがアクティブまたは非アクティブになったステップは評価しません。ステートに内部遷移と、子ステート間の遷移の両方が含まれる場合、内部遷移が最初に評価されます。ステートの端からステート内のオブジェクトへの遷移を描画することで、内部遷移を作成できます。

Powered ステートの端から最初のジャンクションへの内部遷移を描画します。

チャート データの定義

フロー チャートで作成したデータを定義します。

  1. [シンボル] ペインの maxPower 行で、[タイプ] の下のアイコンをクリックして Local Data を選択します。[値]3.5 に設定します。

  2. deviceDemand 行で、[タイプ] の下のアイコンをクリックして Input Data を選択します。

  3. charge 行で、[値]100 に設定します。

deviceDemand 入力端子に接続するブロックを追加します。

  1. 最上位モデルを開きます。

  2. Sine Wave ブロックを追加します。出力端子を、Battery チャートの "deviceDemand" 端子に接続します。

  3. 0 で開始し、最大値 5 に達する正弦波を指定します。ブロックをダブルクリックしてブロック ダイアログ ボックスを開き、[振幅] および [バイアス] パラメーターを 2.5 に設定します。[位相] パラメーターを -pi/4 に設定します。

  4. Sine Wave ブロックから Battery チャートへの信号線を右クリックして、[選択した信号のログ] をクリックします。Battery チャートから Scope ブロックへの信号線にもこの手順を繰り返します。

モデルのシミュレーション

モデルのシミュレーションを実行して、結果を確認します。

  1. モデルのシミュレーションを実行するには、[シミュレーション] タブで [実行] をクリックします。

  2. シミュレーション データ インスペクターを開くには、[シミュレーション] タブで [データ インスペクター] をクリックします。

  3. [検査] タブで、Battery:1 および Sine Wave:1 を選択します。

バッテリーの出力ワット数は、電力消費の立ち上がりと立ち下がり (最大 3.5) に一致しています。シミュレーションの終わり近くでバッテリーの電力が不足し、出力ワット数が 0 に減少しています。

バッテリー システムの出力電力は想定どおりです。しかし、バッテリーの電力が不足した場合、システムは動作できなくなります。

チュートリアルの次のステップでは、メイン バッテリーが空になった場合に必須の機能を維持する、非充電式緊急用バッテリーを追加します。バッテリーの同時操作をモデル化するには、パラレル ステートとイベントを使用します。

参考

トピック