Main Content

Stateflow の連続時間モデル

ハイブリッド システムでは、物理的なイベントおよび条件に応じて、モーダル ロジックを使用してモードからモードへ遷移します。これらのシステムでは、各モードは連続時間のダイナミクスによって制御されます。このタイプのハイブリッド システムの簡単な例としては、跳ねるボールが挙げられます。ボールは空中を連続的に運動し、地面に衝突した時点でモードの変化、すなわち不連続が発生します。その結果、ボールは急激に方向や速度を変えます。詳細については、跳ねるボールの連続時間でのモデル化を参照してください。

連続時間モデリング用の Stateflow® チャートを構成することにより、連続および離散のモードの変更に対応するハイブリッド システムをシミュレートします。Stateflow チャートでは、モーダル ロジックを一連のステート、遷移およびフロー チャートとして簡潔かつ直観的に表すことができます。また、時間導関数への自動アクセスを含む連続ローカル変数として、状態情報を表すこともできます。

連続時間シミュレーションは、Simulink® モデルの Stateflow チャートでのみサポートされます。連続システムにモーダル ロジックが含まれていない場合は、Simulink モデルの使用を検討してください。詳細については、簡単な連続システムのモデル作成 (Simulink)を参照してください。

連続時間シミュレーション用の Stateflow チャートの設定

Stateflow チャートの連続更新を有効にするには、Stateflow チャートのプロパティの指定の説明に従って、チャートの [更新方法] プロパティを [連続] に設定します。

既定では、ゼロクロッシング検出が有効です。このオプションを無効にするには、[ゼロクロッシング検出を有効にする] チェック ボックスをオフにします。詳細については、ゼロクロッシング検出の無効化を参照してください。

メモ

連続時間モデリングには、Moore チャートは使用できません。

Simulink ソルバーとの相互作用

マイナー タイム ステップでのモードの保持

連続時間シミュレーション中は、Stateflow チャートのモードが更新されるのはメジャー タイム ステップでのみです。マイナー タイム ステップでは、チャートは最後のメジャー タイム ステップ中のチャートのステートに基づいて出力を計算します。詳細については、連続サンプル時間 (Simulink)を参照してください。

各タイム ステップでの連続状態の計算

ローカル連続変数を定義すると、Stateflow チャートを使用して、導関数にプログラムでアクセスできるようになります。Simulink ソルバーは、前のタイム ステップにおけるこれらの変数の値およびその導関数に基づいて、現在のタイム ステップにおけるチャートの連続状態を計算します。詳細については、連続ソルバーと離散ソルバー (Simulink)を参照してください。

ステート遷移に対するゼロクロッシングの登録

ステート遷移が発生するタイミングを特定するために、Stateflow チャートはゼロクロッシング関数を Simulink ソルバーに登録します。Simulink がモードの変化を検出すると、ソルバーは、前のメジャー タイム ステップからの順方向検索により、ステート遷移が発生したタイミングを検出します。詳細については、ゼロクロッシング検出 (Simulink)を参照してください。

ゼロクロッシング検出の無効化

ステート遷移でのゼロクロッシング検出では、精度とパフォーマンスの間にトレードオフが生じる可能性があります。ゼロクロッシングを検出する場合、Simulink モデルはステップ サイズを必要以上に削減することなく、正確にモード変化をシミュレートします。"チャタリング" (連続動作の 2 つのモード間での頻繁な変動) が発生するシステムでは、ゼロクロッシングの検出はシミュレーション時間に影響を及ぼす可能性があります。チャタリングに対し Simulink モデルでゼロクロッシングの連続発生をチェックする必要があるため、シミュレーション速度が低下することがあります。このようなシミュレーションでは、以下を実行できます。

  • ゼロクロッシング検出を無効にする。

  • チャート用に別のゼロクロッシング検出アルゴリズムを選択する。

  • Simulink モデルでゼロクロッシングの頻度を制御するパラメーターを変更する。

