Unit Specification in Simulink Models

Simulink® enables you to specify physical units as attributes on signals at the boundaries of model components. Such components can be:

  • Subsystems

  • Referenced Simulink models

  • Simulink-PS Converter (Simscape) and PS-Simulink Converter (Simscape) blocks that interface between Simulink and components developed in Simscape™ and its associated physical modeling products

  • Stateflow® charts, state transition tables, or truth tables

  • MATLAB Function blocks

  • Constant blocks

  • Data Store Memory, Data Store Read, and Data Store Write blocks

By specifying, controlling, and visualizing signal units, you can ensure the consistency of calculations across the various components of your model. For example, this added degree of consistency checking is useful if you are integrating many separately developed components into a large, overall system model.

In Simulink models, you specify units from a unit database. The unit database comprises units from the following unit systems:

  • SI — International System of Units

  • SI (extended) — International System of Units (extended)

  • English — English System of Units

  • CGS — Centimetre-gram-second System of Units

Based on the type of system you are modeling, you can use any combination of units from these supported unit systems. For more information about supported unit systems and the units they contain, see Allowed Units.

You can assign units to signals through these blocks:

and these objects:

When you add a supported block to your model, the Unit parameter on the block is set to inherit by default. This setting means that the block inherits the unit from a connecting signal that has an explicitly specified unit.

You can explicitly specify units for signals using the Unit parameter of a supported block. For this parameter, the dialog box provides matching suggestions to help you:

If you do not provide a correctly formed unit expression, you get an error. Correctly formed unit expressions are a combination of unit names or symbols with properly balanced parentheses and *, /, and ^ characters. Special characters such as [, ], {, }, <, >, \, ", &, and so forth are not supported.

By default, a block port has an empty (that is, unspecified) unit and the Unit parameter is set to inherit. When you specify a unit for one port, Simulink checks the unit setting of any port connected to it. If a port has an empty unit, you can connect it to another port that has any supported unit. If a port unit parameter is set to inherit, it inherits the unit from a connected port that has a specified unit.

Specify Physical Quantities

When you model a physical system, it is possible to use the same unit expression for two or more signals that represent different physical quantities. For example, a unit expression of N*m can represent either torque or energy. To prevent mistaken connection of two ports with the same unit but representing different physical quantities, you can add a physical quantity to the unit expression. For example, for the same unit of N*m, you can specify different physical quantities of N*m@torque and N*m@energy. Similar to units, the dialog box provides suggestions as you type the names of physical quantities.

Physical quantities help you to enforce an extra degree of unit consistency checking between connected ports. When you attempt to connect ports with different physical quantities, the model displays a warning.

Specify Units in Objects

By default, Simulink.Signal, Simulink.BusElement, and Simulink.Parameter objects have empty units. In the case of a:

  • Simulink.Signal object, the empty unit means that the corresponding signal can inherit a unit from an upstream or downstream port.

  • Simulink.BusElement object, the empty unit means that the corresponding bus element signal also has an empty unit. You can connect the signal to a port with any unit, but the signal does not inherit a unit from the port.

  • Simulink.Parameter object, the object does not attach a unit to the corresponding parameter value.

If you specify a unit in a Simulink.Signal or Simulink.BusElement object, Simulink applies the attribute to the corresponding signal line when:

  • The Simulink.Signal object resolves to a signal in the model

  • You use a bus element signal that is associated with a Simulink.Bus object with a Bus Creator, Bus Selector, or Bus Assignment block.

For the Simulink.Parameter object, Simulink does not apply any attribute. For all objects, if the Unit parameter has a value that is not formed correctly, you see an error. If the unit is formed correctly but is undefined, you see a warning when you compile the model. If the unit expression contains special characters such as [, ], {, }, <, >, \, ", &, and so forth, Simulink replaces them with underscores (_).

Custom Unit Properties

