主要内容

自定义块功能的比较

在创建自定义块时,请考虑:

该表显示了每种自定义块类型如何解决这三个问题。

造型方面的考虑

自定义块类型 模型状态动力学 仿真性能 代码生成
解释MATLAB函数 没有 那么快 不支持金宝app
2级MATLAB函数 是的 那么快 需要TLC文件
MATLAB函数 没有 金宝app支持异常
MATLAB系统 是的 金宝app支持异常
是的 需要TLC文件或非内联S-Function支持金宝app
C调用者 没有 金宝app支持
C函数 是的 金宝app支持
是的 金宝app支持
金宝app仿真软件的功能 是的 金宝app支持
是的 金宝app支持

对于定制块的详细设计,请考虑:

模型状态的行为

您需要为一个块的状态行为建模,该块需要一些或所有以前的输出来计算当前的输出。看到状态变量为更多的信息。

自定义块类型 笔记
解释MATLAB函数C调用者 不允许您建模状态行为。
MATLAB函数C函数 允许您使用持续的变量。
2级MATLAB®功能 允许您使用。来建模连续和离散状态行为ContStatesDwork运行时对象方法与块回调方法的组合。有关受支持的方法列表,请参见金宝appMATLAB二级s函数回调方法编写二级MATLAB s函数
MATLAB系统 允许您使用建模离散状态行为DiscreteState属性,并结合块回调方法。这个块使用System对象™方法来回调方法:mdlOutputsstepImploutputImpl),mdlUpdateupdateImpl),mdlInitializeConditionsresetImpl),mdlStartsetupImpl),mdlTerminatereleaseImpl).有关更多信息,请参见什么是系统对象?
C墨西哥人s函数s函数生成器 允许您结合块回调方法建模连续和离散状态行为。有关更多信息,请参见C MEX s -函数的回调方法
金宝app仿真软件的功能 直接与发动机沟通。您可以使用来自连续和离散Simulink块库的适当块对状态行为进行建模。金宝app当对该函数的多个调用来自不同的调用者时,状态值也会在这些调用之间持久存在。有关更多信息,请参见从多个站点调用金宝appSimulink函数块
子系统 直接与发动机沟通。您可以使用来自连续和离散Simulink块库的适当块对状态行为进行建模。金宝app

仿真性能

对于大多数应用程序,所有自定义块类型提供令人满意的模拟性能。使用Simuli金宝appnk分析器来获得实际的性能指示。看到分析器如何捕获性能数据为更多的信息。

两类性能指标分别是接口代价和算法代价。接口成本是将数据从Simulink引擎移到块中的时间。金宝app算法开销是执行块实现的算法所花费的时间。

自定义块类型 笔记
解释MATLAB函数 由于接口的原因,性能较慢,但与MATLAB函数具有相同的算法成本。
当块数据(如输入和输出)被访问或从解释MATLAB函数块,Simulink引金宝app擎将这些数据打包到MATLAB数组中。这种封装需要额外的时间,并在通信期间导致内存临时增加。如果您通过该接口传递大量数据,例如帧或数组,则性能可能会非常慢。
一旦数据被转换,MATLAB执行引擎就会执行算法。因此,算法开销与MATLAB函数相同。
2级MATLAB函数 引起的算法开销和解释MATLAB函数块,但接口成本略高。由于MATLAB S-Functions可以处理多个输入和输出,因此其封装比MATLAB S-Functions要复杂得多解释MATLAB函数块。此外,Simulink引擎为您实现金宝app的每个块方法调用MATLAB执行引擎,而解释MATLAB函数块只调用MATLAB执行引擎输出方法。
MATLAB函数 通过代码生成执行模拟,并产生与其他Simulink内置块相同的接口开销。金宝app
由于块的实现,这个块的算法开销比较难分析。平均而言,这个块的函数和MATLAB函数运行的速度差不多。
如果MATLAB函数块的代码使用coder.extrinsic调用到MATLAB执行引擎,它会产生MATLAB s -函数或解释MATLAB函数块。调用MATLAB执行引擎从MATLAB函数块将产生一个警告,以防止您无意中这样做。
为了减少算法开销,可以关闭all的调试开关MATLAB函数块。
MATLAB系统 在解释执行模式下,性能类似于2级MATLAB函数因为该模型使用MATLAB执行引擎来模拟块。在代码生成模式下,性能类似于MATLAB函数因为模型使用生成的代码来模拟块。有关更多信息,请参见MATLAB函数表中的项。
C调用者C函数 由于解析和构建自定义代码,第一次模型模拟可能会慢一些。为了加快第一次编译后的模拟,从配置参数中,选择更快的构建以便更快地编译和选择快速跑为更快的模拟。
C墨西哥人s函数 通过编译的代码进行模拟,并产生与Simulink内置块相同的接口开销。金宝app算法开销取决于s函数的复杂度。
s函数生成器 此块仅根据您提供的规范和C代码构建S-Function。您还可以使用此块作为模型中生成的S-Function的包装器。与C MEX S-Function相比,此块的算法开销仅来自包装器。
金宝app仿真软件的功能,子系统 如果包含在库中,则不会引入接口或算法成本,除非该块作为模型中的常规子系统存在。
性能与子系统中实现的算法的复杂性成正比。如果子系统包含在库中,那么在第一次更新图表或为模拟做好准备时,当Simulink加载任何未加载的库时,会产生一些成本。金宝app如果所有引用的库块保持不变,那么Simulink随后不会重新加载库。金宝app如果模型不使用库,则编译模型的速度会更快。

