Class: slmetric.dashboard.Group
Package: slmetric.dashboard
Determine whether there are lines on sides of Metrics Dashboard group
group
— Group for which you want to know whether there are separatorsslmetric.dashboard.Group
objectDetermine whether there are separators on the sides of an
slmetric.dashboard.Group
object.
S
— Structure of four fieldsStructure
| Array of Structures
The output is a structure or an array of structures consisting of these fields:
S.top
S.bottom
S.left
S.right
Each field is empty or has a value of 1
or
0
. An empty field indicates that you did not set a value. A value
of 1
indicates that there is a line on that group side. A value of
0
indicates that there is no line on
that group side.
Create a custom metric that counts nonvirtual blocks. Specify a widget to display this metric on the Metrics Dashboard. Add it to the Size Group.
Create a custom metric class.
className = 'nonvirtualblockcount'; slmetric.metric.createNewMetricClass(className);
Create the nonvirtual block count metric by adding this code to the
nonvirtualblockcount.m
file.
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 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
Register the new metric in the metric repository.
[id_metric,err_msg] = slmetric.metric.registerMetric(className);
To begin, open the default configuration for the Metrics Dashboard layout.
conf = slmetric.dashboard.Configuration.open();
Obtain the slmetric.dashboard.Layout
object from the
slmetric.dashboard.Configuration
object.
layout = getDashboardLayout(conf);
Obtain widget objects that are in the layout object.
layoutWidget=getWidgets(layout);
Remove the widget that represents the Simulink block count metric.
sizeGroup = layoutWidget(2); sizeGroupWidgets = sizeGroup.getWidgets(); sizeGroup.removeWidget(sizeGroupWidgets(1));
Add a widget that displays the nonvirtual block count metric. For custom widgets,
the default visualization type is single value. If you want to use a different
visualization technique, specify a different value for the
VisualizationType
property.
newWidget = sizeGroup.addWidget('Custom', 1); newWidget.Title=('Nonvirtual Block Count'); newWidget.setMetricIDs('nonvirtualblockcount'); newWidget.setWidths(slmetric.dashboard.Width.Medium); newWidget.setHeight(70);
Specify whether there are lines separating the custom widget from other widgets in the group. These commands specify that there is a line to the right of the widget.
s.top = false; s.bottom = false; s.left= false; s.right= true; newWidget.setSeparators([s, s, s, s]);
Save the configuration object. This command serializes the API information to an XML file.
save(conf,'Filename','DashboardConfig.xml');
Set the active configuration.
slmetric.dashboard.setActiveConfiguration(fullfile(pwd,'DashboardConfig.xml'));
For your model, open the Metrics Dashboard.
metricsdashboard sf_car
Click the All Metrics button and run all metrics.
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.