Пакет: slmetric.metric
Установите метаданные для пользовательских метрик
The slmetric.metric.MetaInformation свойства класса содержат метрические метаданные. На панели инструментов Metrics, когда вы кликните виджет для индивидуума метрики, эти метаданные находятся в таблице. Для пользовательских метрик, когда вы создаете пользовательский класс метрики, вы задаете slmetric.metric.MetaInformation применимые свойства.
Создайте slmetric.Engine объект. Используйте getMetricMetaInformation свойство для возврата slmetric.metric.MetaInformation объект.
Name - Метрическое имяДля пользовательских метрик, когда вы задаете пользовательский класс метрики, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: 'Стандарты Model Advisor проверяют податливость High Integrity'
Типы данных: char
Description - Метрическое описаниеДля пользовательских метрик, когда вы задаете пользовательский класс метрики, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: 'Metric, который подсчитывает процент проверок, прошедших для группы проверки стандартов High Integrity Model Advisor'.
Типы данных: char
MeasuresNames - Имена метрических измеренийДля пользовательских метрик, когда вы задаете пользовательский класс метрики, если применимо, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: {'Пройденные проверки'} {'Всего проверок'}
Типы данных: char
AggregatedMeasuresNames - Имена агрегированных метрических измеренийДля пользовательских метрик, когда вы задаете пользовательский класс метрики, если применимо, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: {'Пройденные проверки (включая потомки'} {'Всего проверок'}
Типы данных: char
ValueName - Имя значенияДля пользовательских метрик, когда вы задаете пользовательский класс метрики, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: 'Passed Checks'
Типы данных: char
AggregatedValueName - Имя агрегированного метрического значенияДля пользовательских метрик, когда вы задаете пользовательский класс метрики, задайте это свойство. Для поставленных метрик это свойство уже задано.
Пример: {'Пройденные проверки (включая потомки'} {'Всего проверок'}
Типы данных: char
Создайте пользовательскую метрику, которая подсчитывает невиртуальные блоки. Укажите виджет, чтобы отобразить эту метрику на панели инструментов Metrics. Добавить его в группу Size.
Создайте пользовательский класс метрики.
className = 'nonvirtualblockcount'; slmetric.metric.createNewMetricClass(className);
Создайте невиртуальную метрику счетчика блоков путем добавления этого кода к nonvirtualblockcount.m файл. The this = nonvirtualblockcount функция устанавливает slmetric.metric.MetaInformation свойства.
classdef nonvirtualblockcount < slmetric.metric.Metric
%nonvirtualblockcount calculates number of nonvirtual blocks per level.
% BusCreator, BusSelector and BusAssign are treated as nonvirtual.
properties
VirtualBlockTypes = {'Demux','From','Goto','Ground', ...
'GotoTagVisiblity','Mux','SignalSpecification', ...
'Terminator','Inport'};
end
methods
function this = nonvirtualblockcount()
this.ID = 'nonvirtualblockcount';
this.Name = 'Nonvirtual Block Count';
this.Version = 1;
this.CompileContext = 'None';
this.Description = 'Algorithm that counts nonvirtual blocks per level.';
this.AggregatedValueName = 'Nonvirtual Blocks (incl. Descendants)'
this.ValueName = 'Nonvirtual Blocks'
this.ComponentScope = [Advisor.component.Types.Model, ...
Advisor.component.Types.SubSystem];
this.AggregationMode = slmetric.AggregationMode.Sum;
this.ResultChecksumCoverage = true;
this.SupportsResultDetails = true;
end
function res = algorithm(this, component)
% create a result object for this component
res = slmetric.metric.Result();
% set the component and metric ID
res.ComponentID = component.ID;
res.MetricID = this.ID;
% Practice
D1=slmetric.metric.ResultDetail('identifier 1','Name 1');
D1.Value=0;
D1.setGroup('Group1','Group1Name');
D2=slmetric.metric.ResultDetail('identifier 2','Name 2');
D2.Value=1;
D2.setGroup('Group1','Group1Name');
% use find_system to get blocks inside this component
blocks = find_system(getPath(component), ...
'SearchDepth', 1, ...
'Type', 'Block');
isNonVirtual = true(size(blocks));
for n=1:length(blocks)
blockType = get_param(blocks{n}, 'BlockType');
if any(strcmp(this.VirtualBlockTypes, blockType))
isNonVirtual(n) = false;
else
switch blockType
case 'SubSystem'
% Virtual unless the block is conditionally executed
% or the Treat as atomic unit check box is selected.
if strcmp(get_param(blocks{n}, 'IsSubSystemVirtual'), ...
'on')
isNonVirtual(n) = false;
end
case 'Outport'
% Outport: Virtual when the block resides within
% SubSystem block (conditional or not), and
% does not reside in the root (top-level) Simulink window.
if component.Type ~= Advisor.component.Types.Model
isNonVirtual(n) = false;
end
case 'Selector'
% Virtual only when Number of input dimensions
% specifies 1 and Index Option specifies Select
% all, Index vector (dialog), or Starting index (dialog).
nod = get_param(blocks{n}, 'NumberOfDimensions');
ios = get_param(blocks{n}, 'IndexOptionArray');
ios_settings = {'Assign all', 'Index vector (dialog)', ...
'Starting index (dialog)'};
if nod == 1 && any(strcmp(ios_settings, ios))
isNonVirtual(n) = false;
end
case 'Trigger'
% Virtual when the output port is not present.
if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'off')
isNonVirtual(n) = false;
end
case 'Enable'
% Virtual unless connected directly to an Outport block.
isNonVirtual(n) = false;
if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'on')
pc = get_param(blocks{n}, 'PortConnectivity');
if ~isempty(pc.DstBlock) && ...
strcmp(get_param(pc.DstBlock, 'BlockType'), ...
'Outport')
isNonVirtual(n) = true;
end
end
end
end
end
blocks = blocks(isNonVirtual);
res.Value = length(blocks);
end
end
endЗарегистрируйте новую метрику в репозитории метрики.
[id_metric,err_msg] = slmetric.metric.registerMetric(className);
Чтобы начать, откройте строение по умолчанию для размещения инструментальной панели Metrics.
conf = slmetric.dashboard.Configuration.open();
Получите slmetric.dashboard.Layout объект из slmetric.dashboard.Configuration объект.
layout = getDashboardLayout(conf);
Получите объекты виджета, которые находятся в объекте размещения.
layoutWidget=getWidgets(layout);
Удалите виджет, который представляет метрику счетчика блоков Simulink.
sizeGroup = layoutWidget(2); sizeGroupWidgets = sizeGroup.getWidgets(); sizeGroup.removeWidget(sizeGroupWidgets(1));
Добавьте виджет, в котором отображается невиртуальная метрика счетчика блоков. Для пользовательских виджетов типом визуализации по умолчанию является одно значение. Если вы хотите использовать другой метод визуализации, задайте другое значение для VisualizationType свойство.
newWidget = sizeGroup.addWidget('Custom', 1);
newWidget.Title=('Nonvirtual Block Count');
newWidget.setMetricIDs('nonvirtualblockcount');
newWidget.setWidths(slmetric.dashboard.Width.Medium);
newWidget.setHeight(70);
Укажите, существуют ли линии, отделяющие пользовательский виджет от других виджетов в группе. Эти команды определяют, что справа от виджета есть линия.
s.top = false; s.bottom = false; s.left= false; s.right= true; newWidget.setSeparators([s, s, s, s]);
Сохраните объект строения. Эта команда сериализует информацию API в XML- файл.
save(conf,'Filename','DashboardConfig.xml');
Установите активное строение.
slmetric.dashboard.setActiveConfiguration(fullfile(pwd,'DashboardConfig.xml'));
Для модели откройте инструментальную панель Metrics.
metricsdashboard sf_car
Нажмите кнопку воспроизведения и запустите все метрики.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.