このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
非バーチャル ブロックをカウントするカスタム モデル メトリクスの作成
この例では、モデル メトリクス API を使用して、モデルの非バーチャル ブロックをカウントするカスタム モデル メトリクスを作成する方法を説明します。メトリクスの作成後は、メトリクスのデータを収集し、結果にアクセスし、結果をエクスポートすることができます。
メトリクス クラスの作成
カスタム モデル メトリクスを作成するには、関数slmetric.metric.createNewMetricClass
を使用して、基底クラスslmetric.metric.Metric
から派生させた新しいメトリクス クラスを作成します。関数 slmetric.metric.createNewMetricClass
は、コンストラクターと空のメトリクス アルゴリズム メソッドを含むファイルを作成します。
1.この例では、書き込み可能なフォルダーを利用していることを確認して、nonvirtualblockcount
という名前の新しいメトリクス クラスを作成します。
className = 'nonvirtualblockcount';
slmetric.metric.createNewMetricClass(className);
2.nonvirtualblockcount
という名前のカスタム metricID
がまだモデル メトリクス リポジトリに登録されていないことを確認します。
slmetric.metric.unregisterMetric('nonvirtualblockcount');
slmetric.metric.refresh();
3.メトリクス アルゴリズムを slmetric.metric.Metric
メソッドalgorithm
に書き込みます。このアルゴリズムはAdvisor.component.Component
クラスによって指定されたメトリクス データを計算します。Advisor.component.Types
クラスは、メトリクス データの計算対象とできるモデル オブジェクトのタイプを指定します。この例では、ファイル nonvirtualblockcount_orig.m
に非バーチャル ブロックをカウントするメトリクスを作成するロジックが含まれています。このファイルを nonvirtualblockcount.m
ファイルにコピーします。
copyfile nonvirtualblockcount_orig.m nonvirtualblockcount.m f
カスタム メトリクスを作成するときには、slmetric.metric.Metric
class の次のプロパティを設定しなければなりません。
ID
:新しいメトリクス データを取得する一意のメトリクス識別子。Name
:メトリクス アルゴリズムの名前。ComponentScope
:メトリクスが計算されるモデル コンポーネント。CompileContext
:メトリクス計算のコンパイル モード。モデルでモデルのコンパイルが必要な場合は、PostCompile
を指定します。コンパイル済みモデルのメトリクス データの収集によってパフォーマンスは遅くなります。ResultCheckSumCoverage
:ソース ファイルとVersion
が変更されていない場合でもメトリクス データを再生成するかどうかを指定。AggregationMode
:メトリクス アルゴリズムがメトリクス データを集計する方法。
オプションで、これらの追加プロパティを設定できます。
Description
:メトリクスの説明。Version
:メトリクスのバージョン。
4.新しいモデル メトリクスが nonvirtualblockcount.m で定義されたので、新しいメトリクスをメトリクス リポジトリに登録できます。
[id_metric,err_msg] = slmetric.metric.registerMetric(className);
メトリクス データの収集
モデルのメトリクス データを収集するには、slmetric.Engine
のインスタンスを使用します。getMetrics
メソッドを使用して、収集するメトリクスを指定します。この例では、sldemo_mdlref_conversion
モデルの非バーチャル ブロックをカウントするメトリクスを指定します。
1.sldemo_mdlref_conversion
モデルを読み込みます。
model = 'sldemo_mdlref_conversion';
load_system(model);
2.メトリクス エンジン オブジェクトを作成し、解析ルートを設定します。
metric_engine = slmetric.Engine(); setAnalysisRoot(metric_engine,'Root',model,'RootType','Model');
3.非バーチャル ブロックをカウントするメトリクスのメトリクス データを収集します。
execute(metric_engine,id_metric); rc = getMetrics(metric_engine,id_metric);
結果の表示とエクスポート
モデルのメトリクスにアクセスするには、slmetric.metric.Result
のインスタンスを使用します。この例では、sldemo_mdlref_conversion
モデルの非バーチャル ブロックをカウントするメトリクスを表示します。それぞれの結果について MetricID、ComponentPath、および Value を表示します。
for n=1:length(rc) if rc(n).Status == 0 results = rc(n).Results; for m=1:length(results) disp(['MetricID: ',results(m).MetricID]); disp([' ComponentPath: ', results(m).ComponentPath]); disp([' Value: ', num2str(results(m).Value)]); disp(' '); end else disp(['No results for:',rc(n).MetricID]); end disp(' '); end
MetricID: nonvirtualblockcount
ComponentPath: sldemo_mdlref_conversion
Value: 7
MetricID: nonvirtualblockcount
ComponentPath: sldemo_mdlref_conversion/Bus Counter
Value: 8
MetricID: nonvirtualblockcount
ComponentPath: sldemo_mdlref_conversion/More Info
Value: 0
MetricID: nonvirtualblockcount
ComponentPath: sldemo_mdlref_conversion/SubSystem1
Value: 0
メトリクス結果を XML ファイルにエクスポートするには、exportMetrics メソッドを使用します。各メトリクス結果について、XML ファイルには ComponentID
、ComponentPath
、MetricID
、Value
、AggregatedValue
および Measure
が含まれます。
filename='MyMetricData.xml';
exportMetrics(metric_engine,filename);
この例では、非バーチャル ブロックをカウントするメトリクスを登録解除します。
slmetric.metric.unregisterMetric(id_metric);
モデルを閉じます。
clear; bdclose(model);
制限
カスタム メトリクス アルゴリズムは、次のコンポーネント オブジェクトの path プロパティをサポートしません。
リンクされた Stateflow® チャート
MATLAB Function ブロック
カスタム メトリクス アルゴリズムはライブラリ リンクに従いません。
参考
Advisor.component.Component
| Advisor.component.Types
| slmetric.Engine
| slmetric.metric.Metric
| slmetric.metric.createNewMetricClass
| slmetric.metric.Result