Main Content

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

特異なチャート コンフィギュレーションのテスト

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

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

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

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

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

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

チュートリアルの目的

gear の値の突然の変更に対する old_sf_car モデルの応答をテストするとします。

このモデルのシミュレーション時間は 30 秒ですが、特に確認したいのは、t = 10 で gear の値が変わったらどうなるかということです。そこでこのモデルをシミュレーションし、t = 10 で操作点を保存してから、この操作点を読み込んで変更します。その後、t = 10 ~ 20 の範囲で再びシミュレーションします。

手順タスク参照
1チャートの操作点を定義します。操作点の定義
2操作点を読み込んで値を変更します。操作点の読み込みと値の変更
3モデルを実行して、変更した操作点をテストします。変更した操作点のテスト

操作点の定義

  1. モデル old_sf_car を開きます。

    openExample("stateflow/AutomaticTransmissionLegacyExample")
  2. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  3. 操作点の保存を有効にします。[データのインポート/エクスポート] ペインで次を行います。

    1. [最終状態] を選択します。

    2. 名前を入力します。例: old_sf_car_ctx01

    3. [最終の操作点を保存] を選択します。

     プログラムでの同等の機能

  4. このシミュレーション セグメントの開始時間と終了時間を定義します。[ソルバー] ペインで、[開始時間]0[終了時間]10 に設定します。

     プログラムでの同等の機能

  5. [OK] をクリックします。

  6. シミュレーションを開始します。

    このモデルをシミュレーションするとき、t = 10 におけるすべての操作点を MATLAB ベース ワークスペース内の変数 old_sf_car_ctx01 に保存します。

    t = 10 の時点では、エンジンの回転速度は 2500 RPM と安定しています。

  7. 操作点の保存を無効にします。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終の操作点を保存] パラメーターと [最終状態] パラメーターをクリアし、[OK] をクリックします。

    こうしておけば、前の手順で保存した操作点が上書きされることはありません。

     プログラムでの同等の機能

操作点の読み込みと値の変更

  1. 操作点の読み込みを有効にします。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[初期状態] を選択し、チャートの操作点を含んでいる変数 old_sf_car_ctx01 を入力します。

     プログラムでの同等の機能

  2. [OK] をクリックします。

  3. shift_logic チャートの操作点の値のオブジェクト ハンドルを定義します。MATLAB コマンド プロンプトで、次のように入力します。

    blockpath = "old_sf_car/shift_logic";
    c = old_sf_car_ctx01.get(blockpath);

    ヒント

    モデル ウィンドウでチャートが強調表示されている場合は、gcb (Simulink) を使用してブロックのパスを指定できます。

    c = old_sf_car_ctx01.get(gcb);

     get メソッドを使用した操作点のコピーと参照

  4. 操作点のコンテンツを調べます。

    c
    c = 
    
    Block:    "shift_logic"    (handle)    (active)
      Path:     old_sf_car/shift_logic
    
      Contains:
    
        + gear_state         "State (AND)"          (active)
        + selection_state    "State (AND)"          (active)
          gear               "Block output data"    double [1, 1]
          

    チャートの操作点には、ステートとデータのリストを階層順に収納しています。

  5. チャートの t = 10 でアクティブになっているステートを強調表示します。

    コマンド プロンプトで、以下のように入力します。

    c.highlightActiveStates;

    チャート内のすべてのアクティブなステートが強調表示されます。

    ヒント

    ある単一のステートがアクティブであるかどうかをチェックするために、isActive メソッドを使用することができます。たとえば以下のように入力します。

    c.gear_state.fourth.isActive

    このコマンドの戻り値は、ステートがアクティブである場合は true (1)、アクティブでない場合は false (0) です。その他のメソッドについての詳細は、チャートの操作点を操作するためのメソッド を参照してください。

  6. selection_state のアクティブなサブステートを downshifting に変更します。

    以下のコマンドを使用します。

    c.selection_state.downshifting.setActive;

    新たにアクティブになったサブステートが、チャート内で強調表示されます。

  7. 出力データ gear の値を変更します。

    コマンド プロンプトで c.gear と入力すると、以下のようなデータ プロパティのリストが表示されます。

    c.gear
    ans = 
    
          Description: 'Block output data'
             DataType: 'double'
                 Size: '[1, 1]'
                Range: [1x1 struct]
         InitialValue: [1x0 double]
                Value: 4
     

    以下のように入力することにより、gear の値を 4 から 1 に変更できます。

    c.gear.Value = 1;
    ただし、gear のデータ型やサイズを変更することはできません。また、[最小値] および [最大値] パラメーターで設定された範囲に入っていない値を新たに指定することもできません。詳細は、データ値の変更規則を参照してください。

  8. 変更した操作点を保存します。

    old_sf_car_ctx01 = old_sf_car_ctx01.set(blockpath,c);

変更した操作点のテスト

  1. テストするシミュレーション セグメントの終了時間を新たに定義します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで、[終了時間]20 に設定します。

    開始時間は新たに入力する必要がありません。シミュレーションは、前回中断したところから再開されます。

     プログラムでの同等の機能

  2. シミュレーションを開始します。

関連するトピック