Main Content

非バーチャル ブロックをカウントするカスタム モデル メトリクスの作成

この例では、モデル メトリクス 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 モデルの非バーチャル ブロックをカウントするメトリクスを表示します。それぞれの結果について MetricIDComponentPath、および 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 ファイルには ComponentIDComponentPathMetricIDValueAggregatedValue および Measure が含まれます。

filename='MyMetricData.xml';
exportMetrics(metric_engine,filename);

この例では、非バーチャル ブロックをカウントするメトリクスを登録解除します。

slmetric.metric.unregisterMetric(id_metric);

モデルを閉じます。

bdclose(model);

制限

カスタム メトリクス アルゴリズムは、次のコンポーネント オブジェクトの path プロパティをサポートしません。

  • リンクされた Stateflow® チャート

  • MATLAB Function ブロック

カスタム メトリクス アルゴリズムはライブラリ リンクに従いません。

参考

| | | | |

関連するトピック