主要内容

使用创建自定义功能MATLAB函数

这个例子展示了如何创建一个使用MATLAB函数块计算值向量的平均值和标准偏差。

创建模型

  1. 创建新的Simulink万博1manbetx®建模并插入一个MATLAB函数从用户定义函数库中删除。

  2. 添加一个常数块并将其值设置为vector[2 3 4 5].添加两个陈列块到模型。如图所示连接这些模块。

  3. 将模型另存为call_stats_block1

编写MATLAB功能块

对块进行编程,以计算值向量的平均值和标准偏差:

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

  2. 编辑函数标题行:

    函数[平均值,标准偏差]=统计数据(VAL)

    根据这段代码,您定义了一个名为统计数据,计算向量中值的统计平均值和标准偏差瓦尔斯. 函数头声明瓦尔斯作为对统计数据功能,带有的意思是科技发展署作为返回值。

  3. MATLAB函数块编辑器,在函数标题后输入一行空格,并添加以下代码:

    %计算VAL值的统计平均值和标准%偏差。len=长度(VAL);mean=平均值(VAL,len);stdev=sqrt(总和(((VAL平均值(VAL,len)).^2))/len);plot(VAL),-+);函数平均值=平均值(数组,大小)平均值=总和(数组)/大小;
  4. 将模型另存为call_stats_block2

构建函数并检查错误

在Simulink模型中对块进行编程后,可以构建函数并测试错误万博1manbetxMATLAB函数块需要一个受支持的编译器万博1manbetx®自动选择一个作为默认编译器。如果您的系统上安装了多个matlab支持的编译器,您可以万博1manbetx使用墨西哥人设置命令。请参阅更改默认编译器

万博1manbetx支持用于模拟和代码生成生成的编译器

查看编译器列表,以构建包含的模型MATLAB函数块模拟和代码生成。

  1. 导航到万博1manbetx支持和兼容编译器页面并选择您的平台。

  2. 滚动至Simulink产品系列下的表格。万博1manbetx

  3. 检查表中是否包含MATLAB函数块进行模拟时,请在标题为万博1manbetxSimulink用于模型参考、加速器模式、快速加速器模式和MATLAB功能块

    要查看表格中包含MATLAB功能块和生成代码的模型,请在标题为的列中查找选中的编译器万博1manbetx仿真软件编码器™

万博1manbetx支持的代码生成编译器

为包含MATLAB函数块,您可以使用Simulink软件支持的任何C编译器生成代码万博1manbetx万博1manbetx万博1manbetx仿真软件编码器.以下是编译器列表:

  1. 导航到万博1manbetx支持和兼容编译器Web页面。

  2. 选择您的平台。

  3. 在Simulink和相关产品的表格万博1manbetx中,找到标题为s manbetx 845万博1manbetx仿真软件编码器

定位和修复错误

如果在生成过程中发生错误,则诊断查看器窗口列出错误,并提供指向违规代码的链接。

下面的练习演示如何查找和修复数据库中的错误MATLAB函数

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

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

  3. 此消息还链接到有关MATLAB函数中变量和表达式的编译时类型信息的报告。此信息有助于诊断错误消息和理解类型传播规则。有关此报告的更多信息,请参阅MATLAB函数报告.要查看报告,请单击名为启动诊断报告

  4. 通过改变来纠正错误八月平均值然后重新编译。

定义输入和输出

默认情况下,函数输入和输出从连接到端口的信号继承它们的数据类型和大小。检查输入和输出数据MATLAB函数块来验证它是否继承了正确的类型和大小。

  1. 双击MATLAB函数统计数据

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

    左边窗格显示参数瓦尔斯以及返回值的意思是科技发展署您已经为MATLAB函数封锁,注意瓦尔斯分配了一个范围属于输入,它是输入模型万博1manbetx的意思是科技发展署被分配了范围属于输出,它是输出到Simulin万博1manbetxk

  3. 在“端口和数据管理器”的左窗格中,单击行中的任意位置以查看瓦尔斯来突出它。

    右侧窗格显示数据属性对话框瓦尔斯。默认情况下,输入和输出参数的类、大小、单位和复杂度从附加到每个输入或输出端口的信号继承。继承由设置指定大小-1、复杂性继承类型继承:与Simulink相同万博1manbetx

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

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

    笔记

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

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

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

