slmetric.metric.ResultDetail class

Пакет: slmetric.metric
Суперклассы:

Подробная информация о образцах slmetric.metric.Result объекты

Описание

Подробности о том, что подсчитывает механизм метрики для slmetric.metric.Result свойство объекта Value.

Конструкция

Вызов slmetric.Engine.execute метод создает slmetric.metric.Result объекты, которые опционально включают в себя slmetric.metric.ResultDetail объекты. Details1 = slmetric.metric.ResultDetail = (ID, Name) создает slmetric.metric.ResultDetail объект. Вы должны задать идентификатор и имя как входы для конструктора.

Свойства

расширить все

Уникальный идентификатор сущности, который учитывается образцом детали результата. Это свойство - чтение/запись.

Типы данных: char

Имя сущности модели, который получает образец детализации. Это свойство - чтение/запись.

Типы данных: char

Скалярное значение, сгенерированное метрическим алгоритмом для ID. Это свойство - чтение/запись.

Типы данных: double

Методы

getGroupIdentifier Получите идентификатор для группы slmetric.metric.ResultDetail объекты
getGroupName Получите имя для группы slmetric.metric.ResultDetail объекты
setGroup Установите имя и идентификатор группы slmetric.metric.ResultDetail объекты

Примеры

свернуть все

Используйте getGroupName и getGroupIdentfier методы получения имени и идентификатора для группы клонов.

Откройте пример модели.

open_system([docroot '\toolbox\simulink\examples\ex_clone_detection.slx']);

Сохраните модель примера в текущую рабочую папку.

Вызовите execute способ. Применить getMetrics метод для mathworks.metric.CloneDetection метрический.

metric_engine = slmetric.Engine();
setAnalysisRoot(metric_engine,'Root','ex_clone_detection','RootType','Model');
execute(metric_engine);
rc = getMetrics(metric_engine,'mathworks.metrics.CloneDetection');

Для каждого slmetric.metric.Result объект, отобразите ComponentPath. Для каждого slmetric.metric.ResultDetail отобразите имя и идентификатор группы клонов.

for n=1:length(rc.Results)
    if rc.Results(n).Value > 0
	for m=1:length(rc.Results(n).Details)
	  disp(['ComponentPath: ',rc.Results(n).ComponentPath]);
          disp(['Group Name: ',rc.Results(n).Details(m).getGroupName]);
          disp(['Group Identifier: ',rc.Results(n).Details(m).getGroupIdentifier]);
        end
    else
        disp(['No results for ComponentPath: ',rc.Results(n).ComponentPath]);
    end
    disp(' ');
end

Результаты показывают, что модель содержит одну группу клонов, CloneGroup1, который содержит два клона.

Используйте setGroup метод для группирования подробных результатов. Когда вы создаете пользовательскую метрику модели, вы применяете этот метод как часть algorithm способ.

Использование createNewMetricClass создайте метрический класс с именем DataStoreCount. Эта метрика отсчитывает количество блоков Data Store Read и Data Store Write и группирует их вместе соответствующим блоком Data Store Memory. The createNewMetricClass функция создает файл, DataStoreCount.m в текущей рабочей папке. Файл содержит конструктор и метод пустого метрического алгоритма. В данном примере убедитесь, что вы работаете в папке с возможностью записи.

className = 'DataStoreCount';
slmetric.metric.createNewMetricClass(className);

Чтобы записать метрический алгоритм, откройте DataStoreCount.m и добавьте метрику к файлу. В данном примере можно создать метрический алгоритм, скопировав эту логику в DataStoreCount.m файл.

