本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。
Stateflow® 图中的图形函数是图形元素,可帮助您重用控制流逻辑和迭代循环。您可以使用具有连接结点和转移的流程图创建图形函数。您可以在状态和转移的动作中调用图形函数。借助图形函数,您可以:
创建模块化的可重用逻辑,您可以在图中的任何位置调用它。
在图动画过程中直观地跟踪仿真行为。
图形函数可以驻留在 Stateflow 图、状态或子图的任意位置。函数的位置确定可以调用函数的状态和转移的集合。
如果只想在一个状态(或子图)及其子状态内调用函数,只需将图形函数置于该状态或子图中。该函数将覆盖该状态或子图的父级中同名的任何其他函数。
如果想要在该图的任意位置调用函数,需将图形函数置于与图同一层次的位置。
如果要从模型中的任何图调用该函数,请将图形函数放在图级别,并启用图级别函数的导出。有关详细信息,请参阅Export Stateflow Functions for Reuse。
例如,此图形函数的名称为 f1
。它接受三个参数(a
、b
和 c
)并返回三个输出值(x
、y
和 z
)。该函数包含一个流程图,用于计算三个不同的参数乘积。
在对象选项板中,点击图形函数图标 。将指针移到图中要放置新图形函数的位置。
输入函数的签名标签,如声明函数参数和返回值中所述。
要对函数进行编程,请在函数框内构造一个流程图,如Stateflow 中的流程图中所述。
由于图形函数在调用时必须完全执行,因此您无法使用状态。在图形函数中,可以使用的图形元素只有连接结点和转移。
在 Model Explorer 中,展开图对象并选择图形函数。函数签名中的参数和返回值显示为属于您的函数的数据项。参数的作用域是 Input
。返回值的作用域是 Output
。
在每个参数和返回值的 Data 属性对话框中,指定数据属性,如设置数据属性中所述。
创建您的函数所需的其他数据项。有关详细信息,请参阅通过 Model Explorer 添加数据。
您的函数可以访问它自己的数据或属于父状态或图的数据。函数中的数据项可以有以下作用域之一:
Local
- 本地数据从一个函数调用保留到下一个函数调用。仅对 C 语言状态图有效。
Constant
- 常量数据在所有函数调用中都保持其初始值。
Parameter
- 参数数据在所有函数调用中都保持其初始值。
Temporary
- 临时数据在每个函数调用开始时初始化。仅对 C 语言状态图有效。
您可以从 MATLAB® 工作区初始化函数数据(参数和返回值除外)。有关详细信息,请参阅 从 MATLAB 基础工作区初始化数据。
在使用 C 语言作为动作语言的图中,当您要使用仅在函数执行时有效的数据时,请定义临时数据。例如,如果计数器值不需要在函数完成后保持不变,您可以指定一个循环计数器具有 “Temporary
” 作用域。
在使用 MATLAB 作为动作语言的图中,您不需要定义临时函数数据。如果使用未定义变量,Stateflow 会创建临时变量。该变量可用于函数的其余部分。
函数签名标签指定函数的名称及其参数和返回值的形式名称。签名标签采用以下语法:
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
您可以对参数和返回值使用相同的变量名称。例如,使用以下签名标签的函数将变量 y1
和 y2
同时用作输入和输出:
[y1,y2,y3] = f(y1,u,y2)
y1
和 y2
将通过引用(作为指针)传递,u
通过值传递。通过引用传递输入可减少生成的代码复制中间数据的次数,从而产生更优的代码。您可以基于任何状态或任何转移的动作来调用图形函数。您也可以从其他函数调用图形函数。如果导出图形函数,将可以从模型的任何 Stateflow 图中调用它。
调用图形函数的语法与函数签名相同,即用实参替换签名中指定的形参。如果实参和形参的数据类型不同,则函数将实参强制转换为形参的类型。
提示
如果函数签名的形参为标量,请确认这些函数调用的输入和输出遵循标量扩展的规则。有关详细信息,请参阅 为矩阵的所有元素赋值。
您可以通过图形函数的属性对话框为其设置常规属性。要打开函数属性对话框,请右键点击图形函数框,然后从上下文菜单中选择 Properties。
函数名称。点击函数名称链接可使函数显示在其所属图的前端。
控制函数在生成的代码中的内联:
“Auto
” - 确定是否根据内部计算内联函数。
“Inline
” - 如果不将函数导出到其他图并且它不是递归的一部分,则内联函数。(如果函数直接调用自身或通过另一个函数调用间接调用自身,则存在递归。)
“Function
” - 不内联函数。
函数的签名标签。有关详细信息,请参阅声明函数参数和返回值。
函数说明。您可以为层次结构中的函数输入简要说明。
函数的在线文档链接。您可以输入 Web URL 地址或者能以合适的在线格式(例如 HTML 文件或 MATLAB 命令行窗口中的文本)显示文档的 MATLAB 命令。点击 Document link 超链接时,Stateflow 会显示该文档。
您可以创建任意大的图形函数。如果您的函数变得太大,您可以隐藏其内容,方法如下:右键点击函数框并从上下文菜单中选择 Group & Subchart > Subchart。
要使图形函数框不透明,请右键点击该函数,并从上下文菜单中取消 Content Preview 属性。
要全屏编写函数,请双击函数框以访问子图化图形函数中的流程图。
在图形函数中,不要广播可能导致激活状态更改的事件。在图形函数中,导致退出激活状态的事件广播具有不可预测的行为。