getGroupName

Класс: slmetric.metric.ResultDetail
Пакет: slmetric.metric

Получите имя для группы slmetric.metric.ResultDetail объекты

Описание

Получите имя группы slmetric.metric.ResultDetail объекты. Вызов execute метод собирает метрические данные. Вызывающие getMetrics обращается к slmetric.metric.Result объекты, которые включают в себя slmetric.metric.ResultDetail объекты. Применить getGroupName метод к slmetric.metric.ResultDetail объект.

пример

groupName = getGroupName(mrd) получает имя для slmetric.metric.ResultDetail mrd объекта.

Входные параметры

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

Вызов slmetric.Engine.execute метод создает slmetric.metric.Result объекты, которые включают в себя slmetric.metric.ResultDetail объекты.

Выходные аргументы

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

Имя группы slmetric.metric.ResultDetail объекты

Примеры

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

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

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

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/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