主要内容

指定 Stateflow 数据的大小

在 Stateflow® 图中,数据大小确定内存分配、影响仿真性能,并确保 Stateflow 图与连接的 Simulink® 模块之间的兼容性。不正确的大小调整可能导致编译错误、运行时故障或意外行为。

在 Simulink 模型的 Stateflow 图中,通过使用属性检查器或 Stateflow API 指定数据对象的大小。

  • 属性检查器中,您可以设置大小属性,如设置数据属性中所述。

  • 使用 Stateflow API,您可以设置 Size 属性。

数据作用域和大小调整方法的兼容性

您可以通过指定数值、MATLAB 表达式或选择从 Simulink 继承大小来指定数据大小。用于指定大小的方法取决于数据作用域。

数据的作用域继承大小使用数值使用 MATLAB 表达式
局部仅在使用 MATLAB 作为动作语言的图中
常量
参数
输入
输出
数据存储内存

有关数据作用域的详细信息,请参阅指定 Stateflow 数据的作用域和类型

使用数值指定数据大小

当您通过输入数值指定数据大小时,请使用以下规范。

数据类型大小设定示例
标量输入 1 或将该字段留空1
列向量(n×1)输入行数5
行向量(1×n)输入 [1 n][1 5]
矩阵(n×m)输入 [n m][3 4]
N 维数组输入 [d₁ d₂ ⋯ dₙ][2 3 4]

在使用 C 语言作为动作语言的图中,一维 Stateflow 向量与相同大小的 Simulink 行向量或列向量兼容。例如,大小为 3 的 Stateflow 输入数据与以下任一项兼容:

  • 大小为 [1 3] 的 Simulink 行向量

  • 大小为 [3 1] 的 Simulink 列向量

使用表达式指定数据大小

您可以使用计算结果为有效大小设定的 MATLAB 表达式来指定数据大小。表达式为需要基于参数或其他数据进行动态调整大小的图提供了灵活性。

表达式可以包含:

  • 数值和常量

  • 参数和变量

  • 算术运算(+-* /)。

  • MATLAB 函数调用。例如:sizelengthfloor

对于每个维度,表达式的计算结果必须为正整数值。

值必须在类型上兼容,例如整数与整数、标量与兼容的类型。

枚举值必须包含类型前缀。例如,使用 Colors.Red,而不是 Red

表达式限制

您无法使用 MATLAB 表达式实现以下目的:

  • 指定继承的数据大小。换句话说,表达式的计算结果不能为 -1

  • 指定从 Simulink 接受基于帧的数据的 Stateflow 输入数据的大小。有关详细信息,请参阅Sample- and Frame-Based Concepts (DSP System Toolbox)

以下示例是用于在图中指定数据大小的有效 MATLAB 表达式:

  • K+3,其中 K 是图级别的 Stateflow 常量或参数。

  • N/2,其中 N 是 MATLAB® 基础工作区中的变量。

  • [P Q],其中 PQ 是 Simulink 参数。使用 C 语言作为动作语言的图在整个模型中传播这些符号维度。请参阅传播 Stateflow 数据的符号维度

  • 2*Colors.Red,其中 RedColors 类型的枚举值。

  • size(u),其中 u 是图级别变量。函数 size 允许您根据一个数据对象的大小来指定另一个数据对象的大小。此类型的表达式在库图中很有用,您可以对不同大小的数据进行重用。在其他情况下,您可以通过避免使用 size 函数并直接指定数据大小来提高图的清晰度。

  • floor((a*b)/c),其中 acint16 类型的标量,bdouble 类型的标量。

  • [fi(2,1,16,2) fi(4,1,16,2)].此表达式通过调用函数 fi (Fixed-Point Designer) 指定 [2 4] 的数据大小。此函数返回字长为 16、小数长度为 2 的有符号定点数。

继承数据大小

要将 Stateflow 数据对象配置为从一个 Simulink 信号或它在图中的定义继承其大小,请指定大小为 –1。这种方法在以下情况下很有用:

  • 数据大小由连接的 Stateflow 信号确定。

  • 您要为可重用的图保持灵活性。

  • 大小可能根据模型配置而更改。

在仿真或编译模型后,您可以在模型资源管理器中的编译大小列下找到继承的数据大小。()CompiledSize

传播 Stateflow 数据的符号维度

当您选择模型配置参数允许符号维度设定时,使用 C 语言作为动作语言的图可以在整个模型中传播符号维度。

传播 Stateflow 数据的符号维度

当您选择模型配置参数允许符号维度设定时,使用 C 语言作为动作语言的图可以在整个模型中传播 Stateflow 数据的符号维度。如果您有 Embedded Coder®,符号维度将进入 ERT 目标的生成代码中。通过将 Simulink 参数与以下存储类之一结合使用,指定符号维度的大小:

  • 具有指定的头文件的 定义ImportedDefine

  • CompilerFlag

  • 用户定义的自定义存储类,它将数据定义为指定的头文件中的宏

有关详细信息,请参阅允许符号维度设定 (Simulink)在生成的代码中实现数组大小的符号维度 (Embedded Coder)

使用 MATLAB 作为动作语言的 Stateflow 图不支持符号维度传播。要使用 Simulink 参数指定数据大小,请清除允许符号维度设定复选框。

另请参阅

(Fixed-Point Designer) |

主题