Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

MATLAB Function

MATLAB 代码包含在生成可嵌入式 C 代码的模型中

库:
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_block2MATLAB 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 模型中的模块的输入和输出。

This shows connected signals between the blocks established in the previous image.

您还可以使用模型资源管理器或符号窗格来定义变量、添加输入触发器以及创建函数调用输出。有关详细信息,请参阅Create and Define MATLAB Function Block VariablesManage the Input Trigger of a MATLAB Function BlockManage 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

端口

输入

全部展开

输入端口,指定为标量、向量或矩阵。您创建的每个输入变量都有一个对应的输入端口。

MATLAB 支持但 Simulink 不支持的数据类型可能无法在 Simulink 模型和 MATLAB Function 模块内的函数之间传递。这些类型可在 MATLAB Function 模块内使用。

有关此模块的定点支持的详细信息,请参阅Fixed-Point Data Types with MATLAB Function Block (Fixed-Point Designer)Data Type Override with MATLAB Function Block (Fixed-Point Designer)

依存关系

要创建输入端口,请打开模块并在符号窗格中创建输入变量。请参阅Create and Define MATLAB Function Block Variables

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

输出

全部展开

输出端口,指定为标量、向量或矩阵。您创建的每个输出变量都有一个对应的输出端口。

依存关系

要创建输出端口,请打开模块并在符号窗格中创建输出变量。请参阅Create and Define MATLAB Function Block Variables

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

参数

全部展开

常设

选择如何在 MATLAB Function 模块图标上显示端口标签。

  • - 不显示端口标签。

  • FromPortIcon - 显示输入和输出变量的名称。

  • FromPortBlockName - 显示输入和输出变量的名称。

  • SignalName - 如果连接到端口的信号已命名,则显示信号名称。否则,显示变量的名称。

编程用法

参数ShowPortLabels
类型:字符串标量或字符向量
"none" | "FromPortIcon" | "FromPortBlockName" | "SignalName"
默认值"FromPortIcon"

控制用户对 MATLAB Function 模块内容的访问。

  • ReadWrite - 允许打开和修改 MATLAB Function 模块内容。

  • ReadOnly - 允许打开 MATLAB Function 模块。

  • NoReadOrWrite - 禁止打开或修改 MATLAB Function 模块。

注意

如果您尝试查看其读取/写入权限参数设置为 NoReadOrWriteMATLAB Function 模块的内容,该模块不会响应。例如,当您双击 MATLAB Function 模块时,Simulink 不会打开表内容,也不会显示消息。

编程用法

参数Permissions
类型:字符串标量或字符向量
"ReadWrite" | "ReadOnly" | "NoReadOrWrite"
默认值"ReadWrite"

模块是否尝试在仿真期间消除包含原子单元的人为代数环。

  • off - 不尝试消除任何包含原子单元的人为代数环。

  • on - 尝试消除任何包含原子单元的人为代数环。

编程用法

参数MinAlgLoopOccurrences
类型:字符串标量或字符向量
"off" | "on"
默认值"off"

指定此模块中的变量必须以相同的速率运行,还是能以不同的速率运行。

  • 如果 MATLAB Function 模块中的变量能以不同速率运行,请将采样时间指定为继承 (-1)。

  • 如果变量必须以相同的速率运行,请指定与此速率对应的采样时间 Ts

编程用法

参数SystemSampleTime
类型:字符串标量或字符向量
"-1" | "[Ts 0]"
默认值"-1"

代码生成

选择模块生成的代码格式。

自动

Simulink Coder 将基于模型中存在的 MATLAB Function 模块的类型和实例数为您的系统选择最佳格式。

内联

Simulink Coder 无条件地内联 MATLAB Function 模块。

不可重用函数

Simulink Coder 在单独的文件中显式生成单独的函数。具有此设置的 MATLAB Function 模块生成的函数可能具有取决于代码生成中的函数接口的参数。您可以分别使用代码生成中的参数函数名称文件名(无扩展名) 来命名生成的函数和文件。这些函数不可重入。

可重用函数

Simulink Coder 可以生成带参数的函数,当模型中包含模块的多个 MATLAB Function 实例时,将允许重用 MATLAB Function 模块的代码。

此选项生成具有参数的函数,该函数允许在模型引用层次结构的生成代码中重用 MATLAB Function 模块代码,该层次结构包括跨引用模型的 MATLAB Function 模块的多个实例。在这种情况下,MATLAB Function 模块必须在库中。

提示

  • 当您要将一个 MATLAB Function 模块的多个实例表示为一个可重用函数时,您可以将每个实例指定为自动可重用函数。最好是使用其中一个,因为使用两个将生成两个可重用函数,每个指定一个函数。仅当可以重用时,这些选项的结果才会有区别。选择自动则不允许控制 MATLAB Function 模块代码的函数或文件名。

  • 可重用函数自动选项都会确定是否存在 MATLAB Function 模块的多个实例,以及是否可以重用代码。当无法重用代码时,这些选项的行为会有所不同。在这种情况下,自动生成内联代码,或者在禁止内联的情况下为每个模块实例生成一个单独的函数。

  • 如果您在生成的代码处于源代码管理状态下时选择了可重用函数,请将文件名选项设置为使用子系统名称使用函数名称用户指定。否则,点您修改模型时,代码文件的名称就会改变,从而无法对文件进行源代码管理。

依存关系

  • 此参数需要 Simulink Coder

  • 将此参数设置为不可重用函数可重用函数将启用下列参数:

    • 函数名称选项

    • 文件名选项

    • 用于初始化/终止函数的内存段(需要 Embedded Coder® 和基于 ERT 的系统目标文件)

    • 用于执行函数的内存段(需要 Embedded Coder 和基于 ERT 的系统目标文件)

  • 将此参数设置为不可重用函数将启用具有独立数据的函数(需要 Embedded Coder 许可证和基于 ERT 的系统目标文件)。

编程用法

参数RTWSystemCode
类型:字符串标量或字符向量
"Auto" | "Inline" | "Nonreusable function" | "Reusable function"
默认值"Auto"

模块特性

数据类型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

直接馈通

a

多维信号

a

可变大小信号

a

过零检测

a 实际支持的数据类型或功能取决于模块实施。

扩展功能

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

版本历史记录

在 R2011a 中推出

全部展开