exponenta event banner

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 Укажите кратную ширину для пользовательского виджета «Панель показателей»

Примеры

свернуть все

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

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

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.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

Нажмите кнопку «Все метрики» и запустите все метрики.

Представлен в R2018b