Stateflow オブジェクトの作成と削除
Stateflow® API のオブジェクトは、Stateflow チャートのグラフィカル オブジェクトと非グラフィカル オブジェクトを表します。たとえば、API オブジェクト Stateflow.State および Stateflow.Transition は、Stateflow チャートのステートと遷移を表します。詳細については、Stateflow API の概要を参照してください。
Stateflow オブジェクトの作成
Stateflow API オブジェクトは、Stateflow API オブジェクトの階層で説明されている包含階層に整理されています。Stateflow オブジェクトを親オブジェクトの子として作成するには、まず親オブジェクトにアクセスします。次に、子オブジェクトを作成する関数の入力引数として親オブジェクトを使用します。たとえば、新しい Stateflow.State オブジェクトを Stateflow.Chart オブジェクトに追加するには、以下の手順に従います。
Stateflow チャート内のオブジェクトへのアクセスの説明に従って、親オブジェクト
chにアクセスします。親オブジェクト
chを引数として使用して、関数Stateflow.Stateを呼び出します。st = Stateflow.State(ch);
関数
viewを呼び出すことにより、新しいステートを Stateflow エディターで表示します。Stateflow.Stateオブジェクトを関数の引数として使用します。view(st)
Stateflow.Stateオブジェクトのプロパティを変更することにより、ステートに変更を加えます。たとえば、NameプロパティとPositionプロパティを変更することにより、ステートの名前と位置を設定できます。Positionプロパティを設定するには、新しい位置を 4 要素ベクトルとして指定します。最初の 2 つの値はステートの左上隅の (x,y) 座標であり、最後の 2 つの値はステートの幅と高さです。st.Name = "A"; st.Position = [30 30 90 60];Stateflow.Transitionオブジェクトを作成し、SourceプロパティまたはDestinationプロパティをstに設定することにより、新しいステートをチャート内の他のステートまたはジャンクションに接続することもできます。
ステート、遷移、およびデータ オブジェクトをチャートに追加する方法の例は、Stateflow API を使用したチャートの作成を参照してください。
グラフィカル オブジェクトの包含
ステート、関数、ボックス、ジャンクション、注釈などのグラフィカル オブジェクトを作成すると、親オブジェクトの左上隅に表示されます。グラフィカル オブジェクトを別の場所に移動するには、前の例で説明したように、Position プロパティを変更します。
遷移を作成すると、親オブジェクトを表示できるチャートまたはサブチャートの左上隅に表示されます。遷移を別の場所に移動するには、遷移元と遷移先を設定するか、SourceEndPoint、MidPoint、DestinationEndPoint の各プロパティを変更します。
グラフィカル オブジェクトは親の境界内に配置する必要があります。グラフィカル オブジェクトの位置を変更すると、親が変更される場合や、親が未定義というエラーにつながる場合があります。この条件は、オブジェクトの BadIntersection プロパティの値を調べることで確認できます。グラフィカル オブジェクトのエッジが別のグラフィカル オブジェクトとオーバーラップする場合、このプロパティは true です。オブジェクトの位置とサイズは、他のオブジェクトと離れるように設定してください。
サブチャート化されたステート、ボックス、またはグラフィカル関数内のオブジェクトを、位置の変更によってチャート階層の別のレベルに移動することはできません。代わりに、一方の親オブジェクトから他方へとオブジェクトをコピーして貼り付けます。その後、元のオブジェクトを削除します。詳細については、グループ化によるコピーと貼り付けとオブジェクトの配列のコピーと貼り付けを参照してください。
非グラフィカル オブジェクトの包含
データ、イベント、メッセージなどの非グラフィカル オブジェクトを作成すると、モデル エクスプローラーおよび親オブジェクトの階層レベルにある [シンボル] ペインに表示されます。オブジェクトの Path プロパティを調べることによって親オブジェクトの場所を確認することもできます。
非グラフィカル オブジェクトの親をプログラムによって変更することはできません。代わりに、モデル エクスプローラーを使用します。詳細については、Stateflow オブジェクトに対するモデル エクスプローラーの使用を参照してください。
Stateflow オブジェクトの削除
Stateflow チャート内のほとんどのオブジェクトは、関数 delete を呼び出すことによって削除できます。たとえば、Stateflow.State オブジェクト st を削除するには、次のように入力します。
delete(st);
ステートを削除後も、変数 st は MATLAB® ワークスペースに引き続き存在しますが、ステートと関連付けられてはいません。
グラフィカル オブジェクトを削除すると、削除したオブジェクトの非グラフィカルな子も削除されます。削除したオブジェクトのグラフィカルな子は、削除したオブジェクトの親の子になります。 (R2023a 以降)
メモ
関数 delete を使用して、次のタイプのオブジェクトを削除することはできません。
Simulink.RootStateflow.MachineStateflow.ChartStateflow.EMChartStateflow.StateTransitionTableChartStateflow.TruthTableChartStateflow.ClipboardStateflow.Editor