Класс: slmetric.metric.ResultDetail
Пакет: slmetric.metric
Получение идентификатора для группы slmetric.metric.ResultDetail объекты
Получение идентификатора для группы slmetric.metric.ResultDetail объекты. Вызов execute собирает метрические данные. Запрос getMetrics получает доступ к slmetric.metric.Result объекты, которые включают slmetric.metric.ResultDetail объекты. Применить getGroupIdentifier метод к slmetric.metric.ResultDetail объект.
получает идентификатор группы для groupIdentifier = getGroupIdentifier(mrd)slmetric.metric.ResultDetail объект mrd.
mrd — slmetric.metric.ResultDetail объектВызов slmetric.Engine.execute метод создает slmetric.metric.Result объекты, которые включают slmetric.metric.ResultDetail объекты.
groupIdentifier - Идентификатор группыИдентификатор для группы 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. Эта метрика подсчитывает количество блоков чтения хранилища данных и записи хранилища данных и группирует их с помощью соответствующего блока памяти хранилища данных. 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 = 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');
slmetric.metric.getAvailableMetrics | slmetric.metric.Result | slmetric.metric.ResultCollection | slmetric.metric.ResultDetail
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.