文件

使用创建自定义功能Matlab功能

此示例显示如何创建使用Matlab功能块来计算一个向量的平均值和标准偏差值。

创建模型

  1. 创建一个新的simulin金宝appk®模型并插入一个Matlab功能块从用户定义的函数库。

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

  3. 将模型保存为呼叫_stats_block1

程序的MATLAB函数块

程序块计算的平均值和标准偏差的向量值:

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

  2. 编辑函数的标题行:

    功能[均值,stdev] = stats(vals)

    在这段代码中,定义了一个被调用的函数统计数据,这计算了向量中的值的统计均值和标准偏差val这个函数header declaresval作为一个争论统计数据功能,有意思是STDEV.作为返回值。

  3. Matlab功能块编辑器,在函数头后输入行空格,并添加以下代码:

    %计算统计均值和vals中值的标准%偏差。len =长度(vals);平均值= avg(vals,len);stdev = sqrt(sum(((Vals-avg(vals,len))。^ 2))/ len);情节(Vals,' -  +');函数均值= avg(阵列,大小)平均值= sum(array)/ size;
  4. 将模型保存为呼叫_stats_block2

构建函数并检查错误

在Simulink模型中编程模块后,可以构建函数并测试错误。金宝app建立你的Matlab功能块需要支持的编译器。金宝app马铃薯®自动选择一个作为默认编译器。如果系统上安装了多个支持MATLAB的编译器,则可以使用金宝appmex-设置命令。看改变默认的编译器(MATLAB)。

金宝app支持模拟和代码生成构建的编译器

查看用于构建包含以下内容的模型的编译器列表Matlab功能块模拟和代码生成。

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

  2. 滚动到Simulink Product Family金宝app下的表格。

  3. 检查表中包含的模型Matlab功能模拟块,查找标题列中检查的编译器金宝appSimulink For Model references, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks

    要检查包含MATLAB功能块和生成代码的模型的表,请在标题列中查找选中的编译器金宝appSimulink编码器™

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

为包含Matlab功能块,您可以使用Simulink软件支持的任何C编译器进行代码生成金宝app金宝app金宝appSimulink编码器. 有关这些编译器的列表:

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

  2. 选择您的平台。

  3. 在Simulink和相关产品的表格金宝app中,查找选中标题列中的编译器下载188bet金宝搏金宝appSimulink编码器

定位并修复错误

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

下面的练习展示了定位和修复错误的方法Matlab功能块。

  1. 统计数据函数,改变局部函数avg到一个虚构的本地功能8月然后再次编译窗口中的以下消息。这诊断查看器窗口用带有阴影的红线显示每个检测到的错误。

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

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

  4. 通过更改8月回到avg和重新编译。

定义输入和输出

默认情况下,函数输入和输出从连接到其端口的信号继承其数据类型和大小Matlab功能块,以验证它继承了正确的类型和大小。

  1. 双击Matlab功能堵塞统计数据

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

    左侧窗格显示参数val以及返回值意思是STDEV.你已经为Matlab功能块。观察到val被分配A.范围输入,是来自Simulink的金宝app输入意思是STDEV.被分配的范围输出,是输出仿真软件金宝app

  3. 在端口和数据管理器的左窗格中,单击行中的任意位置val强调它。

    右边窗格显示资料的“属性”对话框val.默认情况下,输入和输出参数的类、大小、单位和复杂性都是从附加到每个输入或输出端口的信号中继承的。继承由设置指定尺寸1,复杂性遗传,类型继承:与Simulink相同金宝app

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

    属性中的输入或输出参数类型类型场面的领域资料属性对话框,例如,双重的.属性中的表达式也可以指定输入或输出参数的大小尺寸场地。例如,您可以输入[2 3]尺寸要指定的字段val作为一个2乘3矩阵。看类型函数参数大小函数参数有关您可以输入类型和大小的表达式的详细信息。

    笔记

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

创建一个Matlab功能对象和查询属性

