本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

使用函数调用子系统

Function-Call Subsystem 模块是一种条件执行子系统,它在每次控制信号收到函数调用事件时运行。Stateflow® 图、Function-Call Generator 模块或 S-function 模块可以提供函数调用事件。

函数调用子系统类似于过程编程语言中的函数。调用函数调用子系统将按执行顺序执行子系统中的模块的输出方法。有关 Function-Call Subsystem 模块参数的说明,请参阅 Subsystem, Atomic Subsystem, Nonvirtual Subsystem, CodeReuse Subsystem

创建函数调用子系统

创建函数调用子系统:

  1. 为您的模型添加一个 Function-Call Subsystem 模块。

  2. 打开子系统模块。添加一个模块图,用于定义在子系统收到函数调用事件时执行的算法。

  3. 设置 Outport 模块的初始值和禁用值。请参阅条件子系统初始输出值Conditional Subsystem Output Values When Disabled

  4. 设置子系统执行时如何处理子系统状态。

    打开子系统模块,然后打开 Trigger 模块的模块参数对话框。从 States when enabling 下拉列表中,选择:

    • held” - 状态保持最近使用的值。

    • reset” - 状态重置为初始条件。

    • inherit” - 使用发出函数调用的父级子系统的 held 或 reset 设置。

    对于其 Function-Call Subsystem 模块具有不同参数设置的嵌套子系统,子级子系统对话框中的设置将覆盖从父级子系统继承的设置。

  5. 将函数调用发起方连接到函数调用输入端口。

    如果您连接 Inport 模块,请打开该模块,选择 Signal Attributes 窗格,然后选中 Output function call 复选框。

函数调用子系统中的采样时间传播

配置 Function-Call Subsystem 模块,方法是:将其 Trigger 端口模块的 Sample time type 设置为 “triggered” 或 “periodic”。

  • 触发(非周期性)函数调用子系统可在一个时间步执行零次、一次或多次。

    如果函数调用子系统由具有离散采样时间的根级函数调用 Inport 模块执行,则不允许在一个时间步进行多次函数调用。要允许多个函数调用,请将 Sample time 设置为 -1(继承),并将函数调用子系统中所有模块的采样时间设置为 -1(继承)。

  • 周期性函数调用子系统在每个时间步执行一次,并且必须接收周期性函数调用。如果函数调用为非周期性,仿真将停止并显示错误消息。将函数调用子系统中所有模块的采样时间设置为 -1(继承)。

注意

在范围检查期间,最小值和最大值参数设置会反向传播到函数调用子系统的实际源端口,即使未启用该函数调用子系统也是如此。

要防止这种反向传播,请执行以下操作:

  1. 在源端口后添加 Signal Conversion 模块和 Signal Specification 模块。

  2. Signal Conversion 模块的 Output 设置为 “Signal copy”。

  3. 指定 Signal Specification 模块的最小值和最大值,而不是在源端口上指定最小值和最大值。

模型示例

另请参阅

模块

相关示例

详细信息