Соберите образцовые метрики программно

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

Модель в качестве примера

Открытая модель vdp.

model = 'vdp';
open_system(model);
shh = get(0,'ShowHiddenHandles');
set(0,'ShowHiddenHandles','On');
hscope = findobj(0,'Type','Figure','Tag','SIMULINK_SIMSCOPE_FIGURE');
close(hscope);
set(0,'ShowHiddenHandles',shh);

Соберите метрики

Чтобы собрать метрические данные по модели, создайте метрический объект механизма и вызовите execute.

metric_engine = slmetric.Engine();
setAnalysisRoot(metric_engine,'Root','vdp','RootType','Model');
execute(metric_engine);

Доступ к результатам

Используя метод 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(' ');
end

Вот результаты.

MetricID: mathworks.metrics.SimulinkBlockCount
  ComponentPath: vdp
  Value: 11
MetricID: mathworks.metrics.SimulinkBlockCount
  ComponentPath: vdp/More Info
  Value: 1
 
MetricID: mathworks.metrics.SubSystemCount
  ComponentPath: vdp
  Value: 1
MetricID: mathworks.metrics.SubSystemCount
  ComponentPath: vdp/More Info
  Value: 0

Экспортируйте результаты в электронную таблицу

Чтобы экспортировать результаты metricData MetricID, ComponentPath и Value к электронной таблице, используют writetable, чтобы записать содержимое metricData к MySpreadsheet.xlsx.

filename = 'MySpreadsheet.xlsx';
T=table(metricData);
writetable(T,filename);

Экспортируйте результаты в XML-файл

Чтобы экспортировать метрические результаты в XML-файл, используйте метод exportMetrics. Для каждого метрического результата XML-файл включает ComponentID, ComponentPath, MetricID, Value, AggregatedValue и Measure.

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

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

bdclose(model);

Ограничения

Для одной модели вы не можете собрать метрические данные в тот же файл базы данных (то есть, файл Metrics.db) на нескольких платформах.

Смотрите также

| |

Похожие темы