主要内容

通过定义图形化函数重用逻辑模式

一个图形函数在状态流中®图表是一种图形元素,可以帮助您重用控制流逻辑和迭代循环。使用连接连接和过渡的流程图创建图形化函数。您可以在状态和转换的操作中调用图形化函数。使用图形函数,您可以:

  • 创建模块化的、可重用的逻辑,可以在图表的任何地方调用。

  • 在图表动画期间可视地跟踪模拟行为。

图形化函数可以驻留在图表、状态或子图表中的任何位置。函数的位置决定了可以调用该函数的状态和转换集。

  • 如果希望在一个状态或子图及其子图中调用函数,请将图形函数置于该状态或子图中。该函数覆盖该状态或子图的父函数和父函数中同名的任何其他函数。

  • 如果希望在图表中的任何位置调用函数,请将图形化函数放在图表级别。

  • 如果希望从模型中的任何图表调用该函数,请将图形化函数置于图表级别,并启用导出图表级别函数。有关更多信息,请参见导出状态流函数以供重用

请注意

图形化函数可以在statflow层次结构中访问它上面的图表和状态数据。

例如,这个图形化函数的名称为f1.它有三个参数(一个,b,c),并返回三个输出值(x,y,z).该函数包含一个流程图,用于计算参数的三个不同乘积。下载188bet金宝搏

计算三种不同产品的图形化函数。下载188bet金宝搏

定义一个图形函数

  1. 在对象面板中,单击图形化函数图标

  2. 在图表画布上,单击新图形化功能的位置。

  3. 输入功能的签名标签。

    函数的签名标签为函数指定名称,并为其参数和返回值指定正式名称。签名标签的语法如下:

    [return_val1, return_val2,…= function_name(arg1,arg2,…)
    您可以指定多个返回值和多个输入参数。每个返回值和输入参数可以是标量、向量或值的矩阵。对于只有一个返回值的函数,省略签名标签中的括号。

    可以对参数和返回值使用相同的变量名。例如,具有此签名标签的函数使用变量日元而且y2作为输入和输出:

    [y1,y2,y3] = f(y,u,y2)
    如果将这个函数导出到C代码,日元而且y2通过引用(作为指针)传递,和u通过值传递。通过引用传递输入可以减少生成的代码复制中间数据的次数,从而得到更优的代码。

  4. 若要对函数进行编程,请在函数框中构造流程图,如中所述在statflow中创建流程图

    因为图形化函数在调用时必须完全执行,所以不能使用状态。连接连接和过渡是可以在图形函数中使用的唯一图形元素。

    请注意

    在图形化函数中,不要广播可能导致活动状态改变的事件。在图形化函数中,导致退出活动状态的事件广播的行为是不可预测的。

  5. 在模型资源管理器中,展开图表对象并选择图形化函数。函数签名的参数和返回值显示为属于函数的数据项。参数具有作用域输入.返回值具有作用域输出

  6. 在每个参数和返回值的“数据属性”对话框中,指定数据属性,如中所述设置数据属性

  7. 创建函数所需的任何其他数据项。有关更多信息,请参见通过模型管理器添加数据

    函数可以访问自己的数据或属于父状态或图表的数据。函数中的数据项可以具有以下作用域之一:

    • 常数-常量数据在所有函数调用中保持其初始值。

    • 参数-参数数据在所有函数调用中保持初始值。

    • 当地的-在整个模拟过程中,本地数据在函数调用之间保持不变。仅在使用C作为操作语言的图表中有效。

    • 临时-临时数据在每次函数调用开始时初始化。仅在使用C作为操作语言的图表中有效。

    在使用C作为操作语言的图表中,如果希望在整个模拟过程中跨函数调用持久化数据值,请定义本地数据。如果希望在每次函数调用开始时初始化数据值,请定义临时数据。例如,可以用定义一个计数器当地的范围,如果您想跟踪调用函数的次数。相反,您可以指定一个循环计数器临时如果不需要在函数完成后保持计数器值,则范围。

    在图表中使用MATLAB®作为操作语言,您不需要定义本地或临时函数数据。如果使用未定义的变量,Stateflow将创建一个临时变量,该变量可用于函数的其余部分。要存储跨函数调用持久化的值,函数可以在图表级别访问本地数据。

    提示

    可以从MATLAB工作区初始化函数中的本地和临时数据。有关更多信息,请参见从MATLAB基础工作区初始化数据

在状态和转换中调用图形函数

您可以从任何状态或转换的操作或从其他函数调用图形函数。如果导出图形化函数,则可以从模型中的任何图表调用它。有关导出函数的详细信息,请参见导出状态流函数以供重用

若要调用图形化函数,请使用函数签名,并在函数签名中为每个形式参数包含实际实参值。

[return_val1, return_val2,…= function_name(arg1,arg2,…)

如果实际实参和形式实参的数据类型不同,该函数将实际实参转换为形式实参的类型。

管理大型图形功能

您可以选择使图形函数尽可能大。如果函数变得太大,可以在函数框内右键单击并选择,从而隐藏其内容组子图>子图表从上下文菜单。

启用了内容预览的子图表图形功能。

若要使图形化函数框不透明,请右键单击该函数并清除内容预览属性。

禁用内容预览的子图表图形功能。

要将整个图表窗口用于编程函数,请通过双击函数框来访问子图表图形函数中的流程图。有关更多信息,请参见使用子图封装模态逻辑

指定图形函数的属性

下面列出的属性使您能够指定图形化函数如何与Stateflow图中的其他组件交互。控件中为图形化函数指定属性属性检查器、“模型资源管理器”或“函数属性”对话框。

使用属性检查器

  1. 建模选项卡,在设计数据中,选择属性检查器

  2. 在Stateflow Editor中,选择图形化函数。

  3. 属性检查器,编辑转换属性。

使用模型资源管理器:

  1. 建模选项卡,在设计数据中,选择模型浏览器

  2. 模型层次结构窗格中,选择图形化函数。

  3. 对话框窗格中,编辑图形化函数属性。

使用“功能属性”对话框:

  1. 在“状态流编辑器”中,右键单击图形化函数。

  2. 选择属性

  3. 在属性对话框中,编辑图形化函数属性。

还可以通过使用以编程方式指定图形函数属性Stateflow。函数对象。有关statflow编程接口的详细信息,请参见statflow API概述

的名字

函数名。单击函数名称链接,将函数放在其本机图表的前台。

函数内联选项

在生成的代码中控制函数的内联:

  • 汽车-根据内部计算确定是否内联函数。

  • 内联-内联你的函数,如果你没有导出到其他图表,它不是递归的一部分。(如果你的函数通过另一个函数调用直接或间接地调用自己,就存在递归。)

  • 函数-不内联你的函数。

属性中不可用此属性属性检查器

标签

为您的功能签名标签。函数签名标签为函数指定名称,并为其参数和返回值指定正式名称。属性中不可用此属性属性检查器

描述

图形化函数的描述。

文档链接

链接到图形化功能的在线文档。您可以在“MATLAB命令窗口”中输入web URL地址或MATLAB命令,以HTML文件或文本的形式显示文档。当你点击文档链接, Stateflow计算链接并显示文档。

另请参阅

对象

工具

相关的话题