Notes on the Unit and DocUnits properties starting in R2016a:

  • The DocUnits property is now Unit for Simulink.Parameter or Simulink.Signal objects. If, in a previous release, you used the DocUnits parameter of a Simulink.Parameter or Simulink.Signal object to contain text that does not now comply with units specifications, simulation returns a warning when the model simulates.

    To suppress these warnings, set the configuration parameter Units inconsistency messages to none. This setting suppresses all units inconsistency check warnings.

  • If you have a class that derives from Simulink.Parameter, Simulink.Signal, or Simulink.BusElement with a previously defined Unit property, Simulink returns an error like the following:

    ​Cannot define property 'Unit' in class 'classname' because
     the property has already been defined in the superclass 'superclass'.

    If you use this property to represent the physical unit of the signal, delete the Unit property from the derived class in the R2016a or later release. Existing scripts continue to work, unless you are assigning incorrectly formed unit expressions to the Unit field. In this case, replace the use of Unit with DocUnits to continue to be able to assign the unit expression.

    Note

    If you store existing data in a MAT- or .sldd file, in a release prior to R2016a, copy the contents of the Unit property to the DocUnits first. Then, save the file in the earlier release before loading the model in R2016a or later release.

Specify Units for Temperature Signals

When modeling absolute temperature quantities, use units such as K, degC, degF, and degR. When modeling temperature difference quantities, use units such as deltaK, deltadegC, deltadegF, and deltadegR. If you connect a signal that has a temperature difference unit to a block that specifies an absolute temperature unit, Simulink detects the mismatch.

Specify Units in MATLAB Function Blocks

You can specify units for input and output data of MATLAB Function blocks by using the Unit parameter on the Ports and Data Manager.

During model update, Simulink checks for inconsistencies in units between input or output data ports and the corresponding signals.

Specify Units in Constant Blocks

You can specify units for output data of Constant blocks by using the Unit property in the Simulink.Parameter object.

Specify Units for Logging and Loading Signal Data

You can include units in signal data that you log or load.

You specify units for logging and loading using Simulink.SimulationData.Unit objects. When you log using Dataset or Timeseries format, Simulink stores the unit information using Simulink.SimulationData.Unit objects. If you create MATLAB® timeseries data to load, you can specify Simulink.SimulationData.Unit object for the Units property of the timeseries object.

For details, see Log Signal Data That Uses Units and Load Signal Data That Uses Units.

Restricting Unit Systems

By default, you can specify units from any of the supported unit systems. However, in large modeling projects, to enforce consistency, you might want to restrict the unit systems that certain components of your model can use. To specify available unit systems for a model, in the configuration parameter Allowed unit systems, enter all or a comma-separated list containing one or more of SI, SI (extended), CGS, and English. Do not use quotation marks. If your model contains referenced models, you can use the Allowed unit systems to restrict units in each of those referenced models. If your model contains subsystems, you can use the Unit System Configuration block to restrict units in the subsystems. You can also optionally use a Unit System Configuration block in a model. In this case, the settings in the Unit System Configuration block override whatever you specify in Allowed unit systems.

To restrict unit systems in a model:

  1. In the Unit parameter of the Inport, Outport, or Signal Specification block, click the link.

    If a Unit System Configuration block exists in your model, this link opens the block dialog box. Otherwise, the link opens the Allowed unit systems configuration parameter.

  2. Specify one or more the desired unit systems, SI, SI (extended), English, or CGS, in a comma-delimited list, or all, without quotation marks.

In a parent-child relationship (for example, a top model with a referenced model or subsystem), you can specify different unit systems for each component. However, if a child propagates a unit into a parent that is not in the unit systems specified for the parent, you get a warning.

To check whether there are unit mismatches caused by restricted unit systems in your model hierarchy:

  • Press Ctrl+D and visually inspect the model for warning badges.

  • Use the Model Advisor check Identify disallowed unit systems.

See Also

| | | | | | | |

Related Examples

More About