[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[ソルバー] ペインでモデルのゼロクロッシング オプションを変更します。詳細については、ゼロクロッシング検出 (Simulink)を参照してください。

連続時間シミュレーションのガイドライン

連続時間シミュレーションの結果の整合性と滑らかさを維持するには、チャートを Stateflow チャート セマンティクスの制限付きサブセットに制限します。セマンティクスを制限することで、入力が以下のような予測不能な要素に依存しなくなります。

  • Simulink ソルバーが各メジャー タイム ステップで使用するマイナー間隔の数。

  • 積分およびゼロクロッシングのアルゴリズムを安定させるために必要な反復回数。

これらの副作用を最小にすることで、Stateflow チャートはマイナー タイム ステップではステートを維持し、メジャー タイム ステップ中にのみステートを更新できるようになります。これにより、Stateflow チャートは連続時間で一定のステートに基づいて出力を計算できるようになります。

連続時間チャートには少なくとも 1 のステートを含める

連続時間シミュレーション中、チャートでは、アクティブ ステートの during アクションに相当するマイナー タイム ステップで出力が更新されます。ステートを含まないチャートでは、出力が生成されません。連続時間でステートのないチャートの動作を再現するには、during アクションでグラフィカル関数を呼び出す単一のステートを作成します。

ローカル データは entryexit、遷移アクションで更新する

連続時間シミュレーションで精度を維持するには、ステート遷移に相当するメジャー タイム ステップ中にのみ、離散および連続のローカル データを更新します。ステート遷移中は、以下のタイプのアクションのみが発生します。

  • ステート exit アクション (遷移の開始時に、ステートからの出力前に発生)。

  • ステート entry アクション (遷移の終了時に、新しいステートへの入力後に発生)。

  • 遷移アクション (遷移中に発生)。

  • 遷移の条件アクション (遷移がステートに直接到達する場合のみ)。たとえば、次のチャートは、条件 c2 および c3 が偽の場合でも、アクション n++ を実行します。ステート遷移がないため、条件アクションはマイナー タイム ステップで n を更新し、エラーになります。

    Stateflow chart with states called A, B, and C.

ステート during アクションはマイナー タイム ステップで発生するため、このアクションではローカル連続データへの書き込みを行わないでください。

導関数はステート during アクションで計算する

マイナー タイム ステップでは、連続時間チャートはステート during アクションのみを実行します。Simulink モデルはマイナー タイム ステップ中に連続時間導関数を読み込むため、最新の計算を提供するには、during アクションで導関数を計算します。

ステート during アクションまたは遷移条件では出力や導関数を読み込まない

マイナー タイム ステップでは、出力と導関数に最新の値が反映されない可能性があります。出力を滑らかにするには、ローカル離散データ、ローカル連続データ、およびチャート入力から値を計算します。

ステート during アクションまたは遷移条件内では Simulink 関数を呼び出さない

マイナー タイム ステップ中は、Simulink 関数を呼び出すことはできません。Simulink 関数は、メジャー タイム ステップ中に発生するアクション、つまり、ステートの entry または exit アクション、および遷移アクションでのみ呼び出してください。ステート during アクションまたは遷移条件で Simulink 関数を呼び出すと、シミュレーション中にエラーが発生します。詳細については、Stateflow チャートでの Simulink 関数の再利用を参照してください。

during アクション内の条件は離散変数を使用して管理する

メジャー タイム ステップ間でのモードの変化を防ぐために、during アクションの制御フローに影響する条件は離散変数に依存します。離散変数は、メジャー タイム ステップ間で値が変化しません。

入力イベントを使用しない

入力イベントが存在すると、チャートの動作は Triggered Subsystem と同様になり、連続時間でシミュレーションできなくなります。たとえば、チャートが連続更新方法を使用する場合は、以下のモデルはエラーを生成します。

Simulink model containing a Stateflow chart with an input event.

入力イベントの動作を再現するには、Hit Crossing ブロックを介して、連続時間チャートへの入力として入力信号を渡します。

Simulink model containing a Stateflow chart and a Hit Crossing block.

内部遷移を使用しない

連続時間シミュレーション中にモードの変化が発生した場合は、遷移先ステートの entry アクションはステート遷移が発生したことを Simulink モデルに通知します。内部遷移では、チャートが entry アクションを実行することはありません。詳細については、内部遷移を参照してください。

時相論理の使用を制限する

連続時間シミュレーションにはチック (tick) という概念は存在しないため、イベントベースの時相論理は使用しないでください。連続時間シミュレーションでは、絶対時間の時相論理を使用してください。詳細については、時相論理を使用したチャート実行の制御を参照してください。

変化検出演算子を使用しない

変化検出を実装するため、Stateflow は変数のバッファリングを実行します。この処理は、マイナー タイム ステップと次のメジャー タイム ステップの間でチャートの動作に影響を及ぼします。

操作点の値を変更しない

連続時間チャートの操作点は読み取り専用です。連続時間チャートの操作点を保存して、シミュレーションの初期状態として使用することができます。ただし、操作点のステート アクティビティやデータ値を変更することはできません。詳細については、操作点に関する制限を参照してください。

関連するトピック