ブロックの状態データへのアクセス
周期的ダイナミクスと連続時間ダイナミクスを切り替えるシステムをモデル化するには、Simulink® ベースのステートを使用します。Simulink ベースのステートは、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。詳細については、ステートとしての Simulink サブシステムを参照してください。
Simulink ベースのステート内でブロックの状態は、Stateflow チャートの遷移アクションで読み取りおよび書き込みできます。ブロックの状態は、チャートの遷移でテキストを使用するか、または Simulink の State Reader ブロックと State Writer ブロックを使用して読み取りおよび書き込みできます。
たとえば、この例の Stateflow チャートは、棒高跳びの各段階の動作を順に実行する人物をモデル化します。
openExample("stateflow/PoleVaulterExample")
Run_up
でモデル化されています。2 番目の段階では、選手は地面にポールを突いて踏み切ります。これは、Simulink ベースのステート Take_off
でモデル化されています。最後の段階では、選手がバーを跳び越え、ポールを手放します。これは Simulink ベースのステート Fly
でモデル化されています。ステート Run_up
および Fly
は、直交座標を使用するとより簡単にモデル化できます。ステート Take_off
は、極座標を使用するとより簡単にモデル化できます。Simulink 関数 InitTakeOff
と InitFly
は、ある座標系を別の座標系に切り替えるのに使用されます。このチャートの詳細については、Simulink ベースのステートを使用した棒高跳び選手のモデル化を参照してください。
テキストによるアクセス
次のサブシステムは Simulink ベースのステート Run_up
内に含まれています。 Run_up
から Take_off
への遷移が発生するためには、x 軸上の棒高跳び選手の位置 p(1)
が -4
より大きくなければなりません。
積分器ブロック Position
の [状態名] を 'p'
に設定すると、テキストを使用して Stateflow チャートからこのブロックの状態にアクセスできます。遷移条件の積分器ブロックの状態にアクセスするには、[Run_up.p(1)> -4]
と入力します。この条件が真になると遷移が発生し、アクティブ ステートが Take_off
になります。
[シンボル] ペインで、ステート Run_up
の下にステート p
が表示されます。
グラフィックによるアクセス
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
に接続し、p
と v
を読み取ります。次に、この関数により、棒高跳び選手の位置と速度の直交座標の値がそれぞれ r
と theta
、rdot
と theta_dot
という極座標に変換されます。その後、これらの極座標には、ステート Take_off
の状態オーナー ブロックを使用してアクセスします。
遷移アクションが発生すると、InitTakeOff
の State Reader ブロックは状態オーナー ブロックの状態を読み取ります。Simulink 関数の実行が完了すると、State Writer ブロックが Simulink ベースのステート Take_off
の状態オーナー ブロックに書き込みます。
Simulink サブシステム内で State Reader ブロックまたは State Writer ブロックをオーナー ブロックに接続するには、次を行います。
プロパティを開くには、State Reader をダブルクリックします。
[状態オーナー セレクター ツリー] で、状態オーナー ブロックに指定するブロックへ移動します。この例では、
[Position]
を選択して、State Reader ブロックをステートRun_up
内の積分器Position
に接続します。State Reader ブロックを積分器ブロック
Position
に接続することにより、この Simulink 関数は積分器Position
の実行に状態を使用できます。
関連するトピック
- ステートとしての Simulink サブシステム
- State Reader (Simulink)
- State Writer (Simulink)