前页 后页

守卫与特效

防护和效果用于控制仿真流程并在仿真过程中执行其他动作或效果。

守卫与特效

概念

详情

也可以看看

守卫

防护是条件语句,只要模拟器必须确定下一步要采取的路径,就会对它进行评估。警卫通常具有以下特征:

  • 定义过渡和控制流以控制仿真的进行方式
  • 用JavaScript编写
  • 可以引用模拟期间定义的变量
用Javascript动态仿真

增加警卫

在所选属性的“属性”对话框的“转换”或“控制流”中定义了防护。 Guard通常是一段JavaScript,其评估结果为True或False。例如,这是一个条件语句,它引用当前变量(Balance)大于零。注意,使用前缀this表示变量是当前Class上下文的成员。

Guard Composition using Javascript

评估语义

在执行期间,模拟器将检查所有可能的前进路径并评估任何防护条件。评估可以确定:

  • 一条有效的前向路径的评估结果为True;模拟器将遵循该路径
  • 存在两个有效路径; Simulator将阻止,等待通过控制台窗口进行一些手动输入以解决死锁
  • 没有有效的路径;与找到两个路径时的响应相同-模拟器等待用户使用控制台窗口更改执行上下文
  • 没有路径评估为True,但是存在默认值(无保护的路径);模拟器将采取不受保护的路径

特效

效果是在特定时间执行的已定义行为:

  • 进入州
  • 在退出状态时
  • 从一种状态过渡到另一种状态时(过渡效果)
效果可以是一段JavaScript代码,也可以是当前模拟中对另一个Behavior元素的调用。

JavaScript特效

JavaScript效果可能类似于此示例,其中Balance变量递减:

Composing the effect of a transition using Javascript

通话行为影响

在此示例中,效果是通话行为效果。在这种情况下,它将模型调用在其他地方定义的名为递减余额的活动。然后,仿真将进入该图/行为,并继续执行,直到返回到调用效果的位置。

Specifying CallBehaviors as Effects

效果执行顺序

在复杂的模拟中,可能涉及在不同的父上下文中从深层嵌套状态过渡到其他深层嵌套状态,重要的是要考虑以下有关执行顺序的规则:

  • 离开嵌套上下文时遇到的所有退出动作(效果)将按照从最深层嵌套到最深层嵌套的顺序执行
  • 接下来执行在过渡上定义的所有动作(效果)
  • 最后,所有条目效果都从嵌套最浅的上下文到嵌套最深的上下文执行
因此,基本规则是:所有退出动作,然后是所有过渡动作,最后是所有进入动作。

关于JavaScript变量的注意事项

在Simulation执行期间要访问和引用的JavaScript变量属于以下任何一个:

  • sim(例如sim.pedestrianwaiting)-通常用于全局模拟变量,或者
  • this(例如this.CustomerNumber)-通常用于引用拥有的Class属性
重要的是要让JavaScript引擎知道您是在指的是Simulation变量,而不是在基本计算过程中使用的简单局部变量。您可以创建任意范围和深度的Simulation变量-例如,this.customer.name是合法的限定名称。

学到更多