文档

使用绑定操作控制函数调用子系统

什么是约束行为?

绑定状态中的操作将指定的数据和事件绑定到该状态。绑定到状态的事件只能由该状态中的操作或其子项广播。您还可以将函数调用事件绑定到状态,以启用或禁用事件触发的函数调用子系统。当状态为und事件在该状态退出时被输入和禁用。函数调用子系统的执行完全绑定到调用它的状态的活动。

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

默认情况下,函数调用子系统由定义了关联函数调用输出事件的图表控制。此关联意味着当图表唤醒时,函数调用子系统将启用,并保持活动状态,直到图表进入睡眠状态。要实现更精细的控制级别,可以将函数调用子系统绑定到使用绑定操作在图表层次结构中进行状态设置(请参见绑定操作).

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

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

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

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

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

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

    选择: 致:
    持有 保持最近的产值
    重置 将输出重置为初始值
  3. 点击好啊记录设置。

    请注意

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

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

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

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

  2. 选择一个选项,用于州时启用

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

    从函数调用发起程序的父子系统继承此设置。如果启动器的父级是模型根,则保留继承的设置。如果触发器有多个启动器,则所有启动器的父级必须具有相同的设置:要么全部持有或全部重置

  3. 点击好啊记录设置。

    请注意

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

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

以下模型使用触发器事件触发函数调用子系统E与状态绑定一个图:

此模型指定了一个固定步长解算器,该解算器在模型中的固定步长为1解算器“模型配置参数”对话框的窗格。

图表包含两个状态,一个B,连接转换,以及一些操作:

事件E用动作绑定到状态A绑定:E事件E为范围为的图表定义输出仿真软件万博1manbetx以及一种触发类型函数调用

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

触发器端口的“块参数”对话框如下所示。

州时启用参数使用该设置重置. 启用时,此设置将函数调用子系统的状态值重置为零。

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

背景采样时间类型周期性使样品时间字段,默认值为1。属性中指定的每个时间步骤强制执行函数调用子系统样品时间要完成此操作,绑定函数调用子系统的调用事件的状态必须发送一个时间步长的事件,该时间步长与样品时间字段。状态可以使用发送事件进入在期间动作在模拟采样率。

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

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

绑定的函数调用子系统的行为

要查看状态如何控制绑定函数调用子系统,请在中开始模拟模型将函数调用子系统绑定到状态的模型. 以下步骤描述了子系统的输出。

  1. 在图表中,默认转换为状态一个发生。

  2. 当状态一个变为活动状态时,它执行绑定和进入操作。绑定操作,绑定:E绑定事件E陈述一个.此操作启用函数调用子系统并将其状态变量重置为0。

    状态一个也执行它的进入动作,en:E,它将发送一个事件E触发函数调用子系统并执行其方框图。方框图使用单位延迟块每次将计数增加1。因为单位延迟块的先前内容在重置后为0,所以初始输出为0,并且为子系统的下一次调用保留当前值1。

  3. 来自模型测试状态的下一个更新事件一个为即将离任的过渡。

    转换到状态的时间操作B之后(10,勾选),仅允许在收到十个更新事件后进行转换。对于第二次更新,在状态的操作期间一个杜:是的,它发送一个事件来触发函数调用子系统。Unit Delay块中保存的内容1输出到作用域。

    子系统还将1加到所持有的值上,以产生值2,单位延迟块持有该值以备下一次触发执行。

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

  5. 11号th更新事件,转换到状态B发生和状态B变得活跃。

    因为绑定到状态一个不再活动时,函数调用子系统将被禁用,其输出降为0。

  6. 当下一个采样事件发生时,状态转换B陈述一个发生。

    再一次,绑定操作,绑定:E,启用函数调用子系统并将其输出重置为0。

  7. 接下来的10个更新事件产生以下输出。

为什么要使用绑定避免多路触发事件

中的例子绑定的函数调用子系统的行为说明绑定事件如何将函数调用子系统的控制赋予图表中的单个状态。当您允许其他事件通过mux触发函数调用子系统时,此控制将不起作用。例如,下面模型定义两个函数调用事件,以使用多路复用器布洛克:

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

当你模拟这个模型时,你会得到如下输出:

广播E2在国家B更改输出,不再重置。

请注意

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

这个话题有用吗?