exponenta event banner

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

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

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

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

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.

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

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

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

slmetric.metric.unregisterMetric(id_metric);

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

clear;
bdclose('all');

Ограничения

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

  • Связанные диаграммы потока состояний

  • Функциональные блоки MATLAB

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

Авторское право 2019 The MathWorks, Inc.

См. также

| | | | |

Связанные темы