Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

チャートの操作点の使用規則

操作点とは、シミュレーション中の特定の時間における Simulink® モデルのステートのスナップショットです。Stateflow® チャートの場合、操作点には以下が含まれます。

  • チャートステートのアクティビティ

  • チャートのローカル データの値

  • チャートの出力データの値

  • MATLAB® 関数内および Truth Table ブロック内の固定データの値

詳細については、Stateflow での操作点の使用を参照してください。

変更できる値の制約

操作点には、以下の要素に関する情報は含まれません。

  • マシンを親とするデータ

  • カスタム C コード内の固定データ

  • 外部 MATLAB コード内の固定データ

したがって、以下の要素の値を変更することはできません。

データ値の変更規則

データ値を変更する場合は、以下の規則が適用されます。

  • データ型やサイズを変更することはできません。たとえば、スカラー型データは、スカラー型のままでなければなりません。ベクトルと行列のデータは、同じ次元のままでなければなりません。この規則の唯一の例外は、ml 型の Stateflow データです (詳細は、ml データ型 を参照してください)。

  • 列挙型データの場合、型定義から選択できるのは列挙値のみです。その他のデータ型の場合、新しい値は、[最小値] および [最大値] パラメーターで指定した範囲に該当するものでなければなりません。

  • 1 ベースのインデックスを使用して、行列の行と列を定義します。

    たとえば、21 行 12 列の行列で、ある要素の値を変更したいとします。1 行 2 列目の要素の値を変更するには、以下のように入力します。

    c.state_name.data_name.Value(1,2) = newValue;

ステート アクティビティの変更規則

排他的 (OR) リーフ ステートに setActive メソッドを使用する場合は、以下の規則が適用されます。

  • ステートを親とするローカル データは再初期化されません。

  • 新たにアクティブになったステートでは、entry アクションが実行されません。同様に、前にアクティブであったステートでは、exit アクションが実行されません。

    このようなステート アクションが必要な場合は、これらを個別に実行する必要があります。たとえば、ステート アクションによって値がデータに割り当てられる場合は、その値を明示的に割り当てる必要があります。

  • setActive メソッドでは、以下の実行によってステートの整合性の維持が図られます。

    • 親、親の親、および兄弟のステートのステート アクティビティの更新

    • 新たにアクティブになったステートのテンポラル カウンターのリセット

    • ステートの出力データ (読み取り専用) の値の更新

    • ステートにバインドされている Function-Call Subsystem および Simulink 関数の有効化または無効化

  • 以下の条件が満たされている場合は、highlightActiveStates メソッドも実行されます。

    • モデルが開いている

    • チャートが表示されている

    • highlightActiveStates メソッドが 1 回以上実行されており、removeHighlighting メソッドはまったく実行されていない

連続時間チャートの制限

連続時間チャートの操作点を読み込んだ後、シミュレーションを 0 以外の時間から再開することができます。ただし、連続時間チャートの操作点は読み取り専用であるため、ステート アクティビティやデータ値を変更することはできません。詳細については、Stateflow の連続時間モデルを参照してください。

操作点の部分的な読み込み不可

操作点を読み込むと、すべての操作点が MATLAB ベース ワークスペース内の変数として使用可能になります。一部のチャート オブジェクトの操作点を部分的に読み込むことはできません。

操作点の値のコピーの制限

clone メソッドを使用して、操作点全体を新しい変数にコピーします (チャートの操作点を操作するためのメソッドを参照)。clone メソッドはチャート レベルでしか使用できないため、操作点の値の一部のみをコピーすることはできません。

たとえば、以下のコマンドを使用して、チャートの操作点のハンドルを取得するとします。

blockpath = 'model/chart';
c = xFinal.get(modelOperatingPoint, blockpath);

stateCopy = c.statedataCopy = c.dataoperatingPointCopy = c などの代入ステートメントではうまくいきません。これらの代入ステートメントで作成されるのは、操作点の値ではなく、オブジェクト ハンドルのコピーです。

関連するトピック