Можно использовать метрический API модели, чтобы программно собрать метрики модели, которые помогают вам оценить архитектуру, сложность и удобочитаемость вашей модели. Результаты этих метрик могут помочь вам проверить податливость с промышленными стандартами и инструкциями.
В этом примере показано, как использовать метрический API модели, чтобы программно собрать подсистему, и блок считают метрики для модели. После собирающихся метрик для модели можно получить доступ к результатам и экспортировать их в файл.
Откройте vdp
модель.
model = 'vdp';
open_system(model);
Чтобы собрать метрические данные по модели, создайте slmetric.Engine
объект и вызов 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(' '); end
MetricID: 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
Экспортировать MetricID
, ComponentPath
, и Value
к электронной таблице используйте writetable
записать содержимое metricData
к MySpreadsheet.xlsx
.
filename = 'MySpreadsheet.xlsx';
T=table(metricData);
writetable(T,filename);
Чтобы экспортировать метрические результаты в XML-файл, используйте exportMetrics
метод. Для каждого метрического результата XML-файл включает ComponentID
, ComponentPath
, MetricID
Значение
, AggregatedValue
, и Measure
.
filename='MyMetricResults.xml';
exportMetrics(metric_engine,filename)
Закройте vdp
модель.
bdclose(model);
Когда вы собираете метрические данные, они хранятся в файле базы данных, Metrics.db
, в папке кэша симуляции. Вы не можете собрать метрические данные по одной платформе, переместить файл базы данных в другую платформу, и затем продолжить собирать дополнительные метрические данные в том файле базы данных. Например, если вы собираете метрические данные по машине Windows и затем перемещаете файл базы данных в машину Linux, вы не можете собрать и хранить дополнительные метрические данные в том файле базы данных. Однако вы можете просмотреть те данные в Метрической Инструментальной панели.
slmetric.Engine
| slmetric.metric.Result
| slmetric.metric.ResultCollection