slmetric.dashboard. Класс CustomWidget

Пакет: slmetric.dashboard

Объект для содержания пользовательских Метрических виджетов Инструментальной панели

Описание

Для пользовательских или поставленных метрик используйте объект slmetric.dashboard.CustomWidget визуализировать метрические данные в Метрической Инструментальной панели. Выберите одно значение, радиальный прибор, столбчатую диаграмму или подход карты тепла распределения.

Конструкция

Для slmetric.dashboard.Layout slmetric.dashboard.Container или объекты slmetric.dashboard.Group, использует addWidget или методы removeWidget, чтобы добавить или удалить объекты slmetric.dashboard.CustomWidget из Метрической Инструментальной панели. Используйте методы slmetric.dashboard.CustomWidget, чтобы задать размер виджета.

Свойства

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

Тип объекта slmetric.dashboard.CustomWidget, который вы хотите добавить, удалите или измените в Метрической Инструментальной панели. Это свойство является чтением-записью. Выберите из этих типов виджета:

Типы данных: char

Добавьте метки в пользовательский виджет. Это свойство только для свойства BarChart VisualizationType, таким образом, можно добавить, применяют метки к каждой отдельной панели. Это свойство является чтением-записью.

Типы данных: char

Задайте заголовок для пользовательского виджета. Для радиального прибора существует 16 символьных пределов. Это свойство является чтением-записью.

Типы данных: char

Тип объекта slmetric.dashboard.CustomWidget. Это свойство доступно только для чтения.

Типы данных: char

Методы

getHeight Получите высоту Метрической Инструментальной панели пользовательский виджет
getMetricIDs Получите метрический идентификатор для пользовательского Метрического виджета Инструментальной панели
getPosition Получите пользовательское положение виджета в Метрической Инструментальной панели
getSeparatorsОпределите, существуют ли строки на сторонах Метрической Инструментальной панели пользовательский виджет
getWidths Получите ширины Метрической Инструментальной панели пользовательский виджет
setHeight Задайте высоту Метрической Инструментальной панели пользовательский виджет
setMetricIDs Установите метрический идентификатор для пользовательского Метрического виджета Инструментальной панели
setPosition Установите пользовательское положение виджета в Метрической Инструментальной панели
setSeparators Задайте строки на Метрической Инструментальной панели пользовательские стороны виджета
setWidths Задайте ширины множителей для Метрической Инструментальной панели пользовательский виджет

Примеры

свернуть все

Создайте пользовательскую метрику, которая считает невиртуальные блоки. Задайте виджет, чтобы отобразить эту метрику на Метрической Инструментальной панели. Добавьте его в Size Group.

Создайте пользовательский метрический класс.

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.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.AggregateComponentDetails = true;
        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);

Чтобы начаться, откройте настройку по умолчанию для Метрического размещения Инструментальной панели.

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'));

Для модели откройте Метрическую Инструментальную панель.

metricsdashboard sf_car

Нажмите кнопку All Metrics и запустите все метрики.

Введенный в R2018b