可以为对象创建一个对象Matlab功能块,并修改属于此模型的属性。若要在中查询属性,请执行以下操作:呼叫_stats_block2刚创建的模型,创建一个配置对象。

myconfig = get_param(“call_stats_block2 / MATLAB函数”“MATLABFunctionConfiguration”
myconfig = matlabfunction configuration with属性:path:'call_stats_block2 / matlab函数'函数符号:'函数[均值,stdev] = stats(vals)↵↵len=长度(vals);↵mean= avg(vals,len);↵stdev=SQRT(((VALS-AVG(VALS,LEN))。^ 2))/ LEN);↵plot(vals,' -  +');↵↵函数意味着= avg(阵列,尺寸)↵mean= sum(阵列)/大小;↵'updatemethod:'-1'描述:''-1'描述:''-1'描述:'documentlink:'supportvariabledizing:1 allow金宝appdirectfeedthrough:1 saturateonintegeroverflow:1 attrateonintegeroverflow:1 confilepase fimathmode:sameasmatlab fimath:'fimath('roundingmethod','fimath('roundingmethod','最近的','溢出','饱和','productmode','fulteprecision','summode','fillprecision')'
要更改配置对象中的任何属性,请在对象名称中使用点表示法。例如,要将描述更改为Matlab功能块在此模型中:
myconfig。Description = '该模型输出阵列的均值和标准差值'
要了解更多关于属性的信息,您可以在Matlab功能配置对象,见matlabfunctionConfiguration.

定义代码生成的局部变量

从MATLAB算法生成代码Matlab功能块,您必须在在操作中使用它们之前显式分配本地变量的类,大小和复杂性,或作为输出返回它们(参见代码生成的数据定义).在示例函数中统计数据,局部变量len在用于计算平均值和标准偏差之前定义:

len =长度(vals);

一旦你给一个变量赋了属性,除了一些例外情况,你不能在函数体的其他地方重新定义它的类、大小或复杂性重新分配变量属性).

为MATLAB函数块生成代码

  1. 打开呼叫_stats_block2最后保存的模型程序的MATLAB函数块

  2. 双击统计数据块。

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

    如果你得到一个错误可变步长求解器,来自配置参数>解算器,将解算器类型更改为固定步骤求解器并重新运行构建。要了解有关固定步骤和可变步骤求解器之间的差异,请参阅固定步骤与可变步骤求解器

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

将代码添加到Matlab功能以编程方式阻止

此示例演示如何以编程方式添加Matlab功能块到模型,并用MATLAB代码填充块。如果你已经有MATLAB代码,不想把它添加到Matlab功能手动块,此工作流可以很方便。

  1. 创建并保存一个名为mymodel.

  2. 创建一个MATLAB函数用下面的代码保存myadd.m.

    函数c=myAdd(a,b)c=a+b;

  3. 编写一个MATLAB脚本,添加一个Matlab功能mymodel.并用内容填充它myadd.m.

    %添加一个MATLAB函数块到模型中,并用MATLAB填充该块%的代码。版权所有2018 The Mathworks, Inc.开放式系统('mymodel.slx');libraryBlockPath ='金宝appSimulink /用户定义的函数/ MATLAB函数';newBlockPath ='mymodel / myblockname'%将MATLAB函数添加到模型中add_block (libraryBlockPath newBlockPath);内存中的%,打开模型及其部分由层次结构表示%对象。根对象是轨道。脚本的这一行返回%对象表示新的MATLAB功能块:blockHandle=find(slroot,'-ISA''stateflow.emchart'“路径”, newBlockPath);%对象的脚本属性包含块的内容,%表示为字符向量。脚本的这一行加载了%将文件myAdd.m的内容添加到脚本属性中:blockhandle.script = fileread('myadd.m');或者,您可以直接在字符向量中指定代码。%为例:% blockHandle。脚本= '函数c = fcn (a, b)';

  4. 运行脚本并观察新的Matlab功能块在mymodel.

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

也可以看看

|

相关的话题