Main Content

Simulink 模型中的单位指定

Simulink® 允许您指定物理单位作为模型组件边界处的信号的属性。此类组件可以是:

  • 子系统

  • 引用的 Simulink 模型

  • Simulink-PS Converter (Simscape)PS-Simulink Converter (Simscape) 模块,它们作为接口连接 Simulink 和在 Simscape™ 中开发的组件及其关联的物理建模产品

  • Stateflow® 图、状态转移表或真值表

  • MATLAB Function 模块

  • Constant 模块

  • Data Store MemoryData Store ReadData Store Write 模块

  • C MEX S-Function

通过指定、控制和可视化信号单位,您可以确保模型各组件之间的计算一致性。例如,如果您要将许多单独开发的组件集成到一个大型整体系统模型中,这种额外的一致性检查会很有用。

在 Simulink 模型中,您需要根据单位数据库指定单位。单位数据库包含以下单位制的单位:

  • SI - 国际单位制

  • SI (extended) - 国际单位制(扩展)

  • English - 英国单位制

  • CGS - 厘米-克-秒单位制

根据您所建模的系统类型,您可以使用这些受支持的单位制中的任意单位组合。有关受支持的单位制及其包含的单位的详细信息,请参阅允许使用的单位

您可以通过以下模块为信号指定单位:

您可以通过以下对象为信号指定单位:

当您向模型中添加受支持的模块时,该模块的单位参数默认设置为 inherit。此设置意味着该模块将从连接的、显式指定了单位的信号中继承单位。

您可以使用受支持的模块的单位参数为信号显式指定单位。对于此参数,对话框中提供了匹配的建议以帮助您指定正确的单位:

如果您未提供格式正确的单位表达式,会出现错误消息。格式正确的单位表达式由单位名称或符号,加上正确配对的圆括号以及 */^ 字符组合而成。不支持 []{}<>\"& 等特殊字符。

默认情况下,模块端口具有单位(即未指定),而单位参数设置为 inherit。当您为一个端口指定单位时,Simulink 将检查与该端口相连的任何端口的单位设置。如果一个端口具有空单位,您可以将其连接到具有任何受支持的单位的另一个端口上。如果一个端口的单位参数设置为 inherit,它将继承所连接的、指定了单位的端口的单位。

要显示模型中 Simulink 行的单位,请在调试选项卡上,点击叠加信息 > 单位

无单位、无量纲和无单位量的规范

当处理无单位、无量纲或无单位量的情形时,请考虑以下规范:

  • 没有单位的纯数字

    考虑使用 1,即 SI 标准无量纲单位。Simulink 检查单位,以确保其他无量纲量也在其中传播。您可以对这些类型的数字进行加法、乘法和其他操作。

  • 未指定单位

    考虑使用空单位,其中单位参数为空。当此参数为空时,Simulink 接受传播到端口的任何单位,而不返回警告。

  • 整数计数单位

    考虑使用计数来表示整数计数单位。对于难以描述但认为是无单位或无量纲量,如热可达状态或 PWM 计数,请使用此单位。有关详细信息,请参阅允许的单位中的计数

  • 无量纲物理量

    无量纲物理量表示特定的物理量。考虑使用物理量 velocity_factorrefractive_indexrelative_permeabilitystrainReynolds_numberlogical。其中一些物理量(strain Reynolds_number)有对应的单位。要为其他物理量指定单位,请使用 1@physical quantity 等格式,例如,1@refractive_index。Simulink 在传播时执行物理量检查。例如,如果模型尝试添加量纲物理量,Simulink 会返回警告。

  • 纯定标数

    考虑使用 ppmppbppt

指定物理量

对物理系统进行建模时,可以为表示不同物理量的两个或多个信号使用相同的单位表达式。例如,单位表达式 N*m 既可能表示扭矩,也可能表示能量。为了防止将两个单位相同但表示不同物理量的端口错误地连接在一起,您可以在单位表达式中添加一个物理量。例如,对于相同的单位 N*m,您可以指定不同的物理量 N*m@torqueN*m@energy。与单位类似,当您键入物理量的名称时,对话框中也会提供建议。

物理量可以帮助您在连接的端口之间强制应用额外的单位一致性检查。当您尝试连接具有不同物理量的端口时,模型会显示警告消息。

在对象中指定单位

默认情况下,Simulink.ValueTypeSimulink.SignalSimulink.BusElementSimulink.Parameter 对象具有空单位。如果是:

  • Simulink.ValueType 对象,该对象不会为对应的信号附加单位。

  • Simulink.Signal 对象,空单位意味着对应的信号可以继承上游或下游端口的单位。

  • Simulink.BusElement 对象,空单位意味着对应的总线元素也具有空单位。您可以将该元素连接到具有任何单位的端口上,但该元素不会从该端口继承单位。

  • Simulink.Parameter 对象,该对象不会为对应的参数值附加单位。

如果您在 Simulink.ValueTypeSimulink.SignalSimulink.BusElement 对象中指定单位,在以下情况下,Simulink 会将该属性应用于对应的信号线:

  • Simulink.ValueType 对象指定模型中信号的属性。

  • Simulink.Signal 对象解析为模型中的一个信号。

  • Simulink.BusElement 对象与 Simulink.Bus 对象相关联,且您通过应用了 Simulink.Bus 对象的 Bus CreatorBus SelectorBus Assignment 模块使用对应的总线元素。

