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