Main Content

指定 Stateflow 数据的大小

在 Simulink® 模型中的 Stateflow® 图中,通过以下方式指定数据对象的大小:

  • 设置大小属性,如设置数据属性中所述。有关详细信息,请参阅大小

  • 通过 Stateflow API 设置 Props.Array.Size 属性。有关详细信息,请参阅Stateflow.Data

使用以下方法之一指定大小:

  • 从 Simulink 信号或从 Stateflow 图中的大小定义继承大小。

  • 输入一个数值。

  • 输入一个 MATLAB® 表达式。

对每个大小设定方法的支持取决于数据的作用域。

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

继承数据大小

要将 Stateflow 数据对象配置为从对应的 Simulink 信号或它在图中的定义继承其大小,请指定大小为 –1。在仿真或编译模型后,您可以在模型资源管理器中的编译大小列下找到继承的数据大小。

注意

图无法从 Simulink 基于帧的信号继承数据大小。有关详细信息,请参阅Sample- and Frame-Based Concepts (DSP System Toolbox)

使用数值指定数据大小

当您通过输入数值来指定数据大小时,请遵循以下规范:

  • 要指定标量,请输入 1 或将该字段留空。

  • 要指定 n×1 列向量,请输入 n

  • 要指定 1×n 行向量,请输入 [1 n]

  • 要指定 n×m 矩阵,请输入 [n m],其中 mn 大于 1

  • 要指定 n 维数组,请输入 [d1 d2dn],其中 di 是第 i 维的大小。

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

使用表达式指定数据大小

您可以通过输入 MATLAB 表达式来指定数据大小,该表达式的计算结果需要符合使用数值指定数据大小中所述的大小设定之一。这些规范也适用于以下情况:

  • 表达式可以是数值、常量、参数、变量、算术运算以及 MATLAB 函数调用的组合。

  • 指定维度大小的表达式的计算结果必须为正整数值。

  • 表达式只能组合兼容的值。例如,整数只能与相同类型的其他整数或双精度标量值组合。

  • 如果表达式包含枚举值,则必须包含类型前缀以符合 MATLAB 命名规则。例如,Colors.Red 有效,但 Red 无效。有关详细信息,请参阅Notation for Enumerated Values

  • 您不能使用 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 的有符号定点数。

避免使用可能导致命名冲突的变量

当一个模型包含多个同名变量时,将用优先级最高的变量来指定大小。

优先级变量
1封装参数
2模型工作区变量
3MATLAB 基础工作区变量
4Stateflow 数据

为了避免混淆,不要使用在模型的多个级别中定义的变量名称来指定数据大小。

传播 Stateflow 数据的符号维度

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

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

  • CompilerFlag

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

有关详细信息,请参阅允许符号维度设定 (Simulink)Implement Symbolic Dimensions for Array Sizes in Generated Code (Embedded Coder)

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

另请参阅

(Fixed-Point Designer) |

相关主题