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