代码生成

如果您的模型是更大系统的一部分,则需要代码生成。不是所有的自定义块类型都支持用金宝app金宝app仿真软件编码器™

自定义块类型 笔记
解释MATLAB函数 不支持代码生成。金宝app
C调用者C函数 金宝app支持代码生成。
2级MATLAB函数 只有在使用目标语言编译器(TLC)函数实现算法时才生成代码。在加速和外部模式模拟中,您可以选择在解释模式中执行S-Function,通过回调MATLAB执行引擎,而无需在TLC中实现算法。若MATLAB s函数为SimViewingDevice,金宝app仿真软件编码器Product在代码生成期间自动省略该块。
MATLAB函数MATLAB系统 金宝app支持代码生成。但是,如果您的块调用MATLAB执行引擎,它将使用金宝app仿真软件编码器只有在对MATLAB执行引擎的调用不影响块输出的情况下才能使用。在这种情况下金宝app仿真软件编码器product从生成的C代码中省略了这些调用。该特性允许您保留可视化代码,即使在生成嵌入式代码时也是如此。
C墨西哥人s函数s函数生成器

两者都支持金宝app代码生成。

  • 对于非内联s -函数金宝app仿真软件编码器产品在代码生成期间使用C MEX函数。

  • 对于C MEX S-Functions,如果需要内联S-Function或为手写代码创建包装器,则必须为S-Function编写TLC文件。

  • 在S-Function Builder中,可以选择“Generate wrapper TLC”选项自动生成TLC文件。

看到s -函数和代码生成(金宝app仿真软件编码器)为更多的信息。

金宝app仿真软件的功能 金宝app支持代码生成。
子系统 金宝app只要子系统中包含的块支持代码生成,就支持代码生成。有关更多信息,请参见子系统函数的控制生成(嵌入式编码)

多个输入和输出端口

这些类型的自定义块支持多个输入和输出端口。金宝app

自定义块类型 笔记
解释MATLAB函数 金宝app仅支持单输入单输出。
MATLAB函数 金宝app支持多种输入输出接口,包括总线信号。看到结构输入和输出如何与总线信号接口为更多的信息。
MATLAB系统 金宝app支持多种输入输出接口,包括总线信号。此外,还可以根据系统对象的属性修改输入输出端口的数量getNumInputsgetNumOutputs方法。
C调用者C函数 金宝app支持多种输入输出接口,包括总线信号。
MATLAB二级s函数,C MEX s函数,s函数生成器 金宝app支持多种输入输出接口。此外,还可以根据用户自定义的参数修改输入输出端口的个数。C MEX s -函数和s函数生成器金宝app支持总线信号。
金宝app仿真软件的功能 金宝app支持多种输入输出接口,包括总线信号。
子系统 金宝app支持多种输入输出接口,包括总线信号。此外,还可以根据用户自定义的参数修改输入输出端口的个数。看到Self-Modifiable相关子系统为更多的信息。

更新速度金宝app

金宝appSimulink在每次仿真之前和用户请求时更新图表。每个块都会给图表更新过程带来一些开销。

