Этот пример показывает, как использовать образцовый метрический 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-файл, используйте метод 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