时间逻辑运算符
*时间逻辑运算符*是指定有限自动机必须执行的时刻的机制 某些Julia语言运算符,并设置在条件之前/内部和状态中的转换处:

使用它们的地方 |
例子: <.^/在转换、内部条件以及方括号中指定的内部操作上 |
|
例如,使用时态逻辑运算符和一组运算符 上 您可以随时间更改变量的值:

这里:
-
en,du:y=x-当进入状态A时,当它处于活动状态时,变量y值进行赋值x. 立即执行此操作,并在状态处于活动状态时重复执行此操作。 -
在(2.5秒)之后:y=0-如果状态A处于活动状态2.5或更多秒,则y变得相等0. -
在(5,秒)之后:y=-1-如果状态A处于活动状态5或更多秒,则y变得相等-1.
以下时态逻辑运算符在*Engee中可用*:
-
之后—在设定数量的操作或时间后触发。 例如,后(5,秒)激活过渡通过5当前状态开始后几秒钟; -
在—它在特定步骤触发。 例如,在(10,蜱)当关联状态具有一组运算符时,在步骤中将为true期间它将执行第十次(从一开始计数); -
以前-保持为真,直到达到某个时间点或状态机的循环次数。 例如,前(3,秒)它一直工作到过去3从关联状态激活的那一刻起的秒; -
计数-计数自参数中的布尔表达式变为true以来状态块被执行的次数。 例如,命令在(10,刻度):y=计数(真)赋值变量y意义10如果状态在活动期间10状态机的步骤。; -
[持续时间]是运算符的模拟
计数,但它不是步骤数,而是返回指定布尔表达式保持true的时间。 例如,命令on after(10,sec):y=持续时间(true,sec)会赋值给一个变量y越来越大的价值观10如果状态在之后保持活动状态10激活后几秒钟; -
[elased-et]—返回自进入当前状态以来经过的时间。 例如,
et>=2如果状态已激活两秒或更长时间,则为true。; -
每个-它在状态机的设定步骤之后触发,而关联的状态保持活动状态。 例如,如果关联状态为活动状态10步骤,则每(3,刻度):y+=1连续三次递增变量y每单位。 -
t,getSimulationTime-返回当前模拟时间。 例如,t>=10如果模拟时间已经达到,这将是真实的10秒数; -
临时人数是一个计数器,可帮助您跟踪状态机已完成多少步骤或状态保持活动状态时已过了多少时间。 例如,挑战临时计数(刻度)显示状态机处于此状态的步骤数。 及使用临时计数(秒)返回自激活此状态以来已过了多少秒。
之后
*after*是在转换上实现时态逻辑的运算符。 它有两个看涨期权:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
申报表 |
after(3,tick)[x>3] 当块自状态变为活动状态以来至少三次被激活时,从当前状态退出,条件是 |
|
申报表 |
[after(1,tick) || x > 5]
after(10,tick)[x > 5]
after(n, tick){y = 20;}
after(2, sec)[x < 3]{y = 0;}
为了更好地理解给出的示例,请考虑:
如果变量的值为 |
在
*at*是检查某个动作是否在某个时间点发生的运算符。 它具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
申报表 |
at(5, tick)[y < 3] 为了更好地理解给出的示例,请考虑:
如果,在第4时钟周期的执行期间从关联状态的激活的时刻起,变量的值 |
以前
*before*是检查动作是否在指定时间之前发生的运算符。 它具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
申报表 |
before(3, sec)[x < 5] 如果自状态激活以来已经过了不到3秒,则会发生转换,前提是 |
|
申报表 |
before(4, tick)[y > 2]
before(n, sec){z = 0;}
before(1, msec)[x != 10]{y = 2;}
为了更好地理解给出的示例,请考虑:
如果经过的时间较少,则会发生转换。 |
计数
*count*是一个运算符,它计算从传递的布尔表达式变为真的那一刻起关联状态块的执行次数。 *Count*运算符具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
返回自表达式以来经过的状态机时钟周期数 |
[count(x > 2) = 3] 如果变量的值发生转换 |
持续时间
*持续时间*是一个运算符,用于检查特定条件保持为真的时间。 *Duration*运算符具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
返回自该时刻以来已过的时间单位数。 |
duration(x > 5) > 3 如果超过 |
经过,et
*elapsed(et)*是一个运算符,用于跟踪自激活状态以来经过了多少时间。 *Elased*运算符具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
或
|
返回自关联状态变为活动状态以来经过的时间单位数。 |
elapsed(sec) >= 3 如果状态激活后已经过了3秒或更长时间,则会发生转换。 |
每个
*every*是一个运算符,可帮助您以指定的频率执行操作。 它具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
|
申报表 |
every(3, tick) 为了更好地理解给出的示例,请考虑:
如果自激活关联状态以来每四个时钟周期,变量的值 |
t,getSimulationTime
*t(getSimulationTime)*是跟踪当前仿真时间的运算符。 它具有以下语法:
| 语法 | 资料描述 | 例子: |
|---|---|---|
或
|
返回自模拟开始以来的时间(以秒为单位)。 |
t >= 5 如果当前仿真时间已达到5秒或更长时间,则会发生转换。 |

