Main Content

systemcomposer.analysis.Instance

Element in analysis instance

Since R2019a

Description

An Instance object represents an instance of a System Composer™ model element.

Related objects include:

Creation

Create an instance of an architecture using the instantiate function.

instance = instantiate(model.Architecture,'LatencyProfile','NewInstance', ...
'Function',@calculateLatency,'Arguments','3','Strict',true, ...
'NormalizeUnits',false,'Direction','PreOrder')

Properties

expand all

Name of instance, specified as a character vector.

Example: 'NewInstance'

Data Types: char

Object Functions

getValueGet value of property from element instance
setValueSet value of property for element instance
hasValueFind if element instance has property value
isArchitectureFind if instance is architecture instance
isComponentFind if instance is component instance
isConnectorFind if instance is connector instance
isPortFind if instance is port instance

Examples

collapse all

Create an instantiation for analysis for a system with latency in its wiring. The materials used are copper, fiber, and WiFi.

Create Latency Profile with Stereotypes and Properties

Create a System Composer profile with a base, connector, component, and port stereotype. Add properties with default values to each stereotype as needed for analysis.

profile = systemcomposer.profile.Profile.createProfile("LatencyProfileC");

Add a base stereotype with properties.

latencybase = profile.addStereotype("LatencyBase");
latencybase.addProperty("latency",Type="double");
latencybase.addProperty("dataRate",Type="double",DefaultValue="10");

Add a connector stereotype with properties.

connLatency = profile.addStereotype("ConnectorLatency",...
    Parent="LatencyProfileC.LatencyBase");
connLatency.addProperty("secure",Type="boolean",DefaultValue="true");
connLatency.addProperty("linkDistance",Type="double");

Add a component stereotype with properties.

nodeLatency = profile.addStereotype("NodeLatency",...
    Parent="LatencyProfileC.LatencyBase");
nodeLatency.addProperty("resources",Type="double",DefaultValue="1");

Add a port stereotype with properties.

portLatency = profile.addStereotype("PortLatency",...
    Parent="LatencyProfileC.LatencyBase");
portLatency.addProperty("queueDepth",Type="double",DefaultValue="4.29");
portLatency.addProperty("dummy",Type="int32");

Instantiate Using Analysis Function

Create a new model and apply the profile. Create components, ports, and connections in the model. Apply stereotypes to the model elements. Finally, instantiate using the analysis function.

model = systemcomposer.createModel("archModel",true);
arch = model.Architecture;

Apply profile to model.

model.applyProfile("LatencyProfileC");

Create components, ports, and connections.

componentSensor = addComponent(arch,"Sensor");
sensorPorts = addPort(componentSensor.Architecture,{'MotionData','SensorPower'},{'in','out'});

componentPlanning = addComponent(arch,"Planning");
planningPorts = addPort(componentPlanning.Architecture,...
    {'Command','SensorPower','MotionCommand'},...
    {'in','in','out'});
componentMotion = addComponent(arch,"Motion");
motionPorts = addPort(componentMotion.Architecture,...
    {'MotionCommand','MotionData'},{'in','out'});

c_sensorData = connect(arch,componentSensor,componentPlanning);
c_motionData = connect(arch,componentMotion,componentSensor);
c_motionCommand = connect(arch,componentPlanning,componentMotion);

Clean up the canvas.

Simulink.BlockDiagram.arrangeSystem("archModel"); 

Batch apply stereotypes to model elements.

batchApplyStereotype(arch,"Component","LatencyProfileC.NodeLatency");
batchApplyStereotype(arch,"Port","LatencyProfileC.PortLatency");
batchApplyStereotype(arch,"Connector","LatencyProfileC.ConnectorLatency");

Instantiate using the analysis function.

instance = instantiate(model.Architecture,"LatencyProfileC","NewInstance",...
    Function=@calculateLatency,Arguments="3", ...
    Strict=true,NormalizeUnits=false,Direction="PreOrder")
instance = 
  ArchitectureInstance with properties:

        Specification: [1×1 systemcomposer.arch.Architecture]
             IsStrict: 1
       NormalizeUnits: 0
     AnalysisFunction: @calculateLatency
    AnalysisDirection: PreOrder
    AnalysisArguments: '3'
      ImmediateUpdate: 0
           Components: [1×3 systemcomposer.analysis.ComponentInstance]
                Ports: [0×0 systemcomposer.analysis.PortInstance]
           Connectors: [1×3 systemcomposer.analysis.ConnectorInstance]
                 Name: 'NewInstance'

Inspect Component, Port, and Connector Instances

Get properties from component, port, and connector instances.

defaultResources = instance.Components(1).getValue("LatencyProfileC.NodeLatency.resources")
defaultResources = 1
defaultSecure = instance.Connectors(1).getValue("LatencyProfileC.ConnectorLatency.secure")
defaultSecure = logical
   1

defaultQueueDepth = instance.Components(1).Ports(1).getValue("LatencyProfileC.PortLatency.queueDepth")
defaultQueueDepth = 4.2900

Overview

Model a typical automotive electrical system as an architectural model and run a primitive analysis. The elements in the model can be broadly grouped as either a source or a load. Various properties of the sources and loads are set as part of the stereotype. This example uses the iterate method of the specification API to iterate through each element of the model and run analysis using the stereotype properties.

Structure of Model

The generator charges the battery while the engine is running. The battery and the generator support the electrical loads in the vehicle, like ECU, radio, and body control. The inductive loads like motors and other coils have the InRushCurrent stereotype property defined. Based on the properties set on each component, the following analyses are performed:

  • Total KeyOffLoad.

  • Number of days required for KeyOffLoad to discharge 30% of the battery.

  • Total CrankingInRush current.

  • Total Cranking current.

  • Ability of the battery to start the vehicle at 0°F based on the battery cold cranking amps (CCA). The discharge time is computed based on Puekert coefficient (k), which describes the relationship between the rate of discharge and the available capacity of the battery.

Load Model and Run Analysis

archModel = systemcomposer.loadModel('scExampleAutomotiveElectricalSystemAnalysis');

Instantiate battery sizing class used by the analysis function to store analysis results.

objcomputeBatterySizing = computeBatterySizing;

Run the analysis using the iterator.

archModel.iterate('Topdown',@computeLoad,objcomputeBatterySizing)

Display analysis results.

objcomputeBatterySizing.displayResults
Total KeyOffLoad: 158.708 mA
Number of days required for KeyOffLoad to discharge 30% of battery: 55.789.
Total CrankingInRush current: 70 A
Total Cranking current: 104 A
CCA of the specified battery is sufficient to start the car at 0 F.
ans = 
  computeBatterySizing with properties:

    totalCrankingInrushCurrent: 70
          totalCrankingCurrent: 104
        totalAccesoriesCurrent: 71.6667
               totalKeyOffLoad: 158.7080
                    batteryCCA: 500
               batteryCapacity: 850
            puekertcoefficient: 1.2000

scExampleAutomotiveElectricalSystemAnalysis_m_01.png

Close Model

bdclose('scExampleAutomotiveElectricalSystemAnalysis');

More About

expand all

Version History

Introduced in R2019a