最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

System object の範囲解析のトラブルシューティング

System object を使用するモデルに対する範囲の派生時に、複数のハンドル オブジェクトを参照する可能性のある変数がモデルに含まれている場合、解析は失敗します。次の例は、固定小数点ツールがモデルに対する範囲を派生させることができるようにコードを再構成する方法を示しています。

この例では、他の条件に応じて異なる System object を参照する可能性のある変数がコードに含まれているため、最初のモデル ex_HandleVariableRefersToMultipleObjects の範囲解析でエラーが発生します。モデル ex_HandleVariableRefersToSingleObject は最初のモデルを書き換えたもので、機能は同じですが、固定小数点ツールはモデルに対する範囲を派生させることができます。

  1. 最初のモデルを開きます。MATLAB® コマンド ラインで以下のように入力します。

    addpath(fullfile(docroot,'toolbox','fixpoint','examples'))
    ex_HandleVariableRefersToMultipleObjects
    

    MATLAB Function ブロック内のコードは、カスタム System object の fAddConstant を参照します。

    function y  = fcn(u, c)
    %#codegen
    
    persistent hSysObjAddTen
    persistent hSysObjAddNegTen
    persistent hSysObjForStep
    
    if isempty(hSysObjAddTen)
        hSysObjAddTen = fAddConstant(10);
    end
    
    if isempty(hSysObjAddNegTen)
        hSysObjAddNegTen = fAddConstant(-10);
    end
    
    if c > 0
        hSysObjForStep = hSysObjAddTen;
    else
        hSysObjForStep = hSysObjAddNegTen;
    end
    
    y = step(hSysObjForStep, u);

  2. Simulink® [アプリ] タブから [固定小数点ツール] を選択します。

  3. 固定小数点ツールの [設計対象のシステム (SUD)] で、変換するシステムとして ex_HandleVariableRefersToMultipleObjects を選択します。

  4. [範囲の収集モード][派生範囲] を選択します。

  5. [範囲の収集] ボタンをクリックします。

    c の値に応じて異なる System object を参照する可能性のあるハンドル変数がコード内に存在するため、この解析は失敗します。

  6. 固定小数点ツールが System object に対する範囲を派生させることができるように、MATLAB Function ブロック内のコードを次のように変更できます。

    function y  = fcn(u, c)
    %#codegen
    
    persistent hSysObjAddTen
    persistent hSysObjAddNegTen
    
    if isempty(hSysObjAddTen)
        hSysObjAddTen = fAddConstant(10);
    end
    if isempty(hSysObjAddNegTen)
        hSysObjAddNegTen = fAddConstant(-10);
    end
    
    if c > 0
        y = step(hSysObjAddTen, u);    
    else
        y = step(hSysObjAddNegTen, u);    
    end
    
  7. 固定小数点ツールと ex_HandleVariableRefersToMultipleObjects モデルを閉じます。書き換えられたコードが含まれている ex_HandleVariableRefersToSingleObject モデルを開きます。MATLAB コマンド ラインで以下のように入力します。

    ex_HandleVariableRefersToSingleObject

  8. Simulink [アプリ] タブから [固定小数点ツール] を選択します。

  9. [範囲の収集モード][派生範囲] を選択します。

  10. [範囲の収集] ボタンをクリックします。

    今回は、固定小数点ツールはモデルで使用されている変数の範囲を問題なく派生させます。