Engee 文档

时间逻辑运算符

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

condition action stateflow cn

使用它们的地方

例子: <.^/在转换、内部条件以及方括号中指定的内部操作上

condition action 1

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

<.^/内部状态与一组运算符一起 on或在Julia代码中

condition action 2

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

stateflow on after 1

这里:

  • 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*是在转换上实现时态逻辑的运算符。 它有两个看涨期权:

语法 资料描述 例子:

后(n,tick) 通行证:q[<br>] n -正整数或表达式。 通行证:q[<br>] 蜱虫 -有限状态机的时钟周期。

申报表 真的 如果关联状态保持活动状态至少 n 从其激活的那一刻起循环。 否则,它返回 错误.

after(3,tick)[x>3]

当块自状态变为活动状态以来至少三次被激活时,从当前状态退出,条件是 x>3.

后(n,秒) 后(n,msec) 后(n,usec) 通行证:q[<br>] n -正实数或计算表达式的结果。 通行证:q[<br>] 证券交易委员会 -等一下 通行证:q[<br>] msec -毫秒。 通行证:q[<br>] usec -微秒。

申报表 真的,如果自当前状态变为活动状态以来至少已经过了一年。 n 时间单位。 否则,它返回 错误.

[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 增加一个。

*at*是检查某个动作是否在某个时间点发生的运算符。 它具有以下语法:

语法 资料描述 例子:

在(n,tick) 通行证:q[<br>] n -正整数或表达式。 通行证:q[<br>] 蜱虫 -有限状态机的时钟周期。

申报表 真的 如果关联状态完全保持活动状态 n 从其激活的那一刻起循环。 否则,它返回 错误.

at(5, tick)[y < 3]

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

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

如果,在第4时钟周期的执行期间从关联状态的激活的时刻起,变量的值 x 原来是少了 7,则变量 y 值将被赋值 8.

以前

*before*是检查动作是否在指定时间之前发生的运算符。 它具有以下语法:

语法 资料描述 例子:

前(n,sec) 前(n,msec) 前(n,usec) 通行证:q[<br>] n -正实数或计算表达式的结果。 通行证:q[<br>] 证券交易委员会 -等一下 通行证:q[<br>] msec -毫秒。 通行证:q[<br>] usec -微秒。

申报表 真的 如果它已经小于 n 自当前状态变为活动状态的时刻起的时间单位。 否则,它返回 错误.

before(3, sec)[x < 5]

如果自状态激活以来已经过了不到3秒,则会发生转换,前提是 x<5.

之前(n,tick) 通行证:q[<br>] n -正整数或表达式。 通行证:q[<br>] 蜱虫 -有限状态机的时钟周期。

申报表 真的 如果关联状态保持活动状态的时间小于 n 从其激活的那一刻起循环。 否则,它返回 错误.

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*运算符具有以下语法:

语法 资料描述 例子:

计数(条件) 通行证:q[<br>] 条件 -一个逻辑表达式。

返回自表达式以来经过的状态机时钟周期数 n 它成为事实,而关联状态保持活动状态。

[count(x > 2) = 3]

如果变量的值发生转换 x 还剩下两个以上 3 自关联状态的激活以来时钟周期一直在运行。

持续时间

*持续时间*是一个运算符,用于检查特定条件保持为真的时间。 *Duration*运算符具有以下语法:

语法 资料描述 例子:

持续时间(条件) 通行证:q[<br>] 条件 -随时间跟踪的逻辑表达式。

返回自该时刻以来已过的时间单位数。 条件 它变成了现实。 如果条件为false,则返回 0.

duration(x > 5) > 3

如果超过 3 从那一刻起的几秒钟 x 还有更多 5.

经过,et

*elapsed(et)*是一个运算符,用于跟踪自激活状态以来经过了多少时间。 *Elased*运算符具有以下语法:

语法 资料描述 例子:

et(秒) et(msec) et(usec)

经过(秒) 经过(msec) 经过(usec)

返回自关联状态变为活动状态以来经过的时间单位数。

elapsed(sec) >= 3

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

每个

*every*是一个运算符,可帮助您以指定的频率执行操作。 它具有以下语法:

语法 资料描述 例子:

每个(n,tick) 通行证:q[<br>] n -正整数或表达式。 通行证:q[<br>] 蜱虫 -有限状态机的时钟周期。

申报表 真的 如果自关联状态的激活以来经过的时钟周期数是 n.

every(3, tick)

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

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

如果自激活关联状态以来每四个时钟周期,变量的值 a 原来少了 5,则赋值一个变量 b 价值 10.

t,getSimulationTime

*t(getSimulationTime)*是跟踪当前仿真时间的运算符。 它具有以下语法:

语法 资料描述 例子:

t

获得传真时间

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

t >= 5

如果当前仿真时间已达到5秒或更长时间,则会发生转换。

临时人数

*temporalCount*是一个运算符,用于计算自关联状态激活以来的时钟周期数或经过的时间。 *TemporalCount*运算符具有以下语法:

语法 资料描述 例子:

临时计数(刻度)

返回自激活关联状态以来经过的状态机时钟周期数。

temporalCount(tick)

临时计数(秒) 临时计数(msec) 临时人数(usec)

返回自激活关联状态以来经过的指定时间单位数。

temporalCount(msec)

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

有用的连结