必威体育Betway必威体育官网
当前位置:首页 > IT技术

stateflow基础知识之(时序逻辑)

时间:2019-08-18 13:15:24来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

stateflow

  stateflow状态转移和动作过程中,可以使用两种类型的时序逻辑:基于事件和绝对时间。基于事件的时序逻辑可跟踪重复发生的事件,绝对时间时序逻辑则基于 Stateflow 图的仿真时间定义时间段。要对这些重复事件或仿真时间进行操作,可以使用称为时序逻辑操作符的内置函数

tateflow可实现时序逻辑,通过时间控制stateflow图的执行,包括基于事件的时序逻辑和绝对时间的时序逻辑。

操作符

语法

说明

after

after(n, E)

E 是 after 操作符的基础事件;n 可以是:

·  正整数

·   计算结果为正整数值的表达式

如果基础事件 E 自关联状态激活后至少已发生 n 次,则返回 true。否则,操作符返回 false。

在不包含输入事件的 Stateflow 图中,如果图自关联状态激活后已唤醒 n 次或更多次,after(n, tick) 或 after(n, wakeup) 会返回 true。

每次关联状态重新激活时,请将 E 的计数器重置为 0。

before

before(n, E)

E 是 before 操作符的基础事件;n 可以是:

·  正整数。

·  计算结果为正整数值的表达式。

如果基础事件 E 自关联状态激活后发生次数少于 n 次,则返回 true。否则,操作符返回 false。

在不包含输入事件的 Stateflow 图中,如果 Stateflow 图自关联状态激活后唤醒次数少于 n 次,则 before(n, tick) 或 before(n, wakeup) 会返回 true。

每次关联状态重新激活时,请将 E 的计数器重置为 0。

at

at(n, E)

E 是 at 操作符的基础事件;n 可以是:

· 正整数。

·  计算结果为正整数值的表达式。

仅当基础事件 E 自关联状态激活后发生第 n 次时,才返回 true。否则,操作符返回 false。

在不包含输入事件的 Stateflow 图中,如果 Stateflow 图自关联状态激活后已唤醒第 n 次,at(n, tick) 或 at(n, wakeup) 将返回 true。

每次关联状态重新激活时,请将 E 的计数器重置为 0。

every

every(n, E)

E 是 every 操作符的基础事件;n 可以是:

·  正整数。

·  计算结果为正整数值的表达式。

当基础事件 E 自关联状态激活后每发生 n次时,返回 true。否则,操作符返回 false。

在不包含输入事件的 Stateflow 图中,当图自关联状态激活后唤醒 n 的整数倍次数时,every(n, tick) 或 every(n, wakeup) 会返回 true。

每次关联状态重新激活时,请将 E 的计数器重置为 0。因此,此操作符只适用于状态操作,而不适用于转移。

temporalCount

temporalCount(E)

E 是 temporalCount 操作符的基础事件。

自关联状态激活后,基础事件 E 每发生一次,值递增 1,并返回正整数。否则,操作符返回 0 值。

每次关联状态重新激活时,请将 E 的计数器重置为 0。

以下示例说明了基于事件的时序逻辑在状态动作和转移中的使用。

操作符

用法

示例

说明

after

状态动作

(on after)

on after(5, CLK): status('on');

每次 CLK 循环期间会出现一条状态消息,从状态激活后开始 5 个时钟周期。

after

转移

ROTATE[after(10, CLK)]

仅在广播 ROTATE 事件但不早于状态激活后的 10 个 CLK 循环时,才会发生转出关联状态的转移。

before

状态动作

(on before)

on before(MAX, CLK): temp++;

temp 变量在每次 CLK 循环时递增一次,直到状态达到 MAX 限制。

before

转移

ROTATE[before(10, CLK)]

只在广播 ROTATE 事件但不晚于状态激活后的 10 个 CLK 循环时,才会发生转出关联状态的转移。

at

状态动作

(on at)

on at(10, CLK): status('on');

状态消息会在状态激活后的正好 10 个 CLK 循环时出现。

at

转移

ROTATE[at(10, CLK)]

仅在广播 ROTATE 事件且正好在状态激活后的 10 个 CLK 循环时,才会发生转出关联状态的转移。

every

状态动作

(on every)

on every(5, CLK): status('on');

状态激活后,每 5 个 CLK 循环会出现一条状态消息。

temporalCount

状态动作

(during)

du: y = mm[temporalCount(tick)];

此动作会对状态激活后的时钟时间进行计数并返回整数值。然后,该动作会为变量 y 赋予 mm 数组的值,该数组的索引是 temporalCount 操作符返回的值。

stateflow中每个状态有两种形式:OR和AND,设置方式为:点击需要设置状态模式的状态,右键选择该状态内部的子状态的运行方式。如果为OR,则需要选择内部子状态执行的顺序,如果为AND则表示状态激活时,内部的子状态将同时被激活,处于并行模式。并行状态一般与stateflow的广播相关,具体可以参考广播的内容

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读