主要内容

MATLAB函数

包括MATLAB生成可嵌入C代码的模型中的代码

  • 图书馆:
  • 万博1manbetxSimulink/用户定义函数

    HDL编码器/用户定义函数

  • MATLAB功能块

描述

用一个MATLAB函数块,可以编写MATLAB®在Simulink中使用的功能万博1manbetx®模型。MATLAB函数执行用于模拟并为a生成代码万博1manbetx仿真软件编码器™目标。如果您是Simulink和MATLA万博1manbetxB产品的新手,请参阅s manbetx 845用块实现MATLAB函数概述。

双击MATLAB函数块打开MATLAB函数块编辑器,您编写MATLAB功能的位置。示例模型call_stats_block2讨论于使用MATLAB函数块创建自定义功能中使用下列函数MATLAB函数块编辑器

作用[均值,stdev] = stats(vals)%计算统计平均值和标准值val中值的偏差%。len =长度(val);意味着= avg (val, len);方差=√总和(vals-avg (vals, len)) ^ 2)) / len);情节(瓦尔斯,' -  +');作用Mean = avg(array,size) /size;

函数在函数声明语句中指定输入和输出数据作为参数和返回值。中的块的输入和输出对应于前面示例函数的参数和返回值call_stats_block2模型。

这显示了在前面的图像中建立的块之间的连接信号。

您还可以使用Model Explorer或Ports and data Manager定义数据、添加输入触发器和创建函数调用输出。您可以访问端口和数据管理器MATLAB函数块编辑器通过点击编辑数据.有关更多信息,请参见定义MATLAB函数块数据管理MATLAB函数块的输入触发器管理MATLAB功能块的函数调用输出

MATLAB函数块基于确定每个变量的大小、类和复杂性的分析生成有效的可嵌入代码。这种分析施加了以下限制:

除了语言限制,MATLAB函数块支持Mat万博1manbetxlab中可用的功能的子集。这些函数包括常见类别中的函数,例如:

有关更多信息,请参见C/C++代码生成支持的函数和对象万博1manbetx

笔记

尽管此块的代码试图产生与MATLAB完全相同的结果,但由于舍入错误,可能会出现差异。这些数字上的差异,可能是很少的EPS最初,经过反复操作后可以放大。依赖的行为不推荐。对于相同的计算,不同的C编译器可以产生不同的结果。

笔记

刚出现的MATLAB函数块不包括% # codegen指令,但检查是否有错误,就好像它包含在内一样。添加% # codegen对a的指令MATLAB函数块不影响错误检查。有关更多信息,请参阅编译指令%#codegen

支持数万博1manbetx据的可视化,MATLAB函数块只支持对M万博1manbetxATLAB函数的仿真调用。看使用MATLAB引擎在生成的代码中执行函数调用了解此功能的一些限制,以及它如何与此块的代码分析集成。如果这些函数调用不直接影响任何Simulink的输入或输出,则调用不会出现在万博1manbetx万博1manbetx仿真软件编码器生成的代码。

MATLAB函数块中定义的函数,也可以调用万博1manbetxSimulink功能块您可以调用Stateflow®功能与导出图表级功能(Make Global)允许通过Simulink调用导出的函数万博1manbetx选中图表属性对话框中的。

在端口和数据管理器中,您可以将块输入声明为Simulink参数而不是端口。万博1manbetx这MATLAB函数块还支持输入、输出和参万博1manbetx数的类型和大小继承。还可以显式指定这些属性。看见定义和修改函数参数类型指定MATLAB功能块数据的大小配置MATLAB功能块参数数据参数有关中使用的变量的说明,请参见MATLAB函数阻碍。

中不允许递归调用MATLAB函数阻碍。

默认情况下,MATLAB函数块具有直接馈通功能。要禁用它,清除允许直接喂水财产。Nondirect explrough语义可确保输出仅依赖于当前状态。使用Nondirect馈通使您可以使用MATLAB函数阻塞反馈回路,防止代数回路。有关更多信息,请参见在MATLAB功能块中使用非直接馈通

