Можно лучше изучить размер, сложность и читабельность модели и ее компонентов путем анализа агрегированных метрических данных модели. Агрегированные метрические данные доступны в AggregatedValue
и AggregatedMeasures
свойства slmetric.metric.Result
объект. The AggregatedValue
свойство агрегирует метрические скалярные значения. The AggregatedMeasures
свойство агрегирует метрические измерения (то есть подробную информацию о значениях метрики).
Реализация метрики модели определяет, как метрика агрегирует данные по иерархии компонентов. Для метрик модели MathWorks slmetric.metric.Metric
класс задает агрегацию метрики модели. Этот класс включает в себя AggregationMode
свойство, которое имеет следующие опции:
Sum
: Возвращает сумму Value
свойство и Value
свойства дочерних компонентов по всей иерархии компонентов. Возвращает сумму Meaures
свойство и Measures
свойства дочерних компонентов по всей иерархии компонентов.
Max
: Возвращает максимальное значение Value
свойство и Value
свойства дочерних компонентов по всей иерархии компонентов. Возвращает максимальное значение Measures
свойство и Measures
свойства дочерних компонентов по всей иерархии компонентов.
None
: Отсутствие агрегирования значений метрики.
Вы можете найти описания метрик модели MathWorks и их AggregationMode
настройка свойства в метриках модели. Для пользовательских метрик, как часть algorithm
метод, можно задать, как метрика агрегирует данные. Для получения дополнительной информации смотрите Создание Пользовательской Метрики Модели для Подсчета Невиртуальных Блоков.
Эта схема показывает, как программное обеспечение агрегирует метрические данные по компонентам иерархии модели. Родительская модель находится в верхней части иерархии. Компоненты могут быть следующими:
Модель
Блок Subsystem
График
Блок MATLAB function
Защищенная модель
В этом примере показано, как выполнить программный сбор метрических данных в механизме метрики, а затем получить доступ к агрегированным метрическим данным.
Загрузите sldemo_applyVarStruct
модель.
model = 'sldemo_applyVarStruct'; open(model); load_system(model);
Создайте slmetric.Engine
Объекту и установите корень анализа.
metric_engine = slmetric.Engine(); setAnalysisRoot(metric_engine,'Root',model,'RootType','Model');
Соберите данные для метрики выходной модели Input.
execute(metric_engine,'mathworks.metrics.IOCount');
Получите метрические данные модели, которая возвращает массив slmetric.metric.ResultCollection
объекты, res_col
. Задайте входной параметр для AggregationDepth
.
res_col = getMetrics(metric_engine,'mathworks.metrics.IOCount',... 'AggregationDepth','All');
The AggregationDepth
входной параметр имеет две опции: All
и None
. Если вы не хотите getMetrics
метод для агрегирования измерений и значений, задайте None
.
Отображение результатов.
metricData ={'MetricID','ComponentPath','Value',... 'AggregatedValue','Measures','AggregatedMeasures'}; cnt = 1; for n=1:length(res_col) if res_col(n).Status == 0 results = res_col(n).Results; for m=1:length(results) disp(['MetricID: ',results(m).MetricID]); disp([' ComponentPath: ',results(m).ComponentPath]); disp([' Value: ',num2str(results(m).Value)]); disp([' Aggregated Value: ',num2str(results(m).AggregatedValue)]); disp([' Measures: ',num2str(results(m).Measures)]); disp([' Aggregated Measures: ',... num2str(results(m).AggregatedMeasures)]); metricData{cnt+1,1} = results(m).MetricID; metricData{cnt+1,2} = results(m).ComponentPath; metricData{cnt+1,3} = results(m).Value; tdmetricData{cnt+1,4} = results(m).Measures; metricData{cnt+1,5} = results(m).AggregatedMeasures; cnt = cnt + 1; end else disp(['No results for:',res_col(n).MetricID]); end disp(' '); end
Вот результаты:
MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct Value: 3 Aggregated Value: 5 Measures: 1 2 0 0 Aggregated Measures: 3 2 0 0 MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct/Controller Value: 4 Aggregated Value: 4 Measures: 3 1 0 0 Aggregated Measures: 3 1 0 0 MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct/Aircraft Dynamics Model Value: 5 Aggregated Value: 5 Measures: 3 2 0 0 Aggregated Measures: 3 2 0 0 MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct/Dryden Wind Gust Models Value: 2 Aggregated Value: 2 Measures: 0 2 0 0 Aggregated Measures: 0 2 0 0 MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct/Nz pilot calculation Value: 3 Aggregated Value: 3 Measures: 2 1 0 0 Aggregated Measures: 2 1 0 0 MetricID: mathworks.metrics.IOCount ComponentPath: sldemo_applyVarStruct/More Info2 Value: 0 Aggregated Value: 0 Measures: 0 0 0 0 Aggregated Measures: 0 0 0 0
Для выходной метрики вход, AggregationMode
является Max
. Для каждого компонента, AggregatedValue
и AggregatedMeasures
свойствами являются максимальное количество входов и выходов самого себя и его дочерних компонентов. Для примера, для sldemo_applyVarStruct
, а AggregatedValue
свойство 5
, который является sldemo_applyVarStruct/Aircraft Dynamics Model
значение компонента.
slmetric.Engine
| slmetric.metric.Metric
| slmetric.metric.Result
| slmetric.metric.ResultCollection