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 を開きます。

  2. 操作点の保存を有効にします。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [最終状態] チェック ボックスをオンにします。

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

    4. [最終の操作点を保存] チェック ボックスをオンにします。

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

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

  3. このシミュレーション セグメントの開始時間と終了時間を定義します。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[ソルバー] ペインに移動します。

    2. [開始時間] として 0 を入力します。

    3. [終了時間] として 10 を入力します。

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

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

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

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

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

  5. 操作点の保存を無効にします。

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

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [最終の操作点を保存] チェック ボックスをオフにします。

    3. [最終状態] チェック ボックスをオフにします。

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

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

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

  1. 操作点の読み込みを有効にします。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [初期状態] チェック ボックスをオンにします。

    3. チャートの操作点を含んでいる変数 old_sf_car_ctx01 を入力します。

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

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

  2. shift_logic チャートの操作点の値のオブジェクト ハンドルを定義します。

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

    blockpath = 'old_sf_car/shift_logic';
    c = old_sf_car_ctx01.get(modelOperatingPoint, 'blockpath');

    ヒント

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

    c = old_sf_car_ctx01.get(gcb);

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

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

    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]
          

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

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

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

    c.highlightActiveStates;

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

    ヒント

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

    c.gear_state.fourth.isActive

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

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

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

    c.selection_state.downshifting.setActive;

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

  6. 出力データ 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 のデータ型やサイズを変更することはできません。また、[最小値] および [最大値] パラメーターで設定された範囲に入っていない値を新たに指定することもできません。詳細は、データ値の変更規則を参照してください。

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

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

    old_sf_car_ctx01 = old_sf_car_ctx01.set(blockpath, c);

変更した操作点のテスト

  1. テストするシミュレーション セグメントの終了時間を新たに定義します。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[ソルバー] ペインに移動します。

    2. [終了時間] として 20 を入力します。

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

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

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

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

    エンジンの反応は以下のとおりです。

関連するトピック