Engee 文档

时间逻辑运算符

*时态逻辑运算符*是一种机制,用于指定有限自动机执行某些运算符的时刻。 在条件前/条件内和状态中的转换处设置:

condition action stateflow

用于.s

示例

在方括号内指定的过渡处、条件内和操作内a

сondition action 1

[source] ---- [ if at(10, tick) y = 10 end ] ----

与运算符组on 或朱莉娅代码一起的内部状态

сondition action 2

例如,您可以使用时态逻辑运算符和 "on "运算符组来随时间改变变量的值:

stateflow on after 1

在这里

  • 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 变为 05 秒或更长时间,则 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).
n
- 正整数或表达式。
tick` - 有限自动机的时钟。

如果相关状态自激活以来至少在 n 个时钟周期内保持激活状态,则返回 true。否则返回 false

[源代码,julia].

after(3,tick)[x>3]

当状态块被激活至少三次后,退出当前状态,条件是 x > 3

after(n,sec)after(n,msec)after(n,usec).
n "为正实数或表达式的求值结果。
sec "是秒。
msec` - 毫秒。
usec - 微秒。

如果当前状态激活后至少经过了 n 个时间单位,则返回 true。否则返回 false

[源代码,julia].

[after(1,tick) || x > 5]

after(10,tick)[x > 5]

after(n, tick){y = 20;}

after(2, sec)[x < 3]{y = 0;}

为了更好地理解所给出的示例,请考虑:

after(4,sec)[x > 10]

如果变量 x 的值大于 10,且自转换开始后已过去了 4 秒,则变量 y 的值将递增 1。

at 变量

at 是一个运算符,用于检查某个操作是否在某个时间点发生。它的语法如下

语法^h 说明^h 示例

at(n, tick).
n` - 正整数或表达式。
tick` - 有限自动机的时钟。

如果相关状态自激活以来在整整 n 个时钟周期内保持激活状态,则返回 true。否则返回 false

[源代码,julia].

at(5, tick)[y < 3]

为了更好地理解所给出的示例,请参考

at(4, tick) [x < 7] {y = 8}

如果在关联状态激活后的第 4 个时钟周期内,x 变量的值小于`7`,那么`y` 变量将被赋值为`8`。

之前

before 是一个操作符,用于检查某个操作是否发生在指定时间点之前。它的语法如下

语法^h 说明^h 示例

before(n, sec) before(n, msec) before(n, usec)
n - 正实数或表达式的求值结果。
sec - 秒。
msec - 毫秒。
usec - 微秒。

如果当前状态开始运行后经过的时间少于 n 个单位,则返回 true。否则返回 false

[源代码,julia].

before(3, sec)[x < 5]

如果当前状态开始运行的时间少于 3 秒(条件是 x < 5),则会发生转换。

before(n, tick).
n - 一个正整数或表达式。
tick"-有限自动机的时钟周期。

如果关联状态自激活起保持激活状态的时间少于 n 个时钟周期,则返回 true。否则返回 false

[源代码,julia].

before(4, tick)[y > 2]

before(n, sec){z = 0;}

before(1, msec)[x != 10]{y = 2;}

为了更好地理解所给出的示例,请考虑:

before(5, sec)[x >= 8]

如果状态激活后经过的时间少于 5 秒,且变量 x 的值大于或等于 8,就会发生转换。

count.

count 是一个运算符,用于计算自传递的布尔表达式变为 true 后,相关状态块被执行的次数。count 操作符的语法如下:

语法^h 说明^h 示例

count(condition)`。
condition "是布尔表达式。

返回表达式 n 为真且相关状态保持激活状态后的状态机时钟周期数。

[源代码,julia].

[count(x > 2) = 3]

如果变量 x 的值在关联状态被激活后一直大于两个正好为 3 的时钟周期,则发生转换。

持续时间

duration 是一个运算符,用于检查某一条件在多长时间内保持为真。duration 操作符的语法如下:

语法^h 说明^h 示例

duration(condition)`。
condition "是一个随时间变化的布尔表达式。

返回自 condition 变为 true 以来已过去的时间单位数。如果条件为假,则返回 0

[来源,朱莉娅].

duration(x > 5) > 3

如果从 x 变为大于 5 起经过的时间超过 3 秒,就会发生转换。

`elapsed, et

elapsed (et) 是一个运算符,用于记录状态被激活后经过的时间。elapsed 运算符的语法如下:

语法^h 说明^h 示例

et(sec) et(msec) et(usec)

elapsed(sec)elapsed(msec)elapsed(sec) 。 elapsed(usec)`。

返回相关状态激活后所经过的时间单位数。

[源代码,朱莉娅].

elapsed(sec) >= 3

如果状态激活后已过去 3 秒或更长时间,则会发生转换。

每次

every 是一个操作符,有助于以给定频率执行操作。它的语法如下

语法^h 说明^h 示例

每(n, tick)
n
- 正整数或表达式。
tick` - 有限自动机的时钟。

如果相关状态被激活后的时钟周期数是 n 的倍数,则返回 true

[源代码,朱莉娅].

every(3, tick)

为了更好地理解所给出的示例,请参考

every(4, tick)[a < 5]{b = 10}

如果关联状态激活后每隔四个时钟周期,a 变量的值小于`5`,b 变量就会被赋值为`10`。

t,getSimulationTime`。

t(getSimulationTime) 是一个运算符,用于跟踪当前的模拟时间。它的语法如下

语法^h 说明^h 示例

t

获取模拟时间

返回模拟开始后的时间(以秒为单位)。

[源代码,julia].

t >= 5

如果当前模拟时间达到或超过 5 秒,则会发生转换。

temporalCount.

temporalCount 是一个运算符,用于计算相关状态被激活后所经历的时钟周期或时间。temporalCount 运算符的语法如下:

语法^h 语法描述^h 示例

temporalCount(tick)`。

返回相关状态被激活后状态机的 ticks 数。

[源代码,julia].

temporalCount(tick)

temporalCount(sec)。 temporalCount(msec)。 temporalCount(usec)`。

返回相关状态被激活后所经过的指定时间单位的数目。

[源代码,julia].

temporalCount(msec)

以毫秒为单位返回关联状态被激活后经过的时间。