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