このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ステートとしての Simulink サブシステム
Simulink® サブシステムを Stateflow® ステート内で使用することにより、ハイブリッド動的システム、または周期的ダイナミクスと連続時間ダイナミクスの間で切り替わるシステムをモデル化できます。Stateflow チャート内で Simulink ベースのステートを使用して、周期的または連続的な動的システムを、遷移を使用したスイッチ ロジックと組み合わせてモデル化できます。Simulink ベースの各ステート内のチャートから入出力にアクセスできます。Simulink ベースのステートは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。
Simulink ベースのステートを切り替える際に Simulink ブロックを初期化するには、Stateflow のテキスト表記か、Simulink の State Reader ブロックと State Writer ブロックを使用します。
リンクされた Simulink ベースのステートを作成するには、ライブラリを使用してアクション サブシステムを保存します。アクション サブシステムをライブラリ モデルから Stateflow チャートに保存すると、リンクされた Simulink ベースのステートとして表示されます。ライブラリ ブロックを更新すると、そのブロックを含むすべての Stateflow チャートに変更内容が反映されます。
Simulink ベースのステートを使用すると、ハイブリッド システムをモデル化するために Stateflow で複雑なテキスト構文を使用する必要がなくなります。
Simulink ベースのステートを使用する場合
次の場合に Simulink ベースのステートを使用します。
連続ダイナミクスまたは周期的ダイナミクスを含むハイブリッド動的システムをモデル化する場合。
さまざまな動作モード間で、システム ダイナミクスの構造が大きく変わる場合 (PID コントローラーのモデル化など)。
ロジックを断続的に呼び出すシステムでは、Simulink 関数を使用します。
Simulink アルゴリズムの構造にはほとんど変化がなくても、特定のゲインやパラメーターがさまざまなモデル間で切り替わる場合は、Stateflow 外部の Simulink ロジックを使用します。このようなアルゴリズムの例として、ゲイン スケジュールがあります。Simulink でのゲイン スケジュール制御システムのモデル化 (Simulink Control Design)を参照してください。
Simulink ベースのステートを使用した棒高跳び選手のモデル化
次の Stateflow チャートは、Simulink ベースのステートを使用して、棒高跳びの各段階の動作を順に実行する人物をモデル化します。
最初の段階は棒高跳び選手の助走で、これは Simulink ベースのステート Run_up
でモデル化されています。2 番目の段階では、選手は地面にポールを突いて踏み切ります。これは Simulink ベースのステート Take_off
でモデル化されています。最後の段階では、選手がバーを跳び越え、ポールを手放します。これは Simulink ベースのステート Fly
でモデル化されています。
ステート Run_up
および Fly
は、直交座標を使用するとより簡単にモデル化できます。ステート Take_off
は、極座標を使用するとより簡単にモデル化できます。座標系を別の座標系に切り替えるには、Simulink 関数の InitTakeOff
および InitFly
を使用します。
棒高跳び選手の助走のモデル化
チャート PoleVaulter
のデフォルト ステートは Run_up
です。このステートは、跳躍に向けて地面を助走する棒高跳び選手をモデル化します。棒高跳び選手は、 軸上の -10 から開始し、0 へ向かって走ります。棒高跳び選手が地面を移動するにつれて、xy 平面上の棒高跳び選手の位置は常に変化しますが、走っている状態は維持されます。このモデルでは、積分器ブロックである
Position
と Velocity
は、Simulink 関数 InitTakeOff
内の State Reader ブロックの状態オーナー ブロックです。このサブシステムは棒高跳び選手の直交座標を出力します。
直交座標から極座標への変換
軸上の棒高跳び選手の位置
Run_up.p(1)
が -4 より大きくなると、Run_up
から Take_off
への遷移が発生します。この遷移中に InitTakeOff
が初期化され、State Reader ブロックがそのオーナー ブロックに接続されて、この関数が実行されます。この関数により、Position
と Velocity
の直交座標が r
、theta
、rdot
、および theta_dot
という極座標に変換されます。これらの座標は、ステート Take_off
のオーナー ブロックに接続された State Writer ブロックとして出力されます。Simulink 関数 InitTakeOff
には次のロジックが含まれます。
棒高跳び選手の踏み切りのモデル化
軸上の棒高跳び選手の位置
Run_up.p(1)
が -4 より大きくなると、Simulink ベースのステート Take_off
がアクティブ ステートになります。このステートは、跳躍の踏み切りの段階における棒高跳び選手をモデル化します。このサブシステムは棒高跳び選手の直交座標を出力します。
極座標から直交座標への変換
棒高跳び選手の角度 theta
が 未満になると、
Take_off
から Fly
への遷移が発生します。この遷移中に InitFly
が初期化され、State Reader ブロックがそのオーナー ブロックに接続されて、この関数が実行されます。この関数により、r
、theta
、rdot
、および theta_dot
の極座標が xy_integ
および xydot
という直交座標に変換されます。これらの座標は、ステート Fly
のオーナー ブロックに接続された State Writer ブロックとして出力されます。Simulink 関数 InitFly
には次のロジックが含まれます。
棒高跳び選手の自由落下のモデル化
棒高跳び選手の角度 theta
が 未満になると、Simulink ベースのステート
Fly
がアクティブ ステートになります。このステートでは、棒高跳び選手が跳躍してバーを飛び越えて、地面に落下するところをモデル化します。棒高跳び選手が落下するにつれて、xy 平面上の選手の位置は常に変化しますが、落下している状態は維持されます。このモデルでは、積分器ブロックである xydot と xy_integ は、Simulink 関数 InitFly 内の State Writer ブロックの状態オーナー ブロックです。このサブシステムは棒高跳び選手の直交座標を出力します。
このシミュレーションの結果が Record ブロックに表示されます。
制限
Simulink ベースのステートは、以下と併用できません。
Moore チャート
離散イベント チャート
HDL Coder
PLC Coder
Simulink Code Inspector
スーパー ステップ遷移
Simulink ベースのステートではデバッグはサポートされていません。