Создайте пользовательскую метрику модели для невиртуального количества блока

В этом примере показано, как использовать метрический API модели, чтобы создать пользовательскую метрику модели для подсчета невиртуальных блоков в модели. После создания метрики можно собрать данные для метрики, получить доступ к результатам и экспортировать результаты.

Создайте метрический класс

Чтобы создать пользовательскую метрику модели, используйте slmetric.metric.createNewMetricClass функция, чтобы создать новый метрический класс вывела из базового класса slmetric.metric.Metric. Функция slmetric.metric.createNewMetricClass создает файл, который содержит конструктора и пустой метрический метод алгоритма.

1. В данном примере убедитесь, что вы находитесь в writeable папке и создаете новый метрический класс под названием 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:

  • 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 и Значение.

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-файл включает ComponentID, ComponentPath, MetricIDЗначение, AggregatedValue, и 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.

Смотрите также

| | | | |

Похожие темы