Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

指定信号范围

Simulink® 模块允许您为其输出信号指定有效值范围。指定信号范围有助于优化数据类型和改进生成的代码。

如果您有 Embedded Coder®Simulink Coder™ 可以根据您为信号和参数指定的最小值和最大值来优化从模型生成的代码。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或 External 模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)

允许信号范围设定的模块

以下模块允许您为其输出信号指定范围:

在模块中使用信号范围

要为大多数模块指定信号范围,请使用模块的 Output minimumOutput maximum 参数指定模块输出信号的有效值范围。例外包括 Data Store MemoryInportOutportSignal Specification 模块,对于这些模块,请使用其 MinimumMaximum 参数指定信号范围。有关适用模块的列表,请参阅允许信号范围设定的模块

要访问这些参数,请使用 Property Inspector(在 Modeling 选项卡上,在 Design 下,点击 Property Inspector)、模型数据编辑器(在 Modeling 选项卡上,点击 Model Data Editor)或模块对话框。

将最小值或最大值指定为表达式,该表达式计算为 double 数据类型的标量实数。例如,您可以使用:

  • 字面数字,例如 98.884。隐式数据类型为 double

  • 数据类型为 double 的数值工作区变量(请参阅通过创建变量来共享和重用模块参数值)。使用此方法可在多个数据项之间共享最小值或最大值。

    但是,不能使用变量来设置 Simulink.Signal 对象的 MinMax 属性。

您指定的标量值适用于合成信号的每个元素(例如,当信号是非标量或总线时)。有关标量扩展的信息,请参阅输入信号和参数的标量扩展

要将信号的最小值或最大值保留为未指定,请使用空矩阵 [],这是默认值。

为建模结构指定范围

如果使用诸如总线信号、数据存储和 Stateflow® 图等建模结构,则可以使用不同方法来指定设计范围信息。使用表中的信息。

目标信号的描述方法和详细信息

数值复信号

当为数值复信号指定 Output minimumOutput maximum 时,指定的最小值和最大值分别适用于复数的实部和虚部。如果数字的实部或虚部中有任一项的值小于最小值或大于最大值,则复数在指定范围之外。不会对实部和虚部的任何组合(如 (sqrt(a^2+b^2)))进行范围检查。

总线中的信号元素

如果通过使用 Bus Creator 模块组合总线,则可以对向 Bus Creator 馈送信号的上游模块指定范围信息。

无论您使用什么方法组合总线,都可以创建 Simulink.Bus 对象并将其用作总线信号的数据类型。在这种情况下,请考虑使用在总线对象中的 Simulink.BusElement 对象的 MinMax 属性指定范围信息。有关详细信息,请参阅使用 Simulink.Bus 对象数据类型指定总线属性

MATLAB Function 模块中的信号

使用 Ports and Data Manager 指定数据的 MinimumMaximum 属性。请参阅Set General Data Properties

Stateflow 图中的信号

设置对应的 Stateflow 数据的 MinimumMaximum 属性。请参阅Limit Range (Stateflow)

