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

В этом примере показано, как использовать metric 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 класс. The 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. Теперь, когда ваша новая метрика модели определена в non virtualblockcount.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 и установите корень анализа.

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, Value, AggregatedValue, и Measure.

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

В данном примере отмените регистрацию невиртуальной метрики счетчика блоков.

slmetric.metric.unregisterMetric(id_metric);

Закройте модель.

clear;
bdclose('all');

Ограничения

Пользовательские метрические алгоритмы не поддерживают свойство path для объектов компонента:

  • Связанные диаграммы Stateflow

  • Блоки MATLAB function

Пользовательские метрические алгоритмы не следуют по библиотечным ссылкам.

Копирайт 2019 The MathWorks, Inc.

См. также

| | | | |

Похожие темы