Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

この例では、モデル メトリクス API を使用して、モデルの非バーチャル ブロックをカウントするカスタム モデル メトリクスを作成する方法を説明します。メトリクスの作成後は、メトリクスのデータを収集し、結果にアクセスし、結果をエクスポートすることができます。

メトリクス クラスの作成

カスタム モデル メトリクスを作成するには、関数slmetric.metric.createNewMetricClassを使用して、基底クラスslmetric.metric.Metricから派生させた新しいメトリクス クラスを作成します。関数 slmetric.metric.createNewMetricClass は、コンストラクターと、空のメトリクス アルゴリズム メソッドを含むファイルを作成します。

1.この例では、書き込み可能なフォルダーを利用していることを確認して、nonvirtualblockcount という名前の新しいメトリクス クラスを作成します。

className = 'nonvirtualblockcount';
slmetric.metric.createNewMetricClass(className);

2.メトリクス アルゴリズムを 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: メトリクスのバージョン。

3.新しいモデル メトリクスが nonvirtualblockcount.m で定義されたので、新しいメトリクスをメトリクス リポジトリに登録できます。

[id_metric,err_msg] = slmetric.metric.registerMetric(className);

メトリクス データの収集

モデルのメトリクス データを収集するには、slmetric.Engineのインスタンスを使用します。getMetricsメソッドを使用して、収集するメトリクスを指定します。この例では、sldemo_mdlref_bus モデルの非バーチャル ブロックをカウントするメトリクスを指定します。

1.sldemo_mdlref_bus モデルを読み込みます。

model = 'sldemo_mdlref_bus';
load_system(model);

2.メトリクス エンジン オブジェクトを作成し、解析ルートを設定します。

metric_engine = slmetric.Engine();
setAnalysisRoot(metric_engine,'Root',model,'RootType','Model');

3.非バーチャル ブロックをカウントするメトリクスのメトリクス データを収集します。

execute(metric_engine);
rc = getMetrics(metric_engine,id_metric);

結果の表示とエクスポート

モデルのメトリクスにアクセスするには、slmetric.metric.Resultのインスタンスを使用します。この例では、sldemo_mdlref_bus モデルの非バーチャル ブロックをカウントするメトリクスを表示します。それぞれの結果について 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_bus
  Value: 13
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_bus/More Info3
  Value: 0
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_bus/More Info4
  Value: 0
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_bus/More Info1
  Value: 0
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_bus/More Info2
  Value: 0
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus
  Value: 2
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER
  Value: 6
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/Counter
  Value: 3
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/Counter/ResetCheck
  Value: 4
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/Counter/ResetCheck/NoReset
  Value: 2
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/Counter/ResetCheck/Reset
  Value: 3
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/Counter/SaturationCheck
  Value: 5
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/COUNTER/LimitsProcess
  Value: 1
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/More Info1
  Value: 0
 
MetricID: nonvirtualblockcount
  ComponentPath: sldemo_mdlref_counter_bus/More Info2
  Value: 0
 
 

メトリクス結果を XML ファイルにエクスポートするには、exportMetrics メソッドを使用します。各メトリクス結果について、XML ファイルには ComponentIDComponentPathMetricIDValueAggregatedValue および Measure が含まれます。

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

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

slmetric.metric.unregisterMetric(id_metric);

モデルを閉じます。

clear;
bdclose('all');

制限

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

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

  • MATLAB Function ブロック

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

Copyright 2019 The MathWorks, Inc.

参考

| | | | |

関連するトピック