Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ステートとしての 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 です。このステートは、跳躍に向けて地面を助走する棒高跳び選手をモデル化します。棒高跳び選手は、$x$ 軸上の -10 から開始し、0 へ向かって走ります。棒高跳び選手が地面を移動するにつれて、xy 平面上の棒高跳び選手の位置は常に変化しますが、走っている状態は維持されます。このモデルでは、積分器ブロックである PositionVelocity は、Simulink 関数 InitTakeOff 内の State Reader ブロックの状態オーナー ブロックです。このサブシステムは棒高跳び選手の直交座標を出力します。

直交座標から極座標への変換

$x$ 軸上の棒高跳び選手の位置 Run_up.p(1) が -4 より大きくなると、Run_up から Take_off への遷移が発生します。この遷移中に InitTakeOff が初期化され、State Reader ブロックがそのオーナー ブロックに接続されて、この関数が実行されます。この関数により、PositionVelocity の直交座標が rthetardot、および theta_dot という極座標に変換されます。これらの座標は、ステート Take_off のオーナー ブロックに接続された State Writer ブロックとして出力されます。Simulink 関数 InitTakeOff には次のロジックが含まれます。

棒高跳び選手の踏み切りのモデル化

$x$ 軸上の棒高跳び選手の位置 Run_up.p(1) が -4 より大きくなると、Simulink ベースのステート Take_off がアクティブ ステートになります。このステートは、跳躍の踏み切りの段階における棒高跳び選手をモデル化します。このサブシステムは棒高跳び選手の直交座標を出力します。

極座標から直交座標への変換

棒高跳び選手の角度 theta$\pi/2$ 未満になると、Take_off から Fly への遷移が発生します。この遷移中に InitFly が初期化され、State Reader ブロックがそのオーナー ブロックに接続されて、この関数が実行されます。この関数により、rthetardot、および theta_dot の極座標が xy_integ および xydot という直交座標に変換されます。これらの座標は、ステート Fly のオーナー ブロックに接続された State Writer ブロックとして出力されます。Simulink 関数 InitFly には次のロジックが含まれます。

棒高跳び選手の自由落下のモデル化

棒高跳び選手の角度 theta$\pi/2$ 未満になると、Simulink ベースのステート Fly がアクティブ ステートになります。このステートでは、棒高跳び選手が跳躍してバーを飛び越えて、地面に落下するところをモデル化します。棒高跳び選手が落下するにつれて、xy 平面上の選手の位置は常に変化しますが、落下している状態は維持されます。このモデルでは、積分器ブロックである xydot と xy_integ は、Simulink 関数 InitFly 内の State Writer ブロックの状態オーナー ブロックです。このサブシステムは棒高跳び選手の直交座標を出力します。

このシミュレーションの結果が Record ブロックに表示されます。

制限

Simulink ベースのステートは、以下と併用できません。

  • Moore チャート

  • 離散イベント チャート

  • HDL Coder

  • PLC Coder

  • Simulink Code Inspector

  • スーパー ステップ遷移

Simulink ベースのステートではデバッグはサポートされていません。

関連するトピック