自定义块类型 笔记
解释MATLAB函数 低的图表更新成本。
MATLAB函数C调用者C函数 模拟是通过代码生成来执行的,所以这个块在第一次更新时可能会花费大量的时间。然而,由于代码生成是增量的,如果块和连接到它的信号没有改变,Simulink不会重复更新块。金宝app
MATLAB系统 速度比MATLAB函数因为不会生成代码来更新图表。因为代码生成是增量的,所以如果块和连接到它的信号没有改变,Simulink不会金宝app重复更新块。
C MEX s -函数,MATLAB二级s -函数 只有当它重写在更新图表时执行的方法时,才会比其他Simulink金宝app块产生更大的成本。如果这些方法变得复杂,它们会大大增加更新图表所需的时间。有关更新关系图时执行的方法列表,请参见中的流程视图金宝app与C - s -函数的Simulink引擎交互.当更新图表时,Simulink在模型初始化阶段调用所有金宝app相关的方法,直到,但不包括,mdlStart
金宝app仿真软件功能,子系统 速度与子系统中实现的算法的复杂性成正比。如果子系统包含在库中,那么在第一次更新图表或为模拟做好准备时,当Simulink加载任何未加载的库时,会产生一些成本。金宝app如果所有引用的库块保持不变,那么Simulink随后不会重新加载库。金宝app如果模型不使用库,则编译模型的速度会更快。

回调方法

金宝appSimulink块通过块回调方法与Simulink引擎通信,它完全指定块的行为(除了Simulink Function块)。每种自定义块类型都允许您实现一组不同的回调方法。要了解块如何与Simulink引擎交互,请参阅金宝app金宝app与C - s -函数的Simulink引擎交互.这个表使用s函数回调方法名字作为等价物。

自定义块类型 笔记
解释MATLAB函数MATLAB函数C调用者 所有创建一个mdlOutputs方法来计算给定输入值的输出值。您不能使用这些块之一实现任何其他回调方法,因此,不能建模状态行为。
C函数 允许实现启动、输出和终止回调方法。允许使用持久数据建模离散状态。
2级MATLAB函数 允许实现更大的回调方法子集,包括可用于建模连续和离散状态的方法。有关受支持的方法列表,请参见金宝appMATLAB二级s函数回调方法编写二级MATLAB s函数
MATLAB系统 使用系统对象方法作为回调方法:mdlOutputsstepImploutputImpl),mdlUpdateupdateImpl),mdlInitializeConditionsresetImpl),mdlStartsetupImpl),mdlTerminatereleaseImpl).有关更多信息,请参见金宝appSimulink引擎与系统对象方法的交互
C墨西哥人s函数 允许实现一组完整的回调方法。
s函数生成器 允许的实现mdlOutputsmdlDerivativesmdlUpdate
金宝app仿真软件的功能 打包为一个独立的功能。这个函数的任何调用者都将根据调用者的位置成为其中一个回调方法的一部分。
子系统 直接与发动机沟通。您可以使用来自连续和离散Simulink块库的适当块来建模状态行为。金宝app

比较MATLABS-Functions来MATLAB用于代码生成的函数

MATLAB s函数与MATLAB函数对于代码生成有一些根本的区别。

  • 金宝app仿真软件编码器产品可以生成MATLAB s -函数和MATLAB函数的代码生成。然而,MATLAB s -函数需要目标语言编译器(TLC)文件来生成代码。用于代码生成的MATLAB函数不需要TLC文件。

  • MATLAB S-functions可以使用任何MATLAB函数,而用于代码生成的MATLAB函数是MATLAB语言的子集。有关代码生成所支持的函数列表金宝app,请参见C/ c++代码生成支持的函数和对象金宝app

  • MATLAB s -函数可以建模离散和连续的状态动力学,而用于代码生成的MATLAB函数不能建模状态动力学。

扩展自定义块功能

您可以使用回调和MATLAB图形扩展任何自定义块的功能。

块回调在模拟中的特定点执行用户定义的操作。例如,回调可以在仿真之前将数据加载到MATLAB工作空间中,或者在仿真结束时生成仿真数据图。您可以将块回调赋给任何自定义块类型。有关可用回调的列表和有关如何使用它们的更多信息,请参见指定块回调

App Designer, MATLAB图形用户界面开发环境,提供了方便地创建自定义用户界面的工具。看到应用程序构建获取更多关于使用App Designer的信息。

另请参阅

|||||||||

相关的话题