指定 Stateflow 数据的大小
在 Stateflow® 图中,数据大小确定内存分配、影响仿真性能,并确保 Stateflow 图与连接的 Simulink® 模块之间的兼容性。不正确的大小调整可能导致编译错误、运行时故障或意外行为。
在 Simulink 模型的 Stateflow 图中,通过使用属性检查器或 Stateflow API 指定数据对象的大小。
数据作用域和大小调整方法的兼容性
您可以通过指定数值、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 函数调用。例如:
size、length、floor。
对于每个维度,表达式的计算结果必须为正整数值。
值必须在类型上兼容,例如整数与整数、标量与兼容的类型。
枚举值必须包含类型前缀。例如,使用 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],其中P和Q是 Simulink 参数。使用 C 语言作为动作语言的图在整个模型中传播这些符号维度。请参阅传播 Stateflow 数据的符号维度。2*Colors.Red,其中Red是Colors类型的枚举值。size(u),其中u是图级别变量。函数size允许您根据一个数据对象的大小来指定另一个数据对象的大小。此类型的表达式在库图中很有用,您可以对不同大小的数据进行重用。在其他情况下,您可以通过避免使用size函数并直接指定数据大小来提高图的清晰度。floor((a*b)/c),其中a和c是int16类型的标量,b是double类型的标量。[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 参数指定数据大小,请清除允许符号维度设定复选框。
另请参阅
fi (Fixed-Point Designer) | size