Simulink函数的绑定行为
当Simulink函数位于某个状态内时,该函数会绑定到该状态。绑定会导致以下行为:
函数调用只能在状态操作和状态及其子状态内的转换中发生。
当进入状态时,该功能启用。
当状态退出时,该功能被禁用。
例如,以下Stateflow图表显示了绑定到状态的Simulink函数。
因为函数队列位于状态A1,所以函数绑定到该状态。
状态A1及其子状态A2和A3可以调用队列,但状态B1不能。
当进入状态A1时,队列启用。
当状态A1退出时,队列被禁用。
Simulink功能禁用时的控制子系统变量
如果Simulink函数绑定到状态,则可以将子系统变量保持在上次执行时的值,也可以将变量重置为初始值。请按照以下步骤操作:
1 在Simulink函数中,双击触发端口以打开“Block Parameters”对话框。
2 为States when enabling选择一个选项。
选项 | 描述 |
---|---|
held | 保存上次执行的子系统变量的值 |
reset | 将子系统变量重置为其初始值 |
将Simulink函数绑定到状态的示例
此示例显示了Simulink函数在绑定到状态时的行为。
函数队列包含一个框图,每次执行函数时,计数器都会递增1。
触发器端口的“Block Parameters”对话框显示如下。
在对话框中,将采样时间类型设置为周期性启用采样时间字段,默认值为1。这些设置告诉函数在启用时对采样时间字段中指定的每个时间步执行。
注:
如果使用固定步长解算器,则采样时间字段中的值必须是固定步长的整数倍。此限制不适用于可变步长求解器。
图表模拟
模拟图表时,会发生以下操作。
1 发生到状态A1的默认转换,其中包括将本地数据u1设置为1。
2 当输入A1时,功能队列被启用。
3 对队列的函数调用一直持续到(5,sec)后的条件为真。
4 发生从状态A1到B1的转变。
5 当A1退出时,功能队列被禁用。
6 再过两秒后,发生从B1到A1的转换。
重复步骤2至6,直到模拟结束。
变量被held时函数的行为
如果将States when enabling设置为held,则输出y1如下。
当状态A1在t=5时变为非活动状态时,Simulink函数保持计数器值。当A1在t=7时再次激活时,计数器的值与t=5时的值相同。因此,输出y1随着时间的推移继续增加。
变量重置时函数的行为
如果在启用重置时设置状态,则输出y1如下。
当状态A1在t=5时变为非活动状态时,Simulink函数不保存计数器值。当A1在t=7时再次激活时,计数器重置为零。因此,输出y1也重置。