港口

输入

全部展开

函数中的第一个输入参数对应的MATLAB函数块。如果在编辑器中重命名函数参数,则块会相应地重命名端口。

MATLAB支持但Si万博1manbetxmulink不支持的数据类型可能不会在Simulink模型和函数之间传递万博1manbetxMATLAB函数块这些类型可以在MATLAB函数块。

有关此块的定点支持的更多信息,请参见万博1manbetx用MATLAB函数块的定点数据类型(定点设计师)MATLAB功能块具有数据类型覆盖(定点设计师)

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|字符串|不动点|枚举|公共汽车

N中的函数的输入参数MATLAB函数块。在编辑器中添加参数时,块会相应地添加端口。

MATLAB支持但Si万博1manbetxmulink不支持的数据类型可能不会在Simulink模型和函数之间传递万博1manbetxMATLAB函数块这些类型可以在MATLAB函数块。

有关此块的定点支持的更多信息,请参见万博1manbetx用MATLAB函数块的定点数据类型(定点设计师)MATLAB功能块具有数据类型覆盖(定点设计师)

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|字符串|不动点|枚举|公共汽车

输出

全部展开

第一个输出函数的参数MATLAB函数块。如果在编辑器中重命名函数参数,则块会相应地重命名端口。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|字符串|不动点|枚举|公共汽车

N函数内部的输出参数MATLAB函数块。在编辑器中添加参数时,块会相应地添加端口。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|字符串|不动点|枚举|公共汽车

参数

全部展开

中的参数代码生成标签需要万博1manbetx仿真软件编码器或嵌入式编码器®

主要

选择端口标签显示方式MATLAB函数块图标。

没有一个

不要显示端口标签。

FromPortIcon

显示函数输入和输出参数的名称。

FromPortBlockName

显示函数输入和输出参数的名称。

SignalName

如果将连接到端口的信号命名,则显示信号名称。否则,显示函数参数的名称。

程序使用

范围showportlabels.
类型:特征向量
价值“来自Porticon”|'fromportblockname'|'signername'
违约“来自Porticon”

控制用户对文档内容的访问MATLAB函数块。

读写

允许打开和修改MATLAB函数块内容。

只读的

启用打开但不修改MATLAB函数块。

noreadorwrite.

禁用打开或修改MATLAB函数块。

笔记

如果您试图查看MATLAB函数阻止谁读/写权限参数设置为noreadorwrite..例如,当双击这样的MATLAB函数块时,Simu万博1manbetxlink不会打开函数代码,也不会显示任何消息。

程序使用

范围权限
类型:特征向量
价值“读写”|“只读”|'noreadorwrite'
违约“读写”

导致Simul万博1manbetxink处理MATLAB函数在确定块方法的执行顺序时,将块作为一个单元。

对待MATLAB函数当确定块方法的执行顺序时,块作为一个单元。例如,当Simulink需要计算块的输出时,Simulink调用块中所有代码的输出方法万博1manbetxMATLAB函数块的输出方法,然后调用与之同级的其他块的输出方法MATLAB函数块。

处理的所有代码MATLAB函数在确定块方法执行顺序时,块在模型层次结构中与MATLAB函数处于同一级别。这种层次结构处理可能导致块中代码方法的执行与图表外块方法的执行交错。

程序使用

范围治疗原子单位
类型:特征向量
价值'在'|“关闭”
违约'在'

尽量消除任何包含原子单位的人工代数循环。

不要试图消除任何包含原子单位的人工代数循环。

尽量消除任何包含原子单位的人工代数循环。

依赖关系

要启用该参数,请选择归因于原子单位参数。

程序使用

范围MinAlgLoopOccurrences
类型:特征向量
价值“关闭”|'在'
违约“关闭”

指定如何安排MATLAB函数块。

样品时间

指定是否包含所有代码MATLAB函数块必须以相同的速率运行,也可以以不同的速率运行。

周期划分

安排MATLAB函数具有定期分区的块代码。指定与分区运行的速率对应的分区名称和对应的采样时间。

非周期性分区

