主要内容

计划A.马铃薯在图表中的功能

一个matlab.®函数流中的函数®图表是您用来编写算法,通过调用内置MATLAB函数来编写更容易实现的算法。这种类型的功能对于使用MATLAB而不是图形状态流构造更容易表达的编码算法是有用的。有关更多信息,请参阅通过定义MATLAB函数来重用MATLAB代码

在MATLAB功能中,您可以调用这些类型的功能:

  • MATLAB函数正文中定义的本地函数。

  • 图形,Simulink万博1manbetx.®,真值表和图表中的其他MATLAB函数。

  • 内置MATLAB函数支持代码生成。万博1manbetx这些函数生成C代码,用于构建符合嵌入环境的内存和数据类型要求的目标。

  • 外部MATLAB功能,不支持代码生成。万博1manbetx这些函数仅在模拟模拟期间在Matlab工作区中执行。有关更多信息,请参阅呼叫外在MATLAB函数在zoneflow图表中

  • 万博1manbetxSimulink Design Verifier™财产证明和试验的职能。这些功能包括:

此示例显示如何使用调用两个MATLAB函数的状态流图来创建模型,意思是Stdevstats.

  • 意思是计算价值的平均值val

  • Stdevstats.计算值的标准偏差val

构建模型

跟着这些步骤:

  1. 使用以下块创建一个新模型:

  2. 保存模型call_stats_function_stateflow.

  3. 在模型中,双击图表块。

  4. 使用工具栏中的图标将两个MATLAB函数拖到空图表中:

    具有闪烁光标的文本字段显示在每个MATLAB函数的中间。

  5. 标记每个功能,如图所示:

    您必须使用其签名标记MATLAB函数。使用以下语法:

    [return_val1.return_val2.,...] =function_name.arg1.arg2.,......)

    您可以指定多个返回值和多个输入参数,如语法所示。每个返回值和输入参数可以是标量,向量或值矩阵。

    小费

    对于仅具有一个返回值的MATLAB函数,您可以省略签名标签中的括号。

  6. 在图表中,将默认转换绘制到终止结状态上,使用此条件操作:

    {均值=意味着(Invals);stdev = stdevstats(Invals);}

    图表应该看起来像这样:

    小费

    如果函数签名的形式参数是标量,请验证函数调用的输入和输出是否按照标量扩展规则进行遵循规则。有关更多信息,请参阅为矩阵的所有元素分配值

  7. 在里面造型标签,下面设计数据, 选择模型探险家

  8. 在里面模型层次结构模型资源管理器的窗格,选择功能意思是

    内容窗格显示输入参数val和输出参数蜿蜒。两者都是类型的标量默认。

  9. 双击val下行尺寸列以设置大小val4.

  10. 在里面模型层次结构模型资源管理器的窗格,选择功能Stdevstats.并重复上一步。

  11. 在里面模型层次结构窗格的模型资源管理器,选择图表并添加以下数据:

    名称

    范围

    尺寸

    invales.

    输入

    4.

    意思

    输出

    标量(没有变化)

    STDEV.

    输出

    标量(没有变化)

    您现在应该在模型资源管理器中看到以下数据。

    添加数据后invales.意思,和STDEV.在图表中,相应的输入和输出端口显示在模型中的状态流块上。

  12. 将常量和显示块连接到图表块的端口并保存模型。

程序马铃薯功能

编程功能意思是Stdevstats., 跟着这些步骤:

  1. 在模型中打开图表call_stats_function_stateflow.

  2. 在图表中,打开功能意思是

    函数编辑器显示使用标题:

    功能意味着=含义(VALS)

    此标题从图表中的函数标签中取出。您可以直接在编辑器中编辑标题,并且在关闭编辑器后,您的更改将显示在图表中。

  3. 在函数头后的行上,输入:

    %#codegen.

    %#codegen.编译指令有助于检测代码生成支持的MATLAB函数中的编译时违反语法和语义。万博1manbetx

  4. 输入一个线路空间,此评论:

    %计算vals的统计均值
  5. 添加行:

    len =长度(vals);

    功能长度是支持代码生成的内置MATLAB函数的示例。万博1manbetx您可以直接调用此函数以返回其参数的向量长度val。构建仿真目标时,使用生成的C代码实现函数长度。支持代码生成的功能万博1manbetxC / C ++代码生成支持的函数和对象万博1manbetx(MATLAB编码器)

    变量Len.是隐式声明的本地数据的一个例子。它具有与分配给它的值相同的大小和类型 - 函数返回的值长度,标量。要了解有关声明变量的更多信息,请参阅数据定义基础知识(MATLAB编码器)

    MATLAB函数将隐式声明为临时数据的本地数据仅作为临时数据,只有当函数退出时函数并消失。您可以在图表中声明MATLAB函数的本地数据以持久使用持久构造。

  6. 输入此行以计算值蜿蜒

    infore = avg(vals,len);

    功能意思是储存平均值val在zhoupflow数据中蜿蜒。由于这些数据被定义为父状态溢图,因此您可以直接在MATLAB函数中使用它们。

    具有单行或元素列的二维阵列被视为MATLAB功能中的向量或矩阵。例如,在意思是,争论val是一个四元素矢量。您可以使用矩阵表示法访问此向量的第四个元素vals(4,1)或矢量符号vals(4)

    MATLAB函数使用功能Avg.计算价值意思是代码生成支持的函数。万博1manbetxAvg.是您稍后定义的本地功能。在解析功能名称时,图表中的MATLAB函数首先查找本地功能,然后支持代码生成的功能。万博1manbetx

    注意

    如果您调用Matlab函数无法作为本地函数或代码生成函数解析的函数,则必须声明所外部的函数。

  7. 现在输入此声明:

    编码器.Extrinsic('plot');
  8. 输入此行以绘制输入值val反对他们的矢量索引。

    情节(Vals,' -  +');

    回想一下你宣布了情节是外在功能,因为代码生成不支持它。万博1manbetx当MATLAB函数遇到外在函数时,它会在模拟期间向MATLAB工作区发送调用。

  9. 现在,定义本地功能Avg., 如下:

    函数均值= avg(阵列,大小)平均值= sum(array)/ size;

    标题Avg.定义两个参数,阵列尺寸和单个返回值,意思。本地功能Avg.计算元素的平均值阵列通过划分他们的争论的总和尺寸

    功能的完整代码意思是看起来像这样:

    函数意指=意味着(Vals)%#codegen%计算Vals Len =长度(VALS)的统计学意义;infore = avg(vals,len);编码器.Extrinsic('plot');情节(Vals,' -  +');函数均值= avg(阵列,大小)平均值= sum(array)/ size;
  10. 保存模型。

  11. 返回图表,打开功能Stdevstats.并添加代码以计算值的标准偏差val。完整的代码应该如下所示:

    函数stdevout = stdevstats(vals)%#codegen%计算Vals Len =长度(Vals)的标准偏差;stdevout = sqrt(sum(((vals-avg(vals,len))。^ 2))/ len);函数均值= avg(阵列,大小)平均值= sum(array)/ size;
  12. 再次保存模型。