时间逻辑运算符
*时态逻辑运算符*是一种机制,用于指定有限自动机执行某些运算符的时刻。 在条件前/条件内和状态中的转换处设置:
用于.s |
示例 |
在方括号内指定的过渡处、条件内和操作内a |
[source] ---- [ if at(10, tick) y = 10 end ] ---- |
与运算符组on 或朱莉娅代码一起的内部状态 |
例如,您可以使用时态逻辑运算符和 "on "运算符组来随时间改变变量的值:
在这里
-
en, du: y = x
- 当进入状态 A 并处于激活状态时,变量y
被赋值为x
。此操作会立即执行,并在状态激活时重复执行。 -
on after(2.5, sec): y = 0
- 如果状态 A 启用了2.5
秒或更长时间,则y
变为0
。 -
on after(5, sec): y = -1
- 如果状态 A 启用了5
秒或更长时间,则y
变为0
。5
秒或更长时间,则y
变为-1
。
在 Engee 中有以下时态逻辑运算符:
-
`之后-
after(5, sec)
在指定的动作或次数后触发。例如,`after(5, sec)`在当前状态开始后`5`秒激活一个过渡; -
at
变量- 在特定步骤触发。例如,at(10, tick)
将在相关状态的一组during
语句执行到第 10 次(计数从 1 开始)时为真; -
之前- 在达到某个时间点或状态机时钟周期数之前一直为真。例如,"before(3, sec) "在关联状态被激活 3 秒后才会触发;
-
count
.- 计算参数中的逻辑表达式为真后状态块被执行的次数。例如,命令on at(10, tick): y = count(true)`将在状态已被激活 10 个状态机步数的情况下为`y`变量赋值`10
…..; -
持续时间- 与
count
运算符类似,但它返回的不是步数,而是指定逻辑表达式保持为真的时间。例如,命令on after(10, sec): y = duration(true, sec)
将为变量y
赋值,如果状态机在激活后`10`秒仍处于激活状态,则变量y
的值将大于`10`; -
`elapsed, et- 返回当前状态进入后的时间。例如,如果状态已激活两秒或更长时间,
et >= 2
将为 true; -
每次- 只要关联状态保持激活状态,就会在给定的状态机步数后触发。例如,如果关联状态活动了
10
步,on every(3, tick): y += 1
将连续三次将变量y
递增 1。 -
t,getSimulationTime`。- 返回当前模拟时间。例如,如果模拟时间已达到
10`秒,则 `t >= 10
为 true; -
temporalCount
.- 是一个计数器,用于记录状态机完成了多少步或状态保持激活状态的时间。例如,调用temporalCount(tick)
会显示状态机在此状态下已走了多少步。而使用temporalCount(sec)
则会返回该状态被激活后已经过去了多少秒。
`之后
after 是一个在转换上实现时态逻辑的操作符。它有两种调用方式:
语法^h | 说明^h | 示例 |
---|---|---|
after(n,tick) |
如果相关状态自激活以来至少在 |
[源代码,julia]. after(3,tick)[x>3] 当状态块被激活至少三次后,退出当前状态,条件是 |
|
如果当前状态激活后至少经过了 |
[源代码,julia]. [after(1,tick) || x > 5] after(10,tick)[x > 5] after(n, tick){y = 20;} after(2, sec)[x < 3]{y = 0;} 为了更好地理解所给出的示例,请考虑:
如果变量 |
at
变量
at 是一个运算符,用于检查某个操作是否在某个时间点发生。它的语法如下
语法^h | 说明^h | 示例 |
---|---|---|
|
如果相关状态自激活以来在整整 |
[源代码,julia]. at(5, tick)[y < 3] 为了更好地理解所给出的示例,请参考
如果在关联状态激活后的第 4 个时钟周期内, |
之前
before 是一个操作符,用于检查某个操作是否发生在指定时间点之前。它的语法如下
语法^h | 说明^h | 示例 |
---|---|---|
|
如果当前状态开始运行后经过的时间少于 |
[源代码,julia]. before(3, sec)[x < 5] 如果当前状态开始运行的时间少于 3 秒(条件是 |
|
如果关联状态自激活起保持激活状态的时间少于 |
[源代码,julia]. before(4, tick)[y > 2] before(n, sec){z = 0;} before(1, msec)[x != 10]{y = 2;} 为了更好地理解所给出的示例,请考虑:
如果状态激活后经过的时间少于 |
count
.
count 是一个运算符,用于计算自传递的布尔表达式变为 true 后,相关状态块被执行的次数。count 操作符的语法如下:
语法^h | 说明^h | 示例 |
---|---|---|
count(condition)`。 |
返回表达式 |
[源代码,julia]. [count(x > 2) = 3] 如果变量 |
持续时间
duration 是一个运算符,用于检查某一条件在多长时间内保持为真。duration 操作符的语法如下:
语法^h | 说明^h | 示例 |
---|---|---|
duration(condition)`。 |
返回自 |
[来源,朱莉娅]. duration(x > 5) > 3 如果从 |
`elapsed, et
elapsed (et) 是一个运算符,用于记录状态被激活后经过的时间。elapsed 运算符的语法如下:
语法^h | 说明^h | 示例 |
---|---|---|
或
|
返回相关状态激活后所经过的时间单位数。 |
[源代码,朱莉娅]. elapsed(sec) >= 3 如果状态激活后已过去 3 秒或更长时间,则会发生转换。 |
每次
every 是一个操作符,有助于以给定频率执行操作。它的语法如下
语法^h | 说明^h | 示例 |
---|---|---|
每(n, tick) |
如果相关状态被激活后的时钟周期数是 |
[源代码,朱莉娅]. every(3, tick) 为了更好地理解所给出的示例,请参考
如果关联状态激活后每隔四个时钟周期, |
t,getSimulationTime`。
t(getSimulationTime) 是一个运算符,用于跟踪当前的模拟时间。它的语法如下
语法^h | 说明^h | 示例 |
---|---|---|
或 获取模拟时间 |
返回模拟开始后的时间(以秒为单位)。 |
[源代码,julia]. t >= 5 如果当前模拟时间达到或超过 5 秒,则会发生转换。 |
temporalCount
.
temporalCount 是一个运算符,用于计算相关状态被激活后所经历的时钟周期或时间。temporalCount 运算符的语法如下:
语法^h | 语法描述^h | 示例 |
---|---|---|
temporalCount(tick)`。 |
返回相关状态被激活后状态机的 ticks 数。 |
[源代码,julia]. temporalCount(tick) |
temporalCount(sec) |
返回相关状态被激活后所经过的指定时间单位的数目。 |
[源代码,julia]. temporalCount(msec) 以毫秒为单位返回关联状态被激活后经过的时间。 |