对于 Simulink.Parameter 对象,Simulink 不会应用任何属性。对于所有对象,如果单位参数具有格式不正确的值,您会看到错误。如果单位的格式正确但未定义,您会在编译模型时看到警告消息。如果单位表达式包含特殊字符,例如 []{}<>\"& 等,Simulink 将用下划线 (_) 代替它们。

自定义单位属性

从 R2016a 开始有关 UnitDocUnits 属性的说明:

  • DocUnits 属性现在是 Simulink.ParameterSimulink.Signal 对象的 Unit。如果您在以前的版本中使用 Simulink.ParameterSimulink.Signal 对象的 DocUnits 参数所包含的文本不符合现在的单位设定,则进行模型仿真时会返回警告。

    要抑制这些警告,请将配置参数 Units inconsistency messages 设置为 none。此设置可禁止所有单位不一致检查警告。

  • 如果您有一个从 Simulink.ParameterSimulink.SignalSimulink.BusElement 派生的类具有以前定义的 Unit 属性,Simulink 会返回如下错误:

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

    如果您使用此属性来表示信号的物理单位,请在 R2016a 或更高版本中从派生类中删除 Unit 属性。现有脚本仍然可以工作,除非您为 Unit 字段指定格式不正确的单位表达式。在这种情况下,请将 Unit 替换为 DocUnits,以便能够继续指定单位表达式。

    注意

    如果您要将现有数据存储在 R2016a 之前的版本的 MAT 文件或 .sldd 文件中,请首先将 Unit 属性的内容复制到 DocUnits 中。然后将该文件保存为较早的版本,之后再将模型加载到 R2016a 或更高版本中。

为温度信号指定单位

为绝对温度量值建模时,可以使用 KdegCdegFdegR 等单位。为温差量值建模时,可以使用 deltaKdeltadegCdeltadegFdeltadegR 等单位。如果您将具有温差单位的信号连接到指定了绝对温度单位的模块,Simulink 会检测到单位不匹配。

在 MATLAB Function 模块中指定单位

通过在属性检查器的单位(例如,m、m/s^2、N*m) 参数中指定单位,可以指定 MATLAB Function 模块的输入和输出单位。双击 MATLAB Function 模块以打开 MATLAB Function 模块编辑器。在建模选项卡的“设计”部分中,点击符号窗格。右键点击变量名称并选择检查。默认情况下,此属性为 inherit,这意味着单位与传送至端口的信号单位相同。如果为输出选择数据必须解析为信号对象属性,则连接到输出端口的信号将确定端口单位和除名称作用域之外的其他属性。

MATLAB Function 模块检查 Simulink 信号单位是否与分配给模块对应输入或输出的单位匹配。如果单位不匹配,当您更新模型时,Simulink 会显示警告。否则,单位设置不会影响 MATLAB Function 模块的执行。

指定 Constant 模块中的单位

您可以使用 Simulink.Parameter 对象中的单位属性来指定 Constant 模块的输出数据的单位。

为记录和加载信号数据指定单位

您可以在记录或加载的信号数据中包含单位。

您可以使用 Simulink.SimulationData.Unit 对象为日志记录和加载操作指定单位。当您使用数据集时间序列格式记录时,Simulink 使用 Simulink.SimulationData.Unit 对象存储单位信息。如果您创建 MATLAB® 时间序列数据以供加载,则可以为 timeseries 对象的 Units 属性指定 Simulink.SimulationData.Unit 对象。

有关详细信息,请参阅Load Signal Data That Uses Units

限制单位制

默认情况下,您可以指定任何受支持的单位制中的单位。但在大型建模工程中,为了确保一致性,您可能需要限制模型的某些组件可以使用的单位制。要为模型指定可用的单位制,请在配置参数允许的单位制中输入 all,或者输入由 SISI (extended)CGSEnglish 中的一个或多个值组成的逗号分隔列表。不要使用引号。如果您的模型包含引用模型,可以使用允许的单位制限制每个引用模型中的单位。如果您的模型包含子系统,可以使用 Unit System Configuration 模块限制子系统中的单位。(可选)还可以在模型中使用 Unit System Configuration 模块。在这种情况下,Unit System Configuration 模块中的设置将覆盖您在允许的单位制中指定的任何单位。

要限制模型中的单位制,请执行以下操作:

  1. InportOutportSignal Specification 模块的单位参数中,点击提供的链接。

    如果您的模型中存在 Unit System Configuration 模块,此链接将打开模块对话框。否则,此链接将打开允许的单位制配置参数。

  2. 以逗号分隔列表的形式指定 SISI (extended)EnglishCGS 中的一个或多个所需的单位制,或者指定 all,不要使用引号。

在父子关系中(例如,顶层模型中包含引用模型或子系统),您可以为每个组件指定不同的单位。但是,如果子级向父级传播了一个单位,而该单位不在为父级指定的单位制中,则您会看到警告消息。

要检查您的模型层次结构中是否存在因单位制受限而导致的单位不匹配,请执行以下操作:

  • Ctrl+D,目测检查模型中是否存在警告标志。

  • 使用模型顾问检查标识不允许的单位制

另请参阅

模块

对象

相关主题