模拟金宝app®函数是一个计算单元,当提供一组输入时,它计算一组输出。函数头使用类似于MATLAB等编程语言的表示法®和c++。你可以用几种方式定义和实现一个Simulink函数:金宝app
金宝app仿真软件功能块-在一个函数中使用Simulink块定义的函数金宝app金宝app仿真软件的功能块。
出口Stateflow®图形功能-在状态流图中使用状态转换定义函数,然后导出到Simulink模型。金宝app
导出了Stateflow的MATLAB函数-函数用MATLAB语言在状态流图中定义语句,然后导出到Simulink模型中。金宝app
功能函数使用功能块。对于具有S函数的示例,请打开sfcndemo_金宝appsimulinkfunction_getset
.
Si金宝appmulink函数调用者从模型或图表层次结构的任何地方调用Simulink函数的执行。
函数调用程序块-调用在Simulink中定义或从Stateflow导出的金宝app函数。看到函数调用者块参考。
状态流程图转换-在Stateflow图表中,调用Simulink中定义或从Stateflow导出的函数。金宝app
MATLAB功能块-从MATLAB语言脚本调用函数。
S功能块—使用系统方法调用函数。看到ssDeclareFunctionCaller
和ssCall金宝appSimulinkFunction
.
MATLAB系统块-使用系统对象和MATLAB语言调用函数。
除了参数尺寸。和参数输出端口块,金宝app仿真软件的功能块可以通过接口接口到块的本地环境中的信号轮廓尺寸或外港这些信号对调用者是隐藏的。你可以使用端口块在两个端口之间连接和通信金宝app仿真软件的功能阻止或连接到根目录轮廓尺寸和外港块表示外部I/O。
您还可以连接外港块到包含日志记录的接收器块(归档,工作空间)及观看(范围,显示)块。然而,这些块在所有其他块之后执行。
一个金宝app仿真软件的功能块可以将函数调用事件输出到外港块。
当需要跨模型层次结构的可重用逻辑时,使用函数。考虑一个在状态流图中定义了具有可重用逻辑的Simulin金宝appk函数的示例。
您可以将可重用逻辑从状态流程图内部移动到Simulink功能块中。然后,Simulink子系统(子系统和模型块)中的函数调用者以及模型层次金宝app结构中任何级别的状态流程图中的函数调用者都可以重用该逻辑。
其结果是增加了构建模型以供重用的灵活性。
请注意
输入和输出参数名称(x2
,y2
)从状态流程图调用函数时,不必与函数原型中的参数名称匹配(u
,y
)的函数块。金宝app
的函数原型金宝app仿真软件的功能块可以具有相同的输入和输出参数。例如,一个滤波噪声的函数可以输入一个信号,然后在滤波后返回这个信号。
mySignal =过滤器(mySignal)
你可以用函数调用者对测试信号进行分块和加噪,验证算法的功能。
在为该模型生成代码时,金宝app仿真软件的功能块传递一个指向信号的指针,而不是信号值的副本。
空滤波器(实信号){。
* rtuy_mySignal = model_P。DiscreteFilter_NumCoef * DiscreteFilter_tmp;}
在为共享资源(如打印机)建模时使用函数。该模型slexPrinterExample
使用Sim金宝appulink功能块作为多台计算机和模拟打印机进程的单个状态流程图之间的公共接口。
函数接口使用MATLAB语法定义函数名称及其输入和输出参数。模型层次结构只能包含一个具有已识别函数名称的函数定义。Simulink验证:金宝app
其中的论点功能原型函数调用者块的参数与函数中指定的实参相匹配。例如,带有两个输入参数和一个输出参数的函数如下所示:
y = MyFunction(u1, u2)
参数的数据类型、维度和复杂性必须一致。对于函数调用程序块,可以设置输入参数规格和输出参数规格参数,但通常不需要手动指定这些参数。金宝appSimulink从功能派生出规范。
必须指定参数的唯一情况是函数调用程序块在模型或其引用的任何子模型中找不到函数。当函数调用程序块和被调用函数位于由公共父模型引用的单独模型中时,可能会发生这种情况。请参阅金宝app参考模型中的Simulink功能块和Simulink功能块的参数规范金宝app.
与Simulink功能块相比,具有用于触发的直接信号连接的功能调用子系统块提供了更好的信号跟踪能力,但Simulink功能块还有其他优势。金宝app
消除信号线的布线。函数调用程序块允许你执行用Simulink函数块定义的函数,而不需要连接信号线。金宝app此外,函数及其调用者可以驻留在不同的模型或子系统中。这种方法通过分层模型结构消除了信号路由问题,并允许更好地重用模型组件。
对同一个函数使用多个调用者。多个函数调用程序块或状态流程图可以调用同一个函数。如果该函数包含状态(例如,单位延迟块),则该状态在不同的调用程序之间共享。
将函数接口与函数定义分开。函数将它们的接口(输入和输出参数)与它们的实现分开。因此,您可以使用Simulink function块定义函数、从statflow导出的图形金宝app函数或从statflow导出的MATLAB函数。调用者不需要知道函数是如何或在哪里实现的。
使用A的考虑金宝app仿真软件的功能块或子系统块与函数调用之间的共享状态有关金宝app仿真软件的功能块具有共享状态子系统块,即使指定为可重用函数,也不会。
对于一个金宝app仿真软件的功能块,当一个块有多个调用者时,总是为一个函数生成代码。如果Simul金宝appink函数块包含状态块(例如,Delay或Memory),则状态是持久的,并在函数调用者之间共享。在这种情况下,调用的顺序是一个重要的考虑因素。
对于一个子系统块,当块有多个实例并被配置为可重用函数时,通常会为一个函数生成代码作为优化。如果子系统块包含带有状态的块,仍然会为一个函数生成代码,但会将不同的状态变量传递给该函数。状态不在实例之间共享。
金宝appSimulink功能块允许您以图形方式实现功能,但有时使用Simulink功能块并不是最佳解决方案。
例如,当建模一个PID控制器或数字滤波器时,你必须建模定义动态系统的方程。使用s -函数、子系统或模型块来实现方程组,但不要使用Simulink函数块,因为这些情况可能发生:金宝app
函数调用之间状态的持久性。如果Sim金宝appulink函数块包含任何带有状态的块(例如,Unit Delay或Memory),那么它们的状态值在调用函数之间是持久的。如果对该函数有多个调用,则状态值也会在来自不同调用者的调用之间持久存在。
继承连续采样时间。Si金宝appmulink函数块不能继承连续的采样时间。因此,不要在使用连续样本时间来模拟连续系统方程的系统中使用此块。
通过将调用者连接到函数的线路,直观地显示Simulink函数与其调用者之间的连金宝app接:
打开/关闭跟踪线-打开调试选项卡,选择信息覆盖.从下拉框中选择功能连接器.
跟踪线的方向-连接在块底部的线来自函数调用方。连接在块顶部的线连接到Simulink函数或包含该函数的子系统。金宝app
函数导航-函数调用方可以位于子系统内。
通过首先打开子系统,然后单击指向该函数的链接,从子系统中的调用者导航到函数。
如果该函数位于模型的根级别,则会打开该函数。如果该函数在一个子系统中,则包含该函数的子系统将打开。
在选择功能连接器,模型slexPrinterExample
显示调用者和函数之间的关系。
在本例中,中的函数调用方金宝app仿真软件的功能块addPrintJob
,调用导出的statflow函数排队打印作业
.的子图表忙
调用Simulink金宝app函数块printerInk
.跟踪线被绘制进和绘制出状态流程图。
使用动画突出显示函数调用。
这个例子展示了一个动态的Simulink函数调用的静态图。金宝app
控件上的工具条中访问动画调试选项卡,事件的动画段,将动画速度设置为慢
,中等的
,或快
.
事件的动画当你的模型中有事件块时是可见的,例如来自Messages & Events库的块、状态流图、函数调用子系统模块、Simul金宝appink函数或SimEvents®块。