Main Content

再現が困難なチャート構成のテスト

この例では、操作点を使用して、シミュレーション時の再現が困難なアクティブ ステートとデータ値の組み合わせに対し、チャートがどのように応答するかをテストする方法を説明します。"操作点" とは、シミュレーション中の Simulink® モデルの状態のスナップショットです。モデルに Stateflow® チャートが含まれている場合、操作点にはアクティブ ステート、出力データとローカル データ、および永続変数についての情報が含まれます。詳細については、Stateflow チャートの操作点の保存と復元を参照してください。

モデル old_sf_car は、自動車の 4 速オートマチック トランスミッション システムを示します。

Model old_sf_car.

このモデルでは、Stateflow チャート shift_logic は、4 つのギア間のシフトのロジックを実装します。このパラレル ステートのサブステート gear_shift は、トランスミッション システムのギアを表します。これらのサブステートの entry アクションにより、チャート出力 gear の値が設定されます。結果として、ノーマル シミュレーション中に、どのサブステートがアクティブであるかが gear の値に反映されます。

Stateflow chart shift_logic.

既定では、モデルのシミュレーション時間は 30 秒です。

Scope showing simulation results between t=0 and t=30.

チャート出力 gear の値が急激に変化した場合に何が起こるのかを確認するため、モデルをシミュレートし、t = 10 における操作点を保存し、チャート出力の変化を反映するようにその操作点を変更してから、t = 10t = 30 の範囲で再びシミュレートします。

初期セグメントの操作点の定義

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

    openExample("stateflow/AutomaticTransmissionLegacyExample")
  2. 最終の操作点を保存するようにモデルを設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインで次を行います。

    1. [最終状態] を選択し、操作点の名前を入力します。この例では、xSteadyState を使用します。

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

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

  3. このシミュレーション セグメントの終了時間を設定します。[シミュレーション] タブで、[終了時間]10 に設定します。

  4. シミュレーションを実行します。

    このモデルをシミュレートするときに、t = 10 における最終操作点を MATLAB® ベース ワークスペース内の変数 xSteadyState に保存します。t = 10 の時点では、エンジンは定常値 2500 RPM で動作しています。

    Scope showing simulation results between t=0 and t=10.

  5. [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終の操作点を保存] パラメーターと [最終状態] パラメーターをクリアします。こうしておけば、前の手順で保存した操作点が上書きされることはありません。

操作点の変更によるデータ値の変更

  1. shift_logic チャートの操作点情報を含む Stateflow.op.BlockOperatingPoint オブジェクトにアクセスします。

    blockpath = "old_sf_car/shift_logic";
    op = get(xSteadyState,blockpath)
    op = 
    
    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]

    操作点には、ステートとデータのリストが階層順に含まれています。

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

    highlightActiveStates(op)

    アクティブなステートが強調表示されます。トランスミッション システムは、定常状態で 4 速に入っています。

    Stateflow chart showing active states.

  3. チャート出力 gear の操作点情報を含む Stateflow.op.OperatingPointData オブジェクトにアクセスします。

    op.gear
    ans = 
    
          Description: 'Block output data'
             DataType: 'double'
                 Size: '[1, 1]'
                Range: [1x1 struct]
         InitialValue: [1x0 double]
                Value: 4
     
  4. gear の値を 1 に変更します。

    op.gear.Value = 1;
  5. 変更した操作点を保存します。

    xModified = set(xSteadyState,blockpath,op);

データ値の変更後のモデル動作のテスト

  1. モデルの初期状態として操作点を読み込みます。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[初期状態] を選択し、チャートの変更された操作点を含む変数 xModified を入力します。その後、[OK] をクリックします。

  2. テストするシミュレーション セグメントの終了時間を定義します。[シミュレーション] タブで、[終了時間]30 に設定します。

  3. シミュレーションを実行します。

    チャートのアニメーションを見ると、チャート出力 gear に対して車両速度が高速であるため、システムはシフト アップによって補正しようと試行し続けますが、システムのギアは既に 4 速に入っているため、補正できないことが分かります。

    Stateflow chart showing active states.

    結果として、エンジン RPM は 6000 RPM に上昇します。

    Scope showing simulation results between t=10 and t=30.

参考

モデル設定

オブジェクト

関数

関連するトピック