文档

通过使用控制函数调用子系统绑定行动

可以将指定的数据和事件绑定到状态绑定行动。绑定到某个状态的事件只能通过该状态或其子状态中的操作进行广播。还可以将函数调用事件绑定到状态,以启用或禁用该事件触发的函数调用子系统。函数调用子系统在进入带有绑定事件的状态时启用,在退出该状态时禁用。函数调用子系统的执行完全绑定到调用它的状态的活动。

将函数调用子系统绑定到状态

默认情况下,函数调用子系统由定义相关函数调用输出事件的图表控制。这种关联意味着函数调用子系统在图表唤醒时启用,并在图表进入睡眠状态之前保持活动状态。方法将函数调用子系统绑定到图表层次结构中的状态,以实现更精细的控制级别绑定行动(见绑定操作).

可以将函数调用输出事件绑定到状态。创建这种类型的绑定时,由事件调用的函数调用子系统也绑定到状态。在这种情况下,函数调用子系统在进入状态时启用,在退出状态时禁用。

当您将一个函数调用子系统绑定到一个状态时,您可以微调子系统在启用和禁用时的行为,如以下部分所述:

当子系统被禁用时处理输出

尽管函数调用子系统在禁用时不会执行,但它们的输出信号可用于模型中的其他块。如果函数调用子系统绑定到某个状态,则可以将其输出保持在前一个时间步骤中的值,或者在禁用子系统时将输出重置为其初始值。遵循以下步骤:

  1. 双击子系统的输出端口块,打开块参数对话框。

  2. 选择一个选项禁用时输出

    选择: :
    举行 保持最近的输出值
    重置 将输出重置为初始值
  3. 点击好吧记录设置。

    请注意

    设置禁用时输出仅当函数调用子系统绑定到状态时才有意义,如中所述将函数调用子系统绑定到状态

子系统启用时状态的控制行为

如果函数调用子系统绑定到某个状态,则可以将子系统状态变量保持在前一个时间步骤中的值,或者在子系统执行时将状态变量重置为初始条件。通过这种方式,绑定状态获得了对函数调用子系统状态变量的完全控制。遵循以下步骤:

  1. 双击子系统的触发端口,打开“块参数”对话框。

  2. 选择一个选项启用时的状态

    选择: :
    举行 维护包含触发器端口的子系统的状态的最新值
    重置 恢复到包含该触发端口的子系统状态的初始条件
    继承

    从函数调用启动器的父子系统继承此设置。如果启动器的父节点是模型根节点,则保留继承的设置。如果触发器有多个启动器,则所有启动器的父启动器必须具有相同的设置:all举行或全部重置

  3. 点击好吧记录设置。

    请注意

    设置启用时的状态仅当函数调用子系统绑定到状态时才有意义,如中所述将函数调用子系统绑定到状态

将函数调用子系统绑定到状态

该模型使用触发器事件触发函数调用子系统E它绑定到图表的状态。在解算器在“模型配置参数”对话框的窗格中,该模型指定了固定步长为1的固定步长求解器。

图表包含两种状态。事件E绑定到状态一个伴随着行动

绑定:E

事件E为范围为输出到Simulin金宝appk以及触发类型函数调用

函数调用子系统包含一个触发器端口块、一个输入端口、一个输出端口和一个简单的框图。该框图使用单元延迟块,在每个时间步骤中将计数器增加1。

触发端口的Block Parameters对话框包含以下设置:

  • 触发类型函数调用

  • 启用时的状态重置.此设置在启用函数调用子系统时将其状态值重置为零。

  • 采样时间类型触发.此设置将函数调用子系统设置为仅在启用时由调用事件触发时才执行。

设置采样时间类型周期使样品时间字段,默认为1。类中指定的每个时间步骤,这些设置强制函数调用子系统执行样品时间字段。为实现这一点,为函数调用子系统绑定调用事件的状态必须为时间步骤发送事件,该时间步骤与中指定的采样率相一致样品时间字段。状态可以以模拟采样速率在进入或操作期间发送事件。

  • 对于固定步长采样,采用样品时间值必须是固定步长的整数倍。

  • 对于变步长采样,采样时间值没有限制。

要了解状态如何控制绑定函数调用子系统,请开始模拟模型。

  • 在时间t = 0时,默认转换到状态一个发生。状态一个执行它的绑定和入口操作。绑定动作绑定事件E一个,启用函数调用子系统,并将其状态变量重置为0。入口操作触发函数调用子系统并执行其框图。框图使用单元延迟块将计数器增加1。Unit Delay块输出一个值为0,并在下一次调用子系统之前保持新值为1。

  • 在时间t = 1时,来自模型的下一个更新事件将测试状态一个为一个外向的过渡。过渡到国家B不是因为时间运算符蜱虫后(10)只允许在接收到10个更新事件后进行转换。状态一个保持活动状态,其during操作触发函数调用子系统。单元延迟块输出其保持值1。子系统还将其计数器递增以产生值2,单元延迟块将保留该值直到下一次触发执行。

  • 接下来的8个更新事件在每个时间步骤中将子系统输出增加1。

  • 在时间t = 10时,从状态的转变一个B发生。因为绑定到状态一个不再活动,则函数调用子系统被禁用,其输出降为0。

  • 在时间t = 11时,从状态的转变B一个发生。同样,绑定动作启用了函数调用子系统。后续更新事件在每个时间步骤中将子系统输出增加1,直到下一次转换到状态B发生在时间t = 21。

避免绑定的Muxed触发器事件

绑定事件将函数调用子系统的控制提供给图表中的单个状态。当您允许其他事件通过mux触发函数调用子系统时,此控件将不起作用。例如,该模型定义了两个函数调用事件,使用Mux块触发一个函数调用子系统。

在图表中,E1绑定到状态一个,但E2没有。状态B发送触发事件E2在进入动作中。

在模拟此模型时,当从状态转换时输出不会重置一个B发生。

当您通过mux向函数调用子系统提供多个触发事件时,不建议绑定。Muxed触发器事件会干扰事件绑定并导致未定义的行为。