setGroup

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

Определите имя и идентификатор для группы slmetric.metric.ResultDetail объекты

Описание

Для пользовательски созданной метрики, набор идентификатор и имя для группы slmetric.metric.ResultDetail объекты. Примените этот метод из части метрического алгоритма, который задает детали для getMetrics объекты.

пример

setGroup(groupIdentifier,groupName) устанавливает значения названия группы и идентификатора для slmetric.metric.ResultDetail объект.

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

развернуть все

Задайте значение для идентификатора для группы slmetric.metric.ResultDetail объекты.

Задайте значение для имени группы slmetric.metric.ResultDetail объекты.

Примеры

развернуть все

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

Используя createNewMetricClass функционируйте, создайте метрический класс под названием DataStoreCount. Эта метрика считает количество Data Store Read, и Data Store Write блокирует и собирает в группу их соответствующим Блоком памяти Хранилища данных. 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.AggregateComponentDetails = true;
            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 метод установлен в истину. Метрический алгоритм содержит логику для 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 = 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