MATLAB Function
在 Simulink 模型中包含 MATLAB 代码
库:
Simulink /
User-Defined Functions
HDL Coder /
User-Defined Functions
描述
使用 MATLAB Function 模块可以编写用于 Simulink® 模型的 MATLAB® 函数。MATLAB 函数针对仿真执行,并生成以 Simulink Coder™ 为目标的代码。如果您刚开始使用 Simulink 和 MATLAB 产品,请参阅用 MATLAB Function 模块在 Simulink 中实现 MATLAB 函数了解概述信息。
双击 MATLAB Function 模块将打开 MATLAB Function 模块编辑器,您可以在其中编写 MATLAB 函数。用 MATLAB Function 模块在 Simulink 中实现 MATLAB 函数中讨论的示例模型 call_stats_block2
在 MATLAB Function 模块编辑器中使用以下函数:
function [mean,stdev] = stats(vals) % 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;
该函数将函数声明语句中的输入和输出数据指定为参量和返回值。前面的示例函数的参量和返回值对应于以下 call_stats_block2
模型中的模块的输入和输出。
您还可以使用模型资源管理器或符号窗格来定义变量、添加输入触发器以及创建函数调用输出。有关详细信息,请参阅Create and Define MATLAB Function Block Variables、Manage the Input Trigger of a MATLAB Function Block和Manage Function Call Outputs of a MATLAB Function Block。
MATLAB Function 模块基于分析来生成有效的可嵌入式代码,该分析可确定每个变量的大小、类和复/实性。该分析施加了以下限制:
首次对变量赋值时会定义其大小、类和复/实性。
在初始赋值后不能为变量属性重新赋值,但在代码中可以针对不同用途使用可变大小的数据或重复使用变量。
请参阅变量属性的重新赋值。
除了语言限制,MATLAB Function 模块还支持 MATLAB 中提供的函数子集。这些函数包括常见类别的函数,例如:
有关详细信息,请参阅 C/C++ 代码生成支持的函数和对象。
注意
虽然此模块的代码会尝试生成与 MATLAB 完全相同的结果,但由于存在舍入误差,因此仍可能产生差异。这些数值差异最初可能是几个 eps
,在重复运算之后可能会放大。建议您不要依赖 nan
的行为。对于相同的计算,不同的 C 编译器可能产生不同的结果。
注意
新的 MATLAB Function 模块不包括 %#codegen
指令,但在检查错误时就如果包含该指令一样。将 %#codegen
指令添加到 MATLAB Function 模块不会影响错误检查。有关详细信息,请参阅编译指令 %#codegen。
为支持数据可视化,MATLAB Function 模块仅支持调用 MATLAB 函数进行仿真。请参阅使用 MATLAB 引擎在 MATLAB Function 模块中执行函数调用了解该功能的一些限制,以及该功能如何与此模块的代码分析集成在一起。如果这些函数调用不直接影响任何 Simulink 输入或输出,则这些调用不会出现在 Simulink Coder 生成的代码中。
在 MATLAB Function 模块中,还可以调用在 Simulink Function 模块中定义的函数。如果在图表的“属性”对话框中选中导出图级别函数(全局) 和允许 Simulink 调用导出的函数,则可以调用 Stateflow® 函数。
在符号窗格中,您可以将模块输入声明为 Simulink 参数,而不是端口。MATLAB Function 模块还支持继承输入、输出和参数的类型及大小。您也可以显式指定这些属性。有关在 MATLAB Function 模块中使用的变量的描述,请参阅定义和修改变量数据类型、指定 MATLAB Function 模块变量的大小和配置 MATLAB Function 模块参数变量。
MATLAB Function 模块中不允许递归调用。
默认情况下,MATLAB Function 模块已启用直接馈通。要禁用它,请清除允许直接馈通属性。非直接馈通语义确保输出仅依赖于当前状态。使用非直接馈通使您能够在反馈环中使用 MATLAB Function 模块并防止代数环。有关详细信息,请参阅 Use Nondirect Feedthrough in a MATLAB Function Block。