用 matlab function 模块在 simulink 中实现 matlab 函数
matlab function 模块使您能够使用 matlab® 语言在 simulink® 模型中定义自定义函数。matlab function 模块支持从 simulink coder™ 和 embedded coder® 生成 c/c 代码。
在以下情况下使用这些模块:
您有现有 matlab 函数可用于对自定义功能进行建模,或您可以轻松创建这样的函数。
您的模型需要在 simulink 图形语言中没有或无法捕获的自定义功能。
您发现使用 matlab 函数对自定义功能建模比通过使用 simulink 模块图建模更容易。
要建模的自定义功能不包括连续或离散的动态状态。要对动态状态建模,请使用 s-function。请参阅。
用 matlab function 模块计算均值和标准差
此示例从包含 matlab function 模块的模型开始,并指导您如何自定义该模块来计算值向量的均值和标准差。
打开模型
模型 call_stats_block1
包括一个空的 matlab function 模块和示例所需的模块。打开模型。
对 matlab function 模块进行编程
为模块编程,以计算值向量的均值和标准差。
双击 matlab function 模块以打开 。matlab function 模块编辑器中出现一个默认函数,其中有两个变量:一个输入参数和一个输出参数。
通过编辑函数声明语句定义函数输入和输出:
function [mean, stdev] = stats(vals)
此语句定义一个名为
stats
的函数,该函数包含三个变量。该语句定义一个输入参数vals
以及两个输出参数mean
和stdev
。在函数声明语句后的新行中,添加以下代码:
% calculates a statistical mean and a standard % deviation for the values in vals. len = length(vals); mean = avg(vals,len); stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len); plot(vals,"- "); function mean = avg(array,size) mean = sum(array)/size;
退出模块。该模块会更新端口名称。函数输出
mean
和stdev
对应于模块输出端口 mean 和 stdev,函数输入vals
对应于模块输入端口 vals。完成与 matlab function 模块的连接,如下图所示。
将模型另存为
call_stats_block2
。
检查 matlab function 模块变量的属性
您可以检查和管理 matlab function 模块中变量的属性。请参阅。在此示例中,验证输入参数 vals
是否继承其类型和大小属性:
双击 matlab function 模块。
打开符号窗格和属性检查器。在函数选项卡中,点击编辑数据。
符号窗格在名称列中显示变量名称。类型列确定函数参数端口分配以及它在函数声明语句中出现的位置。在此示例中,
vals
分配给输入端口。mean
和stdev
分配给输出端口。如果您更改任一变量的类型条目,函数声明语句也会随之更改。检查
vals
的属性。在符号窗格中,点击vals
对应的行。属性检查器会更新以显示vals
的属性。作用域属性与类型列匹配。只有部分属性可以继承:大小、单位、复/实性和类型。变量表示它们在以下情况下继承这些属性:大小为
-1
、单位为inherit
、复/实性为“继承
”以及类型为 “inherit:same as simulink
”,即可指定继承。在此示例中,vals
对大小和类型使用这些值。
通过在符号窗格中选择其他 matlab function 模块变量来检查它们。
默认情况下,新定义的输入和输出变量继承其大小、单位、复/实性和类型。如果希望变量使用特定的大小、单位或类型,可以显式指定这些属性。例如,在大小属性中输入 [2 3]
以将变量指定为 2×3
矩阵。有关详细信息,请参阅和。
编译函数
在 matlab function 模块中输入代码后,可以检查代码中是否有错误并编译函数。请参阅。
当您编译模型时,matlab 使用编译器来编译您的 matlab function 模块代码。如果您的系统上安装了多个受 matlab 支持的编译器,您可以使用 mex -setup
命令更改默认编译器。请参阅更改默认编译器。要查看支持的编译器列表,请打开,点击与您的操作系统对应的选项卡,找到 simulink 产品系列表,并转至适用于模型引用、加速模式、快速加速模式和 matlab function 模块列。
在 simulink 中,点击运行以仿真模型。软件在编译模型时会编译 matlab function 模块,并将数据从函数输出到两个 display 模块。
为代码生成准备模块
要从包含 matlab function 模块的模型中生成独立的 c/c 代码,请使用 simulink coder 或 embedded coder。
选择支持仿真编译和代码生成编译的编译器
要查看支持的编译器列表,请打开,点击与您的操作系统对应的选项卡,找到 simulink 产品系列表,并转至 simulink coder 列。
为 matlab function 模块生成代码
如果您有 simulink coder 或 embedded coder 许可证,可以从模型生成代码。要生成代码,请执行以下操作:
在
call_stats_block2
模型中,双击 matlab function 模块。打开 simulink coder 或 embedded coder。
在 c 代码选项卡上,选择编译以编译示例模型。
如果出现与“
变步长
”求解器相关的错误,请打开“配置参数”窗口,然后点击左窗格中的求解器。在求解器选择下,将类型设置为“定步长
”,并再次生成代码。要了解定步长和变步长求解器之间区别的更多信息,请参阅 。
另请参阅
| |