Main Content

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

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

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

System object を含むモデルの範囲の派生

最初のモデル ex_HandleVariableRefersToMultipleObjects を開きます。

open_system("ex_HandleVariableRefersToMultipleObjects.slx")

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);

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

固定小数点ツールで、[固定小数点の反復的変換] ワークフローを選択します。

[設計対象のシステム (SUD)] で、変換するシステムとして ex_HandleVariableRefersToMultipleObjects を選択します。

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

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

派生範囲解析を有効にするためのコードの書き換え

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

固定小数点ツールと ex_HandleVariableRefersToMultipleObjects モデルを閉じます。ex_HandleVariableRefersToSingleObject モデルを開きます。

open_system("ex_HandleVariableRefersToSingleObject.slx")

このモデルには、書き換えられたコードが含まれています。

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

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

固定小数点ツールで、[固定小数点の反復的変換] ワークフローを選択します。

[設計対象のシステム (SUD)] で、変換するシステムとして ex_HandleVariableRefersToSingleObject を選択します。

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

[範囲の収集] ボタンをクリックします。今回は、固定小数点ツールはモデルで使用されている変数の範囲を問題なく派生させます。

range-analysis-system-object.png

参考

|