使用时序逻辑执行控制图

什么是时序逻辑?

时序逻辑根据时间控制图表的执行。在状态操作和转换中,可以使用两种类型的时间逻辑:基于事件的时间和绝对时间。基于事件的时间逻辑跟踪重复发生的事件,绝对时间时间逻辑根据图表的模拟时间定义时间段。要对这些重复发生的事件或模拟时间进行操作,可以使用称为时间逻辑运算符的内置函数。

时序逻辑运算符使用规则

时序逻辑运算符只能出现在:
状态操作
源自状态的Transition
当完整过渡路径连接两个状态时,源自连接点的Transitions段
每个时态逻辑运算符都有一个相关的状态:动作出现的状态或转换产生的状态。
使用事件表示法在状态操作中表达基于事件的时序逻辑。
可以使用任何显式或隐式事件作为时态运算符的基事件。基本事件是一个时间运算符对其进行操作的重复事件。
对于没有输入事件的图表,可以使用刻度或唤醒事件来表示图表唤醒的隐含事件。
使用关键字sec、msec或usec之一来定义自激活状态以来经过的模拟时间(以秒、毫秒或微秒为单位)。这些关键字仅在状态操作和源自状态的转换中有效。
由于以下原因,请使用绝对时间-时间逻辑而不是隐式勾选事件:
使用绝对时间-时间逻辑的延迟表达式与模型的采样时间无关。但是,刻度事件取决于采样时间。
绝对时间-时间逻辑在具有函数调用输入事件的图表中工作。勾选事件在具有函数调用输入的图表中不起作用。
基于事件的时态逻辑算子
对于基于事件的时态逻辑,请使用此表中描述的运算符。

操作符语法描述
afterafter(n, E) E是after运算符的基本事件,n是一个正整数如果基本事件E自激活关联状态以来至少发生了n次,则返回true。否则,运算符返回false。 在没有输入事件的图表中,如果图表自激活相关状态以来已唤醒n次或更多次,则after(n,tick)或after(n,wakeup)返回true。 每当关联状态重新激活时,将E的计数器重置为0。
beforebefore(n, E) E是before运算符的基本事件,n是一个正整数。如果自激活关联状态以来基本事件E发生的次数少于n次,则返回true。否则,运算符返回false。 在没有输入事件的图表中,如果图表自激活相关状态以来唤醒次数少于n次,则before(n,tick)或before。 每当关联状态重新激活时,将E的计数器重置为0。
atat(n, E) E是at运算符的基本事件,n为一个正整数。仅在关联状态激活后第n次出现基本事件E时返回true。否则,运算符返回false。在没有输入事件的图表中,如果图表自激活相关状态以来第n次唤醒,则at(n,tick)或at(n,wakeup)返回true。 每当关联状态重新激活时,将E的计数器重置为0
everyevery(n, E) E是every运算符的基本事件,n是一个正整数。自激活关联状态以来,基本事件E每第n次出现时返回true。否则,运算符返回false。在没有输入事件的图表中,如果图表自激活相关状态以来已唤醒整数n次,则every(n,tick)或every(n,wakeup)返回true。每当关联状态重新激活时,将E的计数器重置为0。因此,此运算符仅在状态操作中有用,而在转换中不有用
temporalCounttemporalCount(E) E是temporalCount运算符的基本事件。递增1,并为激活相关状态后发生的基本事件E的每次出现返回一个正整数值。否则,运算符返回值0。每次重新激活关联状态时,都会将E的计数器重置为0。

基于事件的时态逻辑的表示法

可以使用两种符号中的一种来表示基于事件的时间逻辑。

事件符号

使用事件表示法定义仅依赖于基本事件的状态操作或转换条件。
事件表示法遵循以下语法:
tlo(n, E)[C]
tlo是一个布尔时态逻辑运算符(after、before、at或every)
n是运算符的出现次数
E是运算符的基本事件
C是可选的条件表达式

条件表示法
使用条件表示法定义依赖于基本事件和非基本事件的转换条件。
条件表示法遵循以下语法:
E1[tlo(n, E2) && C]
E1是任何非基本事件
tlo是一个布尔时态逻辑运算符(after、before、at或every)
n是运算符的出现次数
E2是操作员的基本事件
C是可选的条件表达式

事件和条件符号示例

符号用法示例描述
EventState action(on after)on after(5, CLK): temp = WARM;在激活状态 5个CLK循环后,温度变量变为WARM。
EventTransitionafter(10, CLK)[temp == COLD]如果温度变量为COLD,但不早于状态激活后的10个CLK循环,则会发生从关联状态的转换。
ConditionalTransitionON[after(5, CLK) && temp == COLD]从关联状态的转换仅在on事件的广播时发生,但不早于状态激活后的5个CLK周期,并且仅当温度变量为COLD时发生。

绝对时间-时序逻辑的操作符

对于绝对时间-时序逻辑,请使用此表中描述的运算符。

操作符语法描述
afterafter(n, sec) after(n, msec) after(n, usec) n是任何正数或表达式。sec、msec和usec是表示自激活相关状态以来经过的模拟时间的关键字。如果自激活关联状态以来经过了n个指定的秒(sec)、毫秒(msec)或微秒(usec)模拟时间,则返回true。否则,运算符返回false。 每次关联状态重新激活时,将计数器的秒、毫秒和usec重置为0
beforebefore(n, sec) before(n, msec) before(n, usec)如果自激活关联状态以来经过的模拟时间少于n个指定的秒(sec)、毫秒(msec)或微秒(usec),则返回true。否则,运算符返回false。关联状态重新激活时,将计数器的秒、毫秒和usec重置为0
temporalCounttemporalCount(sec) temporalCount(msec) temporalCount(usec) sec、msec和usec是表示自激活相关状态以来经过的模拟时间的关键字。统计并返回自激活关联状态以来经过的指定秒(秒)、毫秒(毫秒)或微秒(微秒)的模拟时间。 每次关联状态重新激活时,将计数器的秒、毫秒和usec重置为0。
elapsedelapsed(sec) 相当于temporalCount(秒)。返回自激活关联状态以来经过的模拟时间(秒)。 每次重新激活关联的状态时,将计数器的秒重置为0。相当于temporalCount(秒)。返回自激活关联状态以来经过的模拟时间(秒)。 每次重新激活关联的状态时,将计数器的秒重置为0。
durationduration(C)返回条件表达式C变为true后的秒数。如果条件表达式变为false,则会重置持续时间运算符。如果在一个状态中使用持续时间运算符,则在输入包含该运算符的状态时会将其重置。如果在转换中使用持续时间运算符,则在输入该转换的源状态时会重置该运算符。

绝对时间-时序逻辑的例子

操作符用法示例描述
afterState action (on after)on after(12.3, sec): temp = LOW;自状态激活起经过12.3秒的模拟时间后,温度变量变为LOW。
afterTransitionafter(8, msec)自激活状态起经过8毫秒的模拟时间后,发生从相关状态的转换。
afterTransitionafter(5, usec)自激活状态起经过5微秒的模拟时间后,发生相关状态的转换。
beforeTransition[temp > 75 && before(12.34, sec)]如果可变温度超过75,并且自状态激活以来经过的时间不到12.34秒,则发生从相关状态的转换。
temporalCountState action(exit)ex: y = temporalCount(sec);此操作计数并返回状态激活和停用之间经过的模拟时间秒数。
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值