Main Content

指定模块参数的最小值和最大值

您可以通过防止模块参数使用范围之外的值来保护模型设计。例如,如果表示飞机副翼角度的参数值实际上不可能超过某已知幅度,则可以为模型中的该参数指定设计最大值。

Fixed-Point Designer™ 使 Simulink® 能够使用范围信息来计算下列各项的最佳精度定点定标:

  • 可调参数。

  • 信号(通过考虑要为可调参数赋值的范围)。

有关模块参数的基本信息,请参阅设置模块参数值

指定参数值范围

为模块参数指定值范围时,通常可以选择将信息存储在模块(模型文件)中或外部变量或参数对象中。请基于您的建模目的选择一种方式。

  • 使用同一模块的其他参数(如果可用)。例如,使用模块对话框的参数属性选项卡中的参数最小值参数最大值参数,您可以控制 Gain 模块的增益参数的值范围。对于其他模块,例如 n-D Lookup TablePID Controller,请使用数据类型选项卡。

    使用此方法可以:

    • 将范围信息存储在模型文件中。

    • 在将定点数据类型信息存储在模块中时存储范围信息(例如,通过将 Gain 模块的参数数据类型参数设置为定点类型,包括最佳精度定标)。此方法更清楚地将范围信息与数据类型信息相关联。

  • 使用参数对象(例如 Simulink.Parameter)设置参数值。您可以使用对象的 MinMax 属性在对象中(而不是模块中)指定范围信息。

    使用此方法可以:

    • 指定不能存储最小值或最大值信息的模块的范围信息,例如 Continuous 库中的多个模块。

    • 指定在多个模块参数之间共享的单个值(请参阅通过创建变量来共享和重用模块参数值)的范围信息。此时不使用 MATLAB® 数值变量,而是使用参数对象,以便您可以指定 MinMax 属性。

    • 在将定点数据类型信息存储在参数对象中时(通过将 DataType 属性设置为定点类型而不是 auto)存储范围信息。此方法更清楚地将范围信息与数据类型信息相关联。

    如果在参数对象中指定范围信息,请考虑从模块中删除范围信息。例如,在 Gain 模块对话框的参数属性选项卡上,将参数最小值参数最大值设置为 []。某些工具(例如定点工具)仅当您未在参数对象中指定范围信息时才使用您在模块中指定的范围信息。如果在参数对象中指定了范围信息,则工具将忽略在模块中指定的范围信息。

    有关创建和使用数据对象的基本信息,请参阅数据对象

指定有效范围信息

将最小值或最大值指定为表达式,该表达式计算为 double 数据类型的标量实数。例如,您可以通过设置参数最小值Gain 模块中的增益参数指定最小值:

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

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

    但是,不能使用变量来设置参数对象的 MinMax 属性。

要将模块参数或参数对象的最小值或最大值保留为未指定,请使用空矩阵 [],这是默认值。

指定非标量参数的范围信息

如果模块参数的值是向量或矩阵,则指定的范围信息将应用于该向量或矩阵的每个元素。如果任一元素的值超出指定范围,则模型会生成错误。

如果模块参数的值是结构体或结构体的字段,请通过创建其数据类型为 Simulink.Bus 对象的 Simulink.Parameter 对象来指定结构体字段的范围信息。使用总线对象中信号元素的属性指定范围信息。有关详细信息,请参阅通过创建参数对象来控制字段数据类型和特征

指定复数值参数的范围信息

如果模块参数的值为复数 (i),则指定的范围信息将单独应用于复数的实部和虚部。如果复数的实部或虚部的值超出范围,则模型会生成错误。

使用模型数据编辑器指定多个参数的范围

使用模型数据编辑器(在建模选项卡上,点击模型数据编辑器),可以使用支持搜索和排序的表来为多个模块参数和变量指定值范围。在参数选项卡上,将更改视图下拉列表设置为设计并在最小最大列中指定值。

有关详细信息,请参阅模型数据编辑器

限制模块参数的允许值

要通过防止模块参数使用范围之外的值来保护您的设计,可以使用同一模块的其他参数指定最小值和最大值信息。如果您或您的用户将目标参数的值设置为在指定范围之外,则模型会生成错误。

无论模块是否允许您指定参数的值范围,请考虑使用参数对象(例如 Simulink.Parameter)来设置目标参数的值。使用对象的属性指定范围信息。此方法可帮助您指定用于设置多个模块参数值的变量的范围信息。

指定可调定点参数的范围信息

在模型中使用定点数据类型时,可以使 Simulink 为模块参数和 Simulink.Parameter 对象选择最佳精度定标。如果您打算通过在仿真期间或在生成的代码执行期间更改此类参数的值来调整参数,则 Simulink 选择的定点定标必须容纳您要赋给参数的值的范围。

此外,如果您要更改参数的值,则模型中的信号数据类型必须容纳可能的信号值的对应扩展范围。如果使用定点工具为模型建议和应用定点数据类型,要允许工具准确地自动定标信号,请指定可调参数的范围信息。

要指定可调参数的范围信息,请参阅Calculate Best-Precision Fixed-Point Scaling for Tunable Block Parameters。要了解定点工具如何通过考虑可调参数的值范围来自动定标信号,请参阅 Derive Ranges for Simulink.Parameter Objects (Fixed-Point Designer)

对于精度或范围大于 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 替换最大值。

优化生成的代码

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

相关主题