与信号对象关联的信号(如 Simulink.Signal

设置信号对象的 MinMax 属性。请参阅 Simulink.Signal

数据存储(Data Store Memory 模块或 Simulink.Signal 对象)

对于 Data Store Memory 模块,请设置 MinimumMaximum 模块参数。对于信号对象,请设置 MinMax 属性。

信号范围错误故障排除

Simulink 提供一项名为 Simulation range checking 的诊断,可对仿真过程中信号超出其指定范围的情况进行检测。如果启用该诊断,Simulink 会将模块输出的信号值与指定范围(请参阅在模块中使用信号范围)和模块数据类型都进行比较。也就是说,Simulink 会执行以下检查:

DataTypeMin ≤ MinValue ≤ VALUE ≤ MaxValue ≤ DataTypeMax

其中

  • DataTypeMin 是模块数据类型可表示的最小值。

  • MinValue 是模块应输出的最小值,即 Output minimum 指定的值。

  • VALUE 是模块输出的信号值。

  • MaxValue 是模块应输出的最大值,即 Output maximum 指定的值。

  • DataTypeMax 是模块数据类型可表示的最大值。

注意

可以指定模块如何处理超过特定范围的信号。例如,您可以为两个信号范围参数都指定值(非默认值),并启用 Saturate on integer overflow 参数。在这种情况下,Simulink 会显示一条警告消息,建议您禁用 Saturate on integer overflow 参数。

启用仿真范围检查

要启用 Simulation range checking 诊断,请执行下列操作:

  1. 在您的模型窗口中,在 Modeling 选项卡上,点击 Model Settings

    Simulink 显示 Configuration Parameters 对话框。

  2. 在 Configuration Parameters 对话框左侧的 Select 树中,点击 Diagnostics > Data Validity 类别。在 Signals 下的右侧,将 Simulation range checking 诊断设置为 “error” 或 “warning”。

  3. 点击 OK 应用您的更改并关闭 Configuration Parameters 对话框。

有关详细信息,请参阅Simulation range checking

使用仿真范围检查对模型进行仿真

要检查信号范围错误或警告,请执行下列操作:

  1. 对模型启用 Simulation range checking 诊断(请参阅启用仿真范围检查)。

  2. 在模型窗口中,点击 Run 以仿真模型。

    Simulink 将仿真模型并执行信号范围检查。如果 Simulation range checking 诊断指定了 “error”,则当信号超出其指定范围时,Simulink 将停止仿真并生成错误(例如,在诊断查看器中)。

    否则,如果 Simulation range checking 诊断指定了 “warning”,则当信号超出其指定范围时,Simulink 会在 MATLAB® 命令行窗口中生成警告消息。这两类消息都会标识其输出信号超出其指定范围的模块,以及发生此违规的时间步。

虚拟模块的信号范围传播

某些虚拟模块(请参阅非虚拟和虚拟模块)允许您为其输出信号指定范围,例如 InportOutport 模块。当为包含这些模块的模型启用 Simulation range checking 诊断时,虚拟模块的信号范围反向传播到它接收其输出信号的非虚拟模块的第一个实例。如果非虚拟模块为它自己指定了不同的范围值,则 Simulink 会使用其中最窄的范围执行信号范围检查。也就是说,Simulink 使用较大的最小值和较小的最大值来检查信号。

例如,请参考以下模型:

在此模型中,Constant 模块将其 Output maximum 参数指定为 300,而 Inport 模块的该参数设置为 100。假设您启用 Simulation range checking 诊断并仿真模型。Inport 模块将其最大值反向传播到它前面的非虚拟模块,即 Constant 模块。然后,Simulink 使用两个最大值中较小者来检查 Constant 模块输出的信号。由于 Constant 模块输出的信号的值 (200) 超过最窄范围,Simulink 会生成错误。

对于精度或范围大于 double 的数据,生成意外错误或警告

当某数据项(信号或参数)使用 double 以外的数据类型时,在比较之前,Simulink 会将数据项和每个设计限制(您指定的最小值或最大值)转换为非双精度数据类型。此方法有助于防止产生不必要的误导性错误和警告。

但是,在比较之前,Simulink 会将设计限制存储为 double 数据类型。如果数据项的数据类型的精度高于 double(例如,具有 128 位字长和 126 位小数长度的定点数据类型)或范围大于 double,则 double 不能准确表示设计限制的值,此时 Simulink 可能会生成意外警告和错误。

如果非双精度类型具有更高的精度,请考虑将设计限制舍入为 double 可表示的距离零最远的下一个数字。例如,假设在将最大值设置为 98.8847692348509014 后,信号生成了错误。在命令提示符下,计算 double 可表示的距离零最远的下一个数字。

format long
98.8847692348509014 + eps(98.8847692348509014)
ans =

  98.884769234850921

使用舍入后得到的数字 98.884769234850921 替换最大值。

相关主题