Класс: slmetric.dashboard.Group
Пакет: slmetric.dashboard
Задайте линии на сторонах панели мониторинга Metrics
setSeparators(
определяет, есть ли линии на сторонах S
)slmetric.dashboard.Group
объект.
S
- Структура четырех логических значенийStructure
| Array of Structures
Вход является массивом структур, состоящим из следующих полей:
S.top
S.bottom
S.left
S.right
Каждое поле должно быть установлено в 1
или 0
. Значение 1
указывает, что на этой стороне группы имеется линия. Значение 0
указывает, что на этой стороне группы нет линии. Чтобы указать, что стороны группы всегда одинаковы, даже если размер экрана изменяется, можно передать одну структуру. Прохождение четырех структур указывает, что стороны группы могут иметь различные диафрагмы, когда изменяется размер ширины экрана. Используйте setWidths
метод для задания до четырех различных ширин.
Типы данных: char
Создайте пользовательскую метрику, которая подсчитывает невиртуальные блоки. Укажите виджет, чтобы отобразить эту метрику на панели инструментов Metrics. Добавить его в группу Size.
Создайте пользовательский класс метрики.
className = 'nonvirtualblockcount'; slmetric.metric.createNewMetricClass(className);
Создайте невиртуальную метрику счетчика блоков путем добавления этого кода к nonvirtualblockcount.m
файл.
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.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 all 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
Нажмите кнопку All Metrics и запустите все метрики.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.