Main Content

ブロックの状態データへのアクセス

周期的ダイナミクスと連続時間ダイナミクスを切り替えるシステムをモデル化するには、Simulink® ベースのステートを使用します。Simulink ベースのステートは、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。詳細については、ステートとしての Simulink サブシステムを参照してください。

Simulink ベースのステート内でブロックの状態は、Stateflow チャートの遷移アクションで読み取りおよび書き込みできます。ブロックの状態は、チャートの遷移でテキストを使用するか、または Simulink の State Reader ブロックと State Writer ブロックを使用して読み取りおよび書き込みできます。

たとえば、この例の Stateflow チャートは、棒高跳びの各段階の動作を順に実行する人物をモデル化します。

openExample("sf_pole_vault")
最初の段階は棒高跳び選手の助走で、これは Simulink ベースのステート Run_up でモデル化されています。2 番目の段階では、選手は地面にポールを突いて踏み切ります。これは、Simulink ベースのステート Take_off でモデル化されています。最後の段階では、選手がバーを跳び越え、ポールを手放します。これは Simulink ベースのステート Fly でモデル化されています。

Stateflow chart with three Simulink based states called Run_up, Take_off, and Fly.

ステート Run_up および Fly は、直交座標を使用するとより簡単にモデル化できます。ステート Take_off は、極座標を使用するとより簡単にモデル化できます。Simulink 関数 InitTakeOffInitFly は、ある座標系を別の座標系に切り替えるのに使用されます。このチャートの詳細については、Simulink ベースのステートを使用した棒高跳び選手のモデル化を参照してください。

テキストによるアクセス

次のサブシステムは Simulink ベースのステート Run_up 内に含まれています。 Run_up から Take_off への遷移が発生するためには、x 軸上の棒高跳び選手の位置 p(1)-4 より大きくなければなりません。

Simulink subsystem for state Run_up.

積分器ブロック Position の [状態名] を 'p' に設定すると、テキストを使用して Stateflow チャートからこのブロックの状態にアクセスできます。遷移条件の積分器ブロックの状態にアクセスするには、[Run_up.p(1)> -4] と入力します。この条件が真になると遷移が発生し、アクティブ ステートが Take_off になります。

Block parameters dialog box showing State Name set to p.

[シンボル] ペインで、ステート Run_up の下にステート p が表示されます。

Symbols pane showing state data p and v under Run_up.

グラフィックによるアクセス

Stateflow は State Reader ブロックと State Writer ブロックを使用して、Simulink ベースのステート内のサブシステムをモデル内の別の Simulink サブシステムに接続します。State Reader ブロックと State Writer ブロックは、それらの接続先の状態オーナー ブロック名を表示します。一方、状態オーナー ブロックには、State Reader ブロックまたは State Writer ブロックへのリンクを示すタグ が表示されます。タグの上のラベルをクリックすると、State Writer ブロックに移動するリンクが示されたリストが開きます。

State Reader ブロックのオーナー ブロックへの接続

次のサブシステムは Simulink 関数 InitTakeOff 内に含まれています。この関数は State Reader ブロックを使用してステート Run_up に接続し、pv を読み取ります。次に、この関数により、棒高跳び選手の位置と速度の直交座標の値がそれぞれ rthetardottheta_dot という極座標に変換されます。その後、これらの極座標には、ステート Take_off の状態オーナー ブロックを使用してアクセスします。

遷移アクションが発生すると、InitTakeOffState Reader ブロックは状態オーナー ブロックの状態を読み取ります。Simulink 関数の実行が完了すると、State Writer ブロックが Simulink ベースのステート Take_off の状態オーナー ブロックに書き込みます。

Simulink subsystem for state Take_off.

Simulink サブシステム内で State Reader ブロックまたは State Writer ブロックをオーナー ブロックに接続するには、次を行います。

  1. プロパティを開くには、State Reader をダブルクリックします。

  2. [状態オーナー セレクター ツリー] で、状態オーナー ブロックに指定するブロックへ移動します。この例では、[Position] を選択して、State Reader ブロックをステート Run_up 内の積分器 Position に接続します。

    Block parameters dialog box showing State Reader block in Take_off connected to the integrator block Position in Run_up.

  3. State Reader ブロックを積分器ブロック Position に接続することにより、この Simulink 関数は積分器 Position の実行に状態を使用できます。

関連するトピック