myconfig=获取参数(“调用_stats_block2/MATLAB函数”,“MATLABFunctionConfiguration”)
myconfig=MATLABFunctionConfiguration,带属性:Path:'call_stats\u block2/MATLAB Function'FunctionScript:'Function[mean,stdev]=stats(VAL)↵↵len=长度(VAL);↵平均值=平均值(VAL,len);↵stdev=sqrt(总和(((VAL平均值(VAL,len)).^2))/len);↵绘图(VAL,“-+”);↵↵函数平均值=平均值(数组、大小)↵平均值=总和(数组)/大小;↵' UpdateMethod:继承的SampleTime:'-1'说明:''DocumentLink:''SupportVariableSizing:1 AllowDirectFeedthrough:1 SaturateOnIntegerOverflow:1 TreatAsFi:万博1manbetx定点FimathMode:SameAsMATLAB Fimath:'Fimath:'Fimath('RoundingMethod','Nearest','OverflowAction','Saturate','ProductMode'FullPrecision','SumMode','FillPrecision')'
要更改配置对象中的任何属性,请在对象名称中使用点符号。例如,将描述更改为MATLAB函数此模型中的块:
myconfig.Description='此模型输出数组的平均值和标准偏差值'
要了解有关可以在中修改的属性的更多信息,请执行以下操作:MATLAB函数配置对象,请参阅MATLABFunctionConfiguration

定义用于代码生成的局部变量

从MATLAB算法中生成代码MATLAB函数块中,必须显式指定局部变量的类、大小和复杂性,然后才能在操作中使用它们或将它们作为输出返回(请参见用于代码生成的数据定义)。在示例函数中统计数据,局部变量伦恩在用于计算平均值和标准差之前定义:

len=长度(VAL);

一旦将属性指定给变量,就不能在函数体的其他地方重新定义其类、大小或复杂性,但有一些例外(请参见变量属性的重新分配).

为MATLAB功能块生成代码

  1. 打开call_stats_block2在结束时保存的模型编写MATLAB功能块

  2. 双击统计数据

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

    如果您得到与变步解算器,来自配置参数>解算器,将求解器类型改为a固定步长解算器并重新运行生成。要了解有关固定步长解算器和可变步长解算器之间差异的更多信息,请参阅固定步长与可变步长解算器

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

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

这个例子展示了如何通过编程方式添加MATLAB函数块到模型,并用MATLAB代码填充块。如果您已经有MATLAB代码,并且不想将其添加到MATLAB函数手动块,这个工作流可以方便。

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

  2. 创建一个MATLAB函数使用以下代码并将其保存在myAdd.m

    作用c = myAdd(a, b);

  3. 编写一个MATLAB脚本,添加MATLAB函数阻止我的模型并用myAdd.m

    %将MATLAB功能块添加到模型中,并使用MATLAB填充该功能块%代码。%%版权所有2018 Mathworks,Inc。open_system (“myModel.slx”); 图书馆闭塞通道=“万博1manbetxsimulink/用户定义函数/MATLAB函数”新洛克路径=“myModel/myBlockName”;%向模型中添加一个MATLAB函数添加_块(libraryBlockPath、newBlockPath);%在内存中,开放模型及其部分由%对象。根对象是slroot。脚本的这一行返回%表示新MATLAB功能块的对象:blockHandle =找到(slroot,“-isa”,“Stateflow.EMChart”,“路径”,newBlockPath);%对象的Script属性包含块的内容,%表示为字符向量。脚本的这一行加载myAdd文件的%内容。m进入Script属性:blockHandle.Script=fileread(“myAdd.m”);%或者,可以直接在字符向量中指定代码。%例如:%Script='function c=fcn(a,b)';

  4. 运行脚本并观察新的MATLAB函数阻挡我的模型

  5. 要查看添加到块中的代码,请双击myBlockName

另见

|

相关话题