描述
Simulink功能块是一个子系统块,预配置为用Simulink®块图形定义功能的起点。该块为函数调用方提供了一个文本接口。您可以从函数调用程序块、MATLAB函数块或Stateflow®图表调用Simulink函数块。
功能接口
功能界面出现在Simulink功能块的表面上。编辑块文本可从函数定义中添加和删除Argument Inport块和Argument Outport块。编辑还会在Simulink功能块内的触发器块中设置功能名称参数。
例如,在Simulink函数块的表面输入y=myfunction(u),会在子系统中添加一个参数输入块(u)和一个参数输出块(y)。
当使用函数调用程序块调用函数时,函数调用程序中的参数function prototype必须与您在Simulink函数块上指定的函数接口完全匹配。此匹配包括函数的名称以及输入和输出参数的名称。例如,Simulink Function块和Function Caller块都使用参数名称u和y。(如果使用不同的名称,例如把u改成a,编译会报错)
从Stateflow转换或状态标签调用函数时,可以使用不同的参数名称。例如,Simulink Function块使用x和y参数,而Stateflow转换使用x2和y2参数来调用函数。
Function-Call 子系统 VS Simulink Function块
通常,函数调用子系统块通过直接信号连接提供比Simulink函数块更好的信号可追溯性。而Simulink功能块消除了在模型层次中的路由输入和输出信号线。
属性 | Function-Call | Simulink Function |
---|---|---|
执行/调用函数的方法 | 使用信号线触发 | 使用函数名调用 |
形式输入参数(参数输入块)和输出参数(参数输出块) | no | yes |
local inputs和outputs | yes | yes |
下面我新建一个simulink function模块,名字为abc
u增益20输出y,函数可见性设为scoped,即局部的。
然后通过新建一个function caller模块调用abc,最后生成代码。可以看到abc函数被成功调用了
这是一个直接的函数调用。
现在我把函数的可见性修改为gobal,然后生成代码看下效果
如下图所示,可以看到abc作为一个单独的文件生成出来了,形参也变成传地址的形式了。这个地址在函数内部是有全局作用域的。