一个金宝app仿真软件®函数是一个计算单元,当提供一组输入时,它计算一组输出。函数头使用类似于编程语言(如MATLAB)的符号®和C++。可以用几种方式定义和实现Simulink函数:金宝app
金宝appSimulink功能块-函数定义中使用Simulink块金宝app金宝appSimulink函数块。
导出状态流®图形函数-在状态流程图中使用状态转换定义的函数,然后导出到Simulink模型。金宝app
导出Stateflow MATLAB函数-在状态流程图中使用MATLAB语言语句定义函数,然后导出到Simulink模型。金宝app
S函数-使用S函数块。对于一个s函数的例子,打开sfcndemo\金宝appu simulinkfunction\u getset
.
Si金宝appmulink函数调用程序从模型或图表层次结构中的任何位置调用Simulink函数的执行。
函数调用程序块-调用Simulink中定义或从Stateflow导出的函金宝app数。请参阅函数调用者块参考。
Stateflow图表过渡-在状态流图中,调用在Simulink中定义或从状态流导出的函数。金宝app
MATLAB功能块-从MATLAB语言脚本调用函数。
功能块-使用系统方法调用函数。看见ssDeclareFunctionCaller
和ssCall金宝appSimulinkFunction
.
MATLAB系统块-使用系统对象和MATLAB语言调用函数。
除了参数输入端口和参数输出港街区,a金宝appSimulink函数模块可通过以下方式与模块本地环境中的信号进行接口:输入或外埠块。这些信号对呼叫者是隐藏的。您可以使用端口块在两者之间连接和通信金宝appSimulink函数块或连接到根输入和外埠表示外部I/O的块。
你也可以连接外埠块接收包含日志记录的块(到文件,到工作空间)观看(范围,陈列)街区。但是,这些块在所有其他块之后最后执行。
A.金宝appSimulink函数块可以将函数调用事件输出到外埠块。
当您需要跨模型层次结构的可重用逻辑时使用函数。考虑一个示例,其中在StuteF流程图中定义了具有可重用逻辑的Simulink函数。金宝app
您可以将可重用逻辑从状态流图中移到Simulink函数块中。金宝app然后,在Simulink子系统(子系统和模型块)和模型层次结构中的状态流图中,函数调用者可以重用该逻金宝app辑。
其结果是增加了构建模型以实现重用的灵活性。
笔记
输入和输出参数名称(x2
,y2
)来从状态流图调用函数时,不需要与函数原型中的参数名称相匹配(U
,Y
)Simuli金宝appnk功能块的。
a的功能原型金宝appSimulink函数块可以具有相同的输入和输出参数。例如,过滤噪声的函数可以输入信号,然后在过滤后返回信号。
mySignal=过滤器(mySignal)
您可以使用函数调用者阻塞并向测试信号添加噪声,以验证函数算法。
生成此模型的代码时金宝appSimulink函数块传递指向信号的指针,而不是信号值的副本。
void filter(real_T * rtuy_myssignal){…
*rtuy\u mySignal=model\u P.DiscreteFilter\u NumCoef*DiscreteFilter\u tmp;}
在对共享资源(如打印机)建模时使用函数slexPrinterExample
使用Sim金宝appulink函数块作为多台计算机和模拟打印机进程的单个状态流程图之间的公共接口。
函数接口使用MATLAB语法定义函数名及其输入和输出参数。模型层次结构只能包含一个具有标识的函数名的函数定义。金宝app仿真软件验证:
中的论点函数原型函数调用程序块的参数与函数中指定的参数匹配。例如,具有两个输入参数和一个输出参数的函数显示为:
y=MyFunction(u1,u2)
参数的数据类型、维度和复杂性必须一致。对于函数调用程序块,可以设置输入参数规范和输出参数规范参数,但通常不需要手动指定这些参数。Simulink从函数中派生规范。金宝app
唯一必须指定参数形参的情况是Function Caller块在模型或它引用的任何子模型中找不到函数。当Function Caller块和被调用的函数位于由公共父模型引用的单独模型中时,就会发生这种情况。看到金宝app参考模型中的Simulink功能块和Simulink函数块的参数说明金宝app.
与Simulink功能块相比,具有直接信号连接用于触发的功能调用子系统块提供了更好的信号可追溯性,但Simulink功能块还有其他优点。金宝app
消除信号线的路由。函数调用程序块允许您在没有连接信号线的情况下执行使用Simulink函数块定义的函数。此外,函数及其调用程序可以驻留在不同的模型或子系统中。这种方金宝app法通过分层模型结构消除了信号路由问题,并允许更多地重用模型组件s
对同一函数使用多个调用者。多个函数调用者块或状态流图可以调用同一个函数。如果函数包含状态(例如,单位延迟块),则状态在不同的调用者之间共享。
将函数接口与函数定义分开。函数将其接口(输入和输出参数)与其实现分离。因此,您可以使用Simulink函数块、从Stateflow导出的图形函数或从Stateflow导出的MATLAB函数来定义函数。调用方不需要知道函数是如何实现的或在何处实现的。金宝app
关于使用金宝appSimulink函数块还是块子系统块与函数调用之间的共享状态有关。A.金宝appSimulink函数块具有共享状态,而子系统块,即使指定为可重用函数,也不会。
暂时金宝appSimulink函数块,当一个块有多个调用者时,总是为一个函数生成代码。如果Simulink功能块包含具有状态的块(例如,延迟或内存),则状态为持久状态,并在函数调用方之间共享。在这种情况下,调用顺序是一个重金宝app要的考虑因素。
暂时子系统块,当一个块有多个实例并配置为可重用函数时,通常为一个函数生成代码作为优化子系统块包含具有状态的块,仍会为一个函数生成代码,但会将不同的状态变量传递给该函数。实例之间不共享状态。
金宝appSimulink函数块允许你以图形方式实现函数,但有时使用Simulink函数块并不是最好的解决方案。
例如,在对PID控制器或数字滤波器建模时,必须对定义动态系统的方程建模。使用S函数、子系统或模型块来实现方程系统,但不要使用Simulink功能块,因为可能出现以下情况:金宝app
函数调用之间的状态持久化。如果Sim金宝appulink函数块包含任何具有状态的块(例如,单位延迟或内存),则其状态值在函数调用之间是持久的。如果有多个函数调用,则状态值在来自不同调用方的调用之间也是持久的。
继承连续采样时间。Si金宝appmulink功能块不能继承连续采样时间。因此,不要在使用连续采样时间对连续系统方程建模的系统中使用此块。
可视化地显示Simulink函数和调用者之间的连接,使用连接调用者和函数的线:金宝app
打开/关闭跟踪线-打开调试选项卡上,选择信息覆盖. 从下拉框中选择功能连接器
.
跟踪线的方向——在块的底部连接的线来自函数调用者。连接在块顶部的线与Simulink函数或包含该函数的子系统相连。金宝app
导航到函数——函数调用者可以在子系统中。
通过首先打开子系统,然后单击到该函数的链接,从子系统中的调用者导航到函数。
如果该函数位于模型的根级别,则该函数将打开。如果功能位于子系统内,则包含该功能的子系统将打开。
选择后功能连接器,该模型slexPrinterExample
显示调用者和函数之间的关系。
在这个例子中,函数调用者金宝appSimulink函数块添加打印作业
,调用导出的Stateflow函数queuePrintJob
.分包合同忙碌的
调用Simulink金宝app功能块普林特林克
.在状态流程图中绘制跟踪线。
使用动画突出显示函数调用。
此示例显示动画Simulink函数调用的静态效果。金宝app
要访问动画,请在toolstrip中的调试选项卡,在事件动画节中,将动画速度设置为缓慢的
,媒介
或快速的
.
事件动画在模型中具有事件块时可见,例如来自消息和事件库、状态流程图、,函数调用子系统块、Simuli金宝appnk函数或SimEvents®块。