使用以下命令创建自定义功能MATLAB函数

此示例演示如何创建使用MATLAB函数块来计算的值的矢量的平均值和标准偏差。

创建模型

  1. 创建一个新的Simulin金宝appk®建立模型并插入MATLAB函数从用户定义函数库中阻塞。

  2. 添加一个不变块并将其值设置为vector[2 3 4 5]。添加两个显示块模型。如该图所示连接这些块。

  3. 保存模型call_stats_block1

程序MATLAB功能块

编程块来计算的值的矢量的平均值和标准偏差:

  1. 双击MATLAB函数块。默认函数签名出现在MATLAB函数块编辑器。在已定义的函数签名中编写任何代码。

  2. 编辑功能标题行:

    function [mean,stdev] = stats(vals)

    从这个代码,你定义一个调用的函数统计,计算向量值的统计平均值和标准差瓦尔斯。函数头声明瓦尔斯作为一个论点统计函数,的意思是方差作为返回值。

  3. 在里面MATLAB函数块编辑器中,输入函数头后面的线空间,并添加以下代码:

    %计算瓦尔斯值的统计平均值和标准偏差%。len =长度(val);意味着= avg (val, len);方差=√总和(vals-avg (vals, len)) ^ 2)) / len);情节(val”——+ ');函数均值= avg(数组,大小)均值= sum(数组)/大小;
  4. 保存模型call_stats_block2

构建功能并检查错误

在Simulink模型块编程后,可以建立错误的功能和测试。金宝app建立你MATLAB函数块需要支持的编译器。金宝appMATLAB®自动选择一个作为默认编译器。如果您的系统上安装了多个matlab支持的编译器,则可以金宝app使用墨西哥人设置命令。看到更改默认的编译器(MATLAB)。

金宝app和支持的编译器进行仿真代码生成构建

查看用于构建包含的模型的编译器列表MATLAB函数块仿真和代码生成。

  1. 导航到金宝app支持和兼容的编译器页面并选择您的平台。

  2. 滚动到下Simulink产品系列的表。金宝app

  3. 要检查表中包含模型MATLAB函数块进行模拟,在标题栏中找到选中的编译器金宝appSIMULINK的型号引用,加速器模式,快速模式,加速器和MATLAB功能块

    要检查包含MATLAB函数块的模型并生成代码,请在标题栏中找到选中的编译器金宝app仿真软件编码器™

金宝app支持的编译器代码生成

要为包含模型生成代码MATLAB函数块,你可以使用任何通过Simulink的软件支持的C编译器的代码生成与金宝app金宝app金宝app仿真软件编码器。这些编译器的列表如下:

  1. 导航到金宝app支持和兼容的编译器Web页面。

  2. 选择您的平台。

  3. 在Simulink和相关产品的表中金宝app,在标题栏中找到选中的编译器下载188bet金宝搏金宝app仿真软件编码器

定位并修复错误

如果在构建过程中发生错误,则诊断查看器窗口列出了错误,并带有指向错误代码的链接。

下面的练习节目定位和修正了一个错误的方式MATLAB函数块。

  1. 在里面统计功能,改变局部功能平均一个虚构的局部函数八月然后再次编译,在窗口中看到以下消息。的诊断查看器窗口显示用阴影红线每个检测到的错误。

  2. 调查题目的错误未定义的函数或变量“月”。在所选错误的诊断消息中,单击函数名称后面的蓝色链接以显示出错代码。属性中突出显示有问题的行MATLAB功能块编辑器

  3. 该消息还链接到MATLAB函数中关于变量和表达式的编译时类型信息的报告。此信息可帮助您诊断错误消息并了解类型传播规则。有关该报告的更多信息,请参见MATLAB函数报告。要查看报告,请单击调用行中突出显示的蓝色链接启动诊断报告

  4. 通过更改来纠正错误八月平均并重新编译。

定义输入和输出

默认情况下,函数输入和输出从附加到其端口的信号继承其数据类型和大小。控件的输入和输出数据MATLAB函数块,以确认它继承了正确的类型和大小。

  1. 双击MATLAB函数统计

  2. 在MATLAB功能块编辑器,选择编辑数据。的端口和数据管理器打开以帮助您定义参数MATLAB函数块。

    左边的窗格显示了参数瓦尔斯和返回值的意思是方差您已经为创建MATLAB函数块。观察瓦尔斯被分配一个范围输入,这是用于短输入模型金宝app的意思是方差被分配范围输出,这是用于短输出到Simulin金宝appk中

  3. 在端口和数据管理器的左侧窗格中,单击该行对中的任何位置瓦尔斯以突出显示它。

    右窗格显示数据属性对话框瓦尔斯。默认情况下,类,尺寸,单位和输入和输出参数的复杂性,从连接到每个输入或输出端口的信号继承。继承是通过设置指定大小-1、复杂性继承了类型继承:与Simulink相同金宝app

    类中报告的大小和类型的实际继承值是在模型编译期间设置的编译类型编译后的大小左窗格中的列。

    您可以输入或输出参数在类型类型场的数据属性对话框,例如,。也可以通过在输入表达式指定的输入或输出参数的大小大小字段。例如,您可以输入3 [2]大小字段来指定瓦尔斯作为一个2×3矩阵。看到函数参数类型大小函数参数有关可以输入类型和大小的表达式的更多信息。

    请注意

    a中添加的任何数组的默认第一个索引MATLAB函数块功能1,就像在MATLAB中一样。

创建一个MATLAB函数对象和查询属性

可以为。创建对象MATLAB函数块,并修改属于此模型的属性。来查询属性call_stats_block2你刚创建的模型,创建一个配置对象。

myconfig = get_param ('call_stats_block2 / MATLAB功能',“MATLABFunctionConfiguration”)
myconfig = MATLABFunctionConfiguration属性:路径:“call_stats_block2 / MATLAB函数”FunctionScript:”功能(意思是,方差)=统计(val)↵↵len =长度(val);↵意味着= avg (vals, len);↵方差=√6(和(((vals-avg (vals, len)) ^ 2)) / len);↵情节(瓦尔,”——+ ');↵↵函数意味着= avg(数组、大小)↵意味着=(数组)/大小总和;↵”UpdateMethod:继承SampleTime: ' 1 '描述:“DocumentLink:”SupportVariableSizing: 1 AllowDirectFeedthrough: 1 SaturateOnIntegerOverflow: 1 TreatAsFi:金宝app固定点FimathMode: SameAsMATLAB Fimath: ' Fimath ('RoundingMethod','Nearest','OverflowAction','Saturate','ProductMode','FullPrecision','SumMode','FillPrecision')'
要更改任何属性的配置对象,使用点符号与你的对象名称。例如,为了改变描述对MATLAB函数模型中的块:
myconfig.Description =“这个模型输出阵列的平均值和标准偏差值”
要了解更多有关你可以修改的属性的MATLAB函数配置对象,看MATLABFunctionConfiguration

为代码生成定义局部变量

从MATLAB算法中生成代码MATLAB函数在操作中使用局部变量或将其作为输出返回之前,您必须显式地分配局部变量的类、大小和复杂性(请参阅用于代码生成的数据定义)。在这个例子中功能统计,局部变量LEN定义,然后用来计算均值和标准差:

len =长度(val);

一旦指定属性的变量,你不能重新定义它的类,大小或其他地方的复杂性在函数体中有一些例外(见重新分配变量属性)。

生成代码的MATLAB功能块

  1. 打开call_stats_block2模型您在结束时存储程序MATLAB功能块

  2. 双击统计块。

  3. 选择创建模型>建立编译并构建示例模型。

    如果你得到相关的错误变步解算器,从配置参数>解算器,将求解器类型更改为a固定步求解并重新运行构建。要了解固定步长和可变步长求解程序之间的更多区别,请参见固定步长与可变步长求解器

    如果没有发生错误,则诊断查看器窗口显示一条指示成功的消息。否则,此窗口将帮助您定位错误,如定位并修复错误

添加代码MATLAB函数块以编程方式

此示例演示如何以编程方式添加MATLAB函数块的模型,并填充MATLAB代码块。如果你已经有MATLAB代码,不希望将其添加到MATLAB函数手动阻塞,这个工作流程可以很方便。

  1. 创建并保存一个名为模型myModel

  2. 创建一个MATLAB功能用下面的代码,并将其保存在myAdd.m

    功能c = myAdd(a, b)

  3. 编写一个MATLAB脚本,将一MATLAB函数myModel的内容填充它myAdd.m

    %一MATLAB功能块添加到模型,并填充MATLAB块%的代码。%%版权所有2018 MathWorks公司open_system (“myModel.slx”);libraryBlockPath =“金宝app仿真软件/用户定义函数/ MATLAB函数”;newBlockPath =“myModel / myBlockName”;在模型中添加MATLAB函数add_block(libraryBlockPath,newBlockPath);在内存中,打开的模型及其部件由一个层次结构表示%的对象。根对象是slroot。脚本的这一行返回表示新的MATLAB函数块的% object:blockHandle =找到(slroot,“是”,“Stateflow.EMChart”,“路径”,newBlockPath);对象的脚本属性包含块的内容,%表示为字符向量。脚本的这一行加载文件myAdd的%内容。m进入脚本属性:blockHandle。脚本= fileread (“myAdd.m”);%或者,你可以直接在一个字符向量指定代码。% 例如:%blockHandle.Script = '函数c = FCN(A,B)';

  4. 运行该脚本,并观察新MATLAB函数阻断myModel

  5. 看到你加入的代码块,双击myBlockName块。

另请参阅

|

相关话题