主要内容

重用MATLAB定义代码MATLAB功能

一个MATLAB®函数在状态流中®chart是一个图形元素,用于编写更容易通过调用内置MATLAB函数实现的算法。典型应用包括:

  • Matrix-oriented计算

  • 数据分析与可视化

这种类型的函数对于使用MATLAB而不是图形化statflow构造更容易表示的算法编码非常有用。MATLAB函数还为为嵌入式应用程序生成高效的、生产质量的C代码提供了优化。

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

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

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

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

请注意

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

例如,这个MATLAB函数有这个名字stdevstats。它需要一个论证瓦尔斯并返回一个输出值stdevout

带有MATLAB函数stdevstats的状态流程图。

计算中值的标准差瓦尔斯,函数使用此代码。

函数st虔诚= stdevstats(vals)% # codegen计算val的标准偏差Len =长度(vals);stdevout =√总和(vals-avg (vals, len)) ^ 2)) / len);函数Mean = avg(数组,大小)Mean = sum(数组)/size;

定义一个MATLAB图表功能

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

  2. 在图表画布上,单击新MATLAB函数的位置。

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

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

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

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

    [y1,y2,y3] = f(y,u,y2)
    如果将此函数导出到C代码,生成的代码处理日元而且y2作为通过引用传递的就地参数。使用就地数据可以减少生成的代码复制中间数据的次数,从而产生更高效的代码。

    符号窗格和模型资源管理器中,函数签名的参数和返回值显示为属于函数的数据项。参数具有作用域输入。返回值具有作用域输出

  4. 为每个参数和返回值指定数据属性,如设置数据属性。当参数和返回值具有相同的名称时,只能编辑参数的属性。返回值的属性是只读的。

  5. 要对函数进行编程,请双击函数框打开MATLAB函数块编辑器。

  6. 在MATLAB函数块编辑器中,输入实现函数的MATLAB代码。有关更多信息,请参见在图表中编程MATLAB函数

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

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

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

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

    在MATLAB函数中,不需要显式地创建局部或临时函数数据。相反,您可以使用未定义的变量来存储只有在函数调用的其余部分才能访问的值。若要存储跨函数调用持久化的值,请在图表级别使用本地数据或使用关键字持续的

调用MATLAB状态和转换中的函数

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

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

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

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

指定属性MATLAB功能

下面列出的属性指定MATLAB函数如何与状态流程图中的其他组件交互。属性中修改这些属性属性检查器、“模型资源管理器”或“MATLAB函数属性”对话框。

使用属性检查器

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

  2. 在状态流编辑器中,选择MATLAB函数。

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

使用模型资源管理器:

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

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

  3. 对话框窗格,编辑MATLAB函数属性。

使用MATLAB函数属性对话框:

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

  2. 选择属性

  3. 在属性对话框中编辑MATLAB函数属性。

您还可以通过使用编程方式修改这些属性Stateflow。EMFunction对象。有关statflow编程接口的详细信息,请参见statflow API概述

的名字

函数名。单击函数名称链接,在MATLAB函数块编辑器中打开函数。

函数内联选项

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

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

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

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

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

标签

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

饱和整数溢出

指定生成的代码中整数溢出是否饱和。有关更多信息,请参见处理图表数据的整数溢出

此属性仅适用于使用C作为操作语言的图表中的MATLAB函数。在使用MATLAB作为动作语言的图表中,数据的行为取决于的值饱和整数溢出属性。

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

MATLAB函数fimath

定义了fimath属性的MATLAB函数。的fimath指定的属性与所有关联fi而且fimath在MATLAB函数中构造对象。从以下选项中选择一个:

  • 和MATLAB一样—函数使用相同fimath属性作为当前全局变量fimath。编辑框将变暗并显示当前全局fimath只读形式。有关全球的更多信息fimath而且fimath对象,请参阅定点设计器™文档。

  • 指定其他-指定你自己的fimath对象通过以下方法之一获取:

    • 构建fimath编辑框中的对象。

    • 构建fimath对象,并在编辑框中输入其变量名。

此属性仅适用于使用C作为操作语言的图表中的MATLAB函数。在使用MATLAB作为动作语言的图表中,数据的行为取决于的值MATLAB图表fimath属性。

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

描述

MATLAB函数的描述。

文档链接

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

另请参阅

对象

工具

相关的话题