Main Content

S-Function の品質チェックの実行

この例では、S-Function アナライザー プログラム インターフェイスを使用して S-Function の潜在的な問題や改善点について確認する方法を示します。

S-Function アナライザー プログラム インターフェイスは次のもので構成されます。

  • Simulink.sfunction.Analyzer - S-Function アナライザーを起動して、解析結果を取得するために使用するオブジェクト。

  • Simulink.sfunction.analyzer.BuildInfo - S-Function のビルド情報を指定するためのオブジェクトを作成するために使用するオブジェクト。

  • Simulink.sfunction.analyzer.Options - S-Function アナライザーの実行オプションを指定するために使用するオブジェクト。

  • Simulink.sfunction.analyzer.findSfunctions - S-Function アナライザーのモデルまたはライブラリ内のすべての実行可能な S-Function を返す関数。

入力モデルまたはライブラリの指定

S-Function アナライザーには、解析対象の S-Function ブロックを含むモデルまたはライブラリが MATLAB® パス上に必要です。

model = 'slexSfunctionCheckExample';

S-Function のビルド情報の指定

S-Function アナライザーは、S-Function のソース コードが利用可能である場合に確認します。S-Function 名に基づいてソース コードを自動的に特定するためにヒューリスティックが適用されます。たとえば、S-Function のソース コードと入力モデルが同じフォルダーにある場合、ソース コードは解析に自動的に含まれます。それ以外の場合は、Simulink.sfunction.analyzer.BuildInfo オブジェクトを使用してビルド情報を指定しなければなりません。利用可能なソース コードがない場合、この手順を完了する必要はありません。

ビルド情報を指定するには、まず入力モデル内の該当する S-Function を特定します。その後、各 S-Function の Simulink.sfunction.analyzer.BuildInfo オブジェクトを作成します。S-Function の slexBadSFcn には、関連付けられている 2 つのソース ファイル slexBadSFcn.cslexBadSFcn_wrapper.c があります。

sfunctions= Simulink.sfunction.analyzer.findSfunctions(model);
bdInfo= Simulink.sfunction.analyzer.BuildInfo('slexBadSFcn.c',...
                                              'ExtraSrcFileList',{'slexBadSFcn_wrapper.c'});

S-Function アナライザーの実行オプションの指定

S-Function アナライザーの実行オプションは、Simulink.sfunction.analyzer.Options オブジェクトを使用して構成できます。Polyspace チェックやパラメーターのロバスト性のチェックを有効にするかどうかに加え、シミュレーションのタイムアウトや結果レポートの出力パスなどを指定するオプションがあります。オプションを既定値のまま変更する必要がない場合、この手順はスキップできます。

opts = Simulink.sfunction.analyzer.Options;
opts.EnableRobustness = 1;

S-Function アナライザーの実行と結果の確認

指定したビルド情報とオプションを取得する Simulink.sfunction.Analyzer オブジェクトを作成します。その後、関数 run を使用してその構成で S-Function アナライザーを実行し、関数 generateReport を使用して解析結果のレポートを生成します。

sfunAnalyzer = Simulink.sfunction.Analyzer(model,'BuildInfo',{bdInfo},'Options',opts);
analysisResult=run(sfunAnalyzer);
generateReport(sfunAnalyzer);