# 使用函数调用子系统
Function-Call Subsystem 模块是一种条件执行子系统,它在每次控制端口收到函数调用事件时运行。FunctionCallGenerator 模块可以提供函数调用事件。
函数调用子系统类似过程编程语言中的函数。调用函数调用子系统将按顺序执行子系统中的模块的输出方法。
# 创建函数调用子系统
- 在模型中添加 Function-Call Subsystem 模块。
Sysblock 框图建模环境,添加 Subsystem 模块到您的模型中。
进入 Subsystem 模块,双击呼出快速搜索框,键入 trigger,然后选择 Subsystem.Trigger。

打开 Trigger 端口模块的参数对话框,将触发类型设置为 functionCall 选项。

- 将函数调用发起方连接到函数调用输入接口。
- 使用 FunctionCallGenerator 模块,连接值函数调用输入端口。
# 函数调用子系统中的参数设置
配置 FunctionCallGenerator 模块,方法如下:
该模块功能以指定的速率执行某子系统。包含两个参数:采样时间、迭代次数。
- 采样时间:必须设置为模型仿真步长的整数倍。如图所示代表每 0.2 秒调用一次 Function-Call 子系统。
- 迭代次数:该参数代表一个仿真时间步中执行的调用次数。
# 函数调用子系统中的采样时间传播
配置 Function-Call Subsystem 模块,方法是:将其 Trigger Port 模块的采样时间类型设置为触发或周期性。
# 函数调用子系统的锁存输入数据
可以锁存 Function-Call Subsystem 模块中的 Inport 模块的输入数据,以确保数据完整性。要锁存输入数据,请在 Inport 模块参数中,选择针对函数调用子系统输出的反馈信号锁存输入。
# 模型案例
基于函数调用子系统的特性,可以搭建如下验证系统。
注:请在仿真设置的输出 Tab 页勾选存储时间时刻的变量值选项以获取相同的仿真结果。
子系统中设置累加算法。
仿真时间设置为 1 秒,仿真步长设置为 0.1 秒,FunctionCallGenerator 模块设置为 0.2 秒,代表每 0.2 秒调用一次;仿真结果如下:
如上图所示,1 秒内该子系统一共被调用 6 次,分别在 0、0.2、0.4、0.6、0.8 和 1 秒处生成结果 1、2、3、4、5、6。
在之前案例的基础上,将 FunctionCallGenator 模块采样时间设置为 0.2 秒,迭代次数设置为 2;模型仿真步长设置为 0.1,仿真时间 1 秒。
预期结果为子系统每隔 0.2 秒输出一次结果,每次输出结果数值增加 2(子系统执行 2 次),因此输出分别对应 2、4、6、8、10、12。