classdef DataStoreCount < slmetric.metric.Metric
    % Count the number of Data Store Read and Data Store Write
    % blocks and correlate them across components.
    
    methods
        function this = DataStoreCount()
            this.ID = 'DataStoreCount';
            this.ComponentScope = [Advisor.component.Types.Model, ...
                Advisor.component.Types.SubSystem];
            this.AggregationMode = slmetric.AggregationMode.Sum;
            this.CompileContext = 'None';
            this.Version = 1;
            this.SupportsResultDetails = true;
            
            %Textual information on the metric algorithm
            this.Name = 'Data store usage';
            this.Description = 'Metric that counts the number of Data Store Read and Write'; 
                  'blocks and groups them by the corresponding Data Store Memory block.';
            
        end
        
        function res = algorithm(this, component)
            % Use find_system to get all blocks inside this component.
            dswBlocks = find_system(getPath(component), ...
                'SearchDepth', 1, ...
                'BlockType', 'DataStoreWrite');
            dsrBlocks = find_system(getPath(component), ...
                'SearchDepth', 1, ...
                'BlockType', 'DataStoreRead');          
            
            % Create a ResultDetail object for each data store read and write block.
			% Group ResultDetails by the data store name.
            details1 = slmetric.metric.ResultDetail.empty();
            for i=1:length(dswBlocks)
                details1(i) = slmetric.metric.ResultDetail(getfullname(dswBlocks{i}),...
                            get_param(dswBlocks{i}, 'Name'));
		   groupID = get_param(dswBlocks{i},'DataStoreName');
		   groupName = get_param(dswBlocks{i},'DataStoreName');
                details1(i).setGroup(groupID, groupName);                
                details1(i).Value = 1;
            end
            
            details2 = slmetric.metric.ResultDetail.empty();
            for i=1:length(dsrBlocks)
                details2(i) = slmetric.metric.ResultDetail(getfullname(dsrBlocks{i}),...
                   get_param(dsrBlocks{i}, 'Name'));
                groupID = get_param(dsrBlocks{i},'DataStoreName');
				groupName = get_param(dsrBlocks{i},'DataStoreName');
                details2(i).setGroup(groupID, groupName);
                details2(i).Value = 1;
            end
            
            res = slmetric.metric.Result();
            res.ComponentID = component.ID;
            res.MetricID = this.ID;
            res.Value = length(dswBlocks)+ length(dsrBlocks);
            res.Details = [details1 details2];
        end
    end
end

В DataStoreCount метрический класс, SupportsResultDetail для метода задано значение true. Метрический алгоритм содержит логику для setGroup способ.

Теперь ваша новая метрика модели определена в DataStoreCount.m, зарегистрируйте новую метрику.

[id_metric,err_msg] = slmetric.metric.registerMetric(className);

Чтобы собрать метрические данные о моделях, используйте образцы slmetric.Engine. Использование getMetrics метод, укажите метрику, которую вы хотите собрать. В данном примере укажите метрику счетчика хранилища данных для sldemo_mdlref_dsm модель.

Загрузите sldemo_mdlref_dsm модель.

model = 'sldemo_mdlref_dsm';
load_system(model);

Создайте объект metric engine и установите корень анализа.

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

Сбор метрических данных для метрики счетчика хранилища данных.

execute(metric_engine);
rc=getMetrics(metric_engine, id_metric);

Для каждого slmetric.metric.Result объект, отобразите ComponentPath. Для каждого slmetric.metric.ResultDetails отобразите имя и идентификатор группы хранилища данных.

for n=1:length(rc.Results)
    if rc.Results(n).Value > 0
	for m=1:length(rc.Results(n).Details)
	  disp(['ComponentPath: ',rc.Results(n).ComponentPath]);
          disp(['Group Name: ',rc.Results(n).Details(m).getGroupName]);
          disp(['Group Identifier: ',rc.Results(n).Details(m).getGroupIdentifier]);
        end
    else
        disp(['No results for ComponentPath: ',rc.Results(n).ComponentPath]);
    end
    disp(' ');
end

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

ComponentPath: sldemo_mdlref_dsm
Group Name: ErrorCond
Group Identifier: ErrorCond
 
No results for ComponentPath: sldemo_mdlref_dsm/A
 
No results for ComponentPath: sldemo_mdlref_dsm/A1
 
No results for ComponentPath: sldemo_mdlref_dsm/More Info1
 
ComponentPath: sldemo_mdlref_dsm_bot
Group Name: RefSignalVal
Group Identifier: RefSignalVal
 
ComponentPath: sldemo_mdlref_dsm_bot2
Group Name: ErrorCond
Group Identifier: ErrorCond
 
ComponentPath: sldemo_mdlref_dsm_bot/PositiveSS
Group Name: RefSignalVal
Group Identifier: RefSignalVal
 
ComponentPath: sldemo_mdlref_dsm_bot/NegativeSS
Group Name: RefSignalVal
Group Identifier: RefSignalVal

В данном примере отмена регистрации метрики счетчика хранилища данных.

slmetric.metric.unregisterMetric(id_metric);

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

clear;
bdclose('all');
Введенный в R2017b