В этом примере показано, как использовать API метрики модели для программного сбора метрик подсистемы и счетчика блоков для модели. Собрав метрики для модели, можно получить доступ к результатам и экспортировать их в файл.
Open model vdp.
model = 'vdp';
open_system(model);
Для сбора метрических данных в модели создайте объект метрического механизма и вызовите execute.
metric_engine = slmetric.Engine(); setAnalysisRoot(metric_engine,'Root','vdp','RootType','Model'); execute(metric_engine);
Updating Model Advisor cache... Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.
Использование getMetrics укажите метрики, которые требуется собирать. в этом примере укажите метрики количества блоков и подсистем для vdp модель. getMetrics возвращает массив slmetric.metric.ResultCollection объекты.
res_col = getMetrics(metric_engine,{'mathworks.metrics.SimulinkBlockCount',...
'mathworks.metrics.SubSystemCount'});Создать массив ячеек metricData для хранения MetricID, ComponentPath, и Value для результатов метрики. MetricID - идентификатор метрики, ComponentPath путь к компоненту, для которого вычисляется метрика, и Value - метрическое значение. Запишите цикл для отображения результатов.
metricData ={'MetricID','ComponentPath','Value'};
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)]);
metricData{cnt+1,1} = results(m).MetricID;
metricData{cnt+1,2} = results(m).ComponentPath;
metricData{cnt+1,3} = results(m).Value;
cnt = cnt + 1;
end
else
disp(['No results for:',res_col(n).MetricID]);
end
disp(' ');
endMetricID: mathworks.metrics.SimulinkBlockCount
ComponentPath: vdp
Value: 13
MetricID: mathworks.metrics.SimulinkBlockCount
ComponentPath: vdp/More Info
Value: 1
MetricID: mathworks.metrics.SimulinkBlockCount
ComponentPath: vdp/More Info/Model Info
Value: 1
MetricID: mathworks.metrics.SimulinkBlockCount
ComponentPath: vdp/More Info/Model Info/EmptySubsystem
Value: 0
MetricID: mathworks.metrics.SubSystemCount
ComponentPath: vdp
Value: 1
MetricID: mathworks.metrics.SubSystemCount
ComponentPath: vdp/More Info
Value: 0
MetricID: mathworks.metrics.SubSystemCount
ComponentPath: vdp/More Info/Model Info
Value: 1
MetricID: mathworks.metrics.SubSystemCount
ComponentPath: vdp/More Info/Model Info/EmptySubsystem
Value: 0
Для экспорта metricData результаты MetricID, ComponentPath, и Value в электронную таблицу, используйте writetable для записи содержимого metricData кому MySpreadsheet.xlsx.
filename = 'MySpreadsheet.xlsx';
T=table(metricData);
writetable(T,filename);Для экспорта результатов метрики в XML-файл используйте exportMetrics способ. Для каждого результата метрики XML-файл включает ComponentID, ComponentPath, MetricID, Value, AggregatedValue, и Measure.
filename='MyMetricResults.xml';
exportMetrics(metric_engine,filename)Закрыть модель vdp.
bdclose(model);
Для одной модели невозможно собрать метрические данные в один файл базы данных (т. е. Metrics.db файл) на нескольких платформах.
slmetric.Engine | slmetric.metric.Result | slmetric.metric.ResultCollection