В этом примере показано, как использовать 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.
Advisor.component.Component
| Advisor.component.Types
| slmetric.Engine
| slmetric.metric.createNewMetricClass
| slmetric.metric.Metric
| slmetric.metric.Result