安排MATLAB函数带有非周期性分区的块代码。请指定分区名称。

依赖关系

要启用该参数,请选择归因于原子单位参数。

程序使用

范围调度
类型:特征向量
价值“SampleTime”|“DiscretePartition”|“无约束分区”
违约“SampleTime”

指定此块中的所有代码是否必须以相同的速率运行,或者可以以不同的速率运行。

  • 如果在MATLAB函数块可以以不同的速率运行,指定继承的采样时间(-1).

  • 如果所有代码必须以相同的速率运行,请指定与此速率相对应的采样时间样品时间参数。

-1

指定继承的样本时间。中的代码使用此示例时间MATLAB函数可以以不同的速度运行。

(Ts 0)

指定定期采样时间。

依赖关系

要启用该参数,请选择归因于原子单位参数。

程序使用

范围系统采样时间
类型:特征向量
价值'-1'|“(Ts 0)”
违约'-1'

代码生成

选择要为原子(非虚拟)单元生成的代码格式。

汽车

万博1manbetx仿真软件编码器和Embedded Coder根据实例的类型和数量为您选择最佳格式MATLAB函数模型中存在的块。

排队

万博1manbetx仿真软件编码器和嵌入式编码器内联MATLAB函数块无条件。

那种一次性的功能

如果文件名选项被设置为汽车万博1manbetx仿真软件编码器和Embedded Coder包在模型文件中分离函数。如果文件名称选项被设置为使用子系统名称使用函数名,或用户指定使用不同的文件名,万博1manbetx仿真软件编码器和嵌入式编码器包单独的功能在单独的文件。

MATLAB函数具有此设置的块生成的函数可能具有参数,具体取决于函数接口参数设置。您可以使用参数命名生成的函数和文件函数名文件名(没有扩展名).这些函数是不可重入的。

可重用函数

万博1manbetx仿真软件编码器和Embedded Coder生成一个带有参数的函数,当模型包含多个块实例时,该函数允许块代码的重用。

这个选项还会生成一个带有允许参数的函数MATLAB函数要在模型引用层次结构的生成代码中重用的阻止代码,其中包括多个实例MATLAB函数跨引用的模型块。在这种情况下,块必须在库中。

有关更多信息,请参见:

提示

  • 当你想要多个实例MATLAB函数块表示为一个可重用函数,您可以将它们中的每一个指定为汽车或作为可重用函数.最好使用其中一个或另一个,因为使用这两个都会创建两个可重用函数,每个名称对应一个函数。只有当不能重用时,这些选择的结果才会不同。选择汽车不允许控制?的函数或文件名MATLAB函数块代码。

  • 可重用函数汽车这两个选项都尝试确定MATLAB函数块是否存在以及代码是否可以重用。选项行为之间的区别在于,当无法重用时:

    • 汽车产生内联代码,或者如果环境禁止内联,则为每个内联代码单独设置函数MATLAB函数块实例。

    • 可重用函数生成一个单独的函数,每个函数都有参数MATLAB函数模型中的块实例。

  • 如果您选择可重用函数当生成的代码受源代码控制时,设置文件名称选项使用子系统名称使用函数名,或用户指定.否则,当您修改模型时,代码文件的名称就会更改,这将阻止对文件进行源代码控制。

依赖关系

  • 这个参数要求万博1manbetx仿真软件编码器用于代码生成。

  • 要启用此参数,请选择归因于原子单位

程序使用

范围RTWSystemCode
类型:特征向量
价值“汽车”|'排队'|“那种一次性函数”|“可重用函数”
违约“汽车”

块特征

数据类型

布尔[一种]|公共汽车[一种]|[一种]|枚举[一种]|不动点[一种]|整数[一种]|[一种]|字符串[一种]

直接馈通

是的

多维信号

有限的[一种]

适应信号

有限的[一种]

过零检测

[一种]实际的数据类型或功能支持取决于块的实现。万博1manbetx

扩展功能

PLC代码生成
使用Simulink®PLC编码器生成结构化文本代码™.万博1manbetx

在R2011a中引入