文档

使用时态逻辑执行控制图

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

时序逻辑运算符使用规则

  • 时间逻辑运算符只能出现在:

    • 国家的行为

    • 源于状态的转换

    • 当整个过渡路径连接两个状态时,产生于结点的过渡段

    请注意

    此限制意味着您不能在默认转换或流程图转换中使用时态逻辑运算符。

    每个时间逻辑运算符都有一个关联的状态,该状态是动作出现或转换产生的状态。

  • 使用事件表示法在状态操作中表达基于事件的时间逻辑。看到基于事件的时间逻辑符号

  • 可以使用任何显式或隐式事件作为时态运算符的基础事件。基本事件是一个重复发生的事件,时间运算符对其进行操作。

  • 对于没有输入事件的图表,可以使用蜱虫事件,表示图表唤醒的隐含事件。

  • 使用其中一个关键词证券交易委员会msec,或购买以秒、毫秒或微秒为单位定义从激活状态开始经过的模拟时间。这些关键字仅在状态操作和起源于状态的转换中有效。

    使用绝对时间时间逻辑代替隐式逻辑蜱虫事件发生的原因如下:

    • 使用绝对时间时间逻辑的延迟表达式与模型的采样时间无关。然而,蜱虫事件依赖于采样时间。

    • 绝对时间时间逻辑适用于具有函数调用输入事件的图表。的蜱虫事件在具有函数调用输入的图表中不起作用。

基于事件的时态逻辑的运算符

对于基于事件的时态逻辑,使用该表中描述的运算符。

操作符 语法 描述

后(n, E)

E的基础事件是操作员和n要么是:

  • 正整数

  • 求值为正整数值的表达式

返回真正的如果基础事件E至少发生了n关联状态激活后的时间。否则,操作符返回

在没有输入事件的图表中,后(n,蜱虫)返回真正的如果图表苏醒了n自激活关联状态以来的次数或次数。

重置计数器E当关联的状态重新激活时,为0。

在(n, E)

E的基础事件是操作员和n要么是:

  • 正整数。

  • 求值为正整数值的表达式。

返回真正的只有在nth基本事件的发生E自激活关联状态。否则,操作符返回

在没有输入事件的图表中,在(n,蜱虫)返回真正的如果图表已经被唤醒nth关联状态激活后的时间。

重置计数器E当关联的状态重新激活时,为0。

之前

之前(n, E)

E的基础事件是之前操作员和n要么是:

  • 正整数。

  • 求值为正整数值的表达式。

返回真正的如果基础事件E发生的次数少于n关联状态激活后的时间。否则,操作符返回

在没有输入事件的图表中,之前(n,蜱虫)返回真正的如果图表唤醒的次数少于n关联状态激活后的时间。

重置计数器E当关联的状态重新激活时,为0。

每一个

每一个(n, E)

E的基础事件是每一个操作员和n要么是:

  • 正整数。

  • 求值为正整数值的表达式。

返回真正的在每一个nth基本事件的发生E自激活关联状态。否则,操作符返回

在没有输入事件的图表中,每一个(n,蜱虫)返回真正的如果图表唤醒了一个整数倍的n关联状态激活后的时间。

重置计数器E当关联的状态重新激活时,为0。

temporalCount

temporalCount (E)

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

每次发生基本事件时,递增1并返回一个正整数E这发生在激活关联状态之后。否则,操作符返回值为0。

在没有输入事件的图表中,temporalCount(勾选)返回自激活关联状态以来图表被唤醒的次数。

重置计数器E当关联的状态重新激活时,为0。

可以使用引号将关键字括起来“滴答”.例如,“滴答”后(5)等于蜱虫后(5)

请注意

时态逻辑运算符比较阈值n到整数类型的内部计数器。如果n是通过使用不是2的整数幂的斜率或非零偏差定义的不动点数,则比较可能由于舍入而产生意外的结果。有关更多信息,请参见定点数据的关系运算

基于事件的时态逻辑示例

这些示例演示了基于事件的时态逻辑在状态操作和转换中的使用。

操作符 使用 例子 描述

国家行为(

on after(5,CLK):状态('on');

在每个过程中都会出现一个状态消息CLK周期,在激活状态后开始5个时钟周期。

过渡

CLK旋转[后(10日))

对象的广播时才发生脱离关联状态的转换旋转事件,但不早于10CLK激活状态后的循环。

之前

国家行为(在之前

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

临时每个变量增量一次CLK循环,直到状态达到马克斯极限。

之前

过渡

CLK旋转[之前(10日))

对象的广播时才发生脱离关联状态的转换旋转事件,但不晚于10CLK激活状态后的循环。

国家行为(

on at(10,CLK):状态('on');

在10点正好出现一条状态消息CLK激活状态后的循环。

过渡

旋转((10,CLK))

对象的广播时才发生脱离关联状态的转换旋转事件,正好在10点CLK激活状态后的循环。

每一个

国家行为(在每一个

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

每5分钟出现一条状态信息CLK激活状态后的循环。

temporalCount

国家行为(

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

此操作计算并返回自激活状态以来已经过的滴答数的整数。然后,操作分配给变量y的值毫米数组的索引是对象的值temporalCount运营商的回报。

基于事件的时间逻辑符号

您可以使用两种表示法中的一种来表示基于事件的时态逻辑。

事件符号

使用事件表示法来定义仅依赖于基本事件的状态操作或转换条件。

事件表示法遵循以下语法:

tlo(n, E) [C]

在哪里

  • tlo为布尔时间逻辑运算符(之前,或每一个

  • n是运算符的出现计数吗

  • E算符的基事件是什么

  • C是可选条件表达式吗

有条件的符号

使用条件表示法来定义依赖于基本和非基本事件的转换条件。

条件表示法遵循以下语法:

E1 (tlo(n,E2) && C]

在哪里

  • E1是否有非基事件

  • tlo为布尔时间逻辑运算符(之前,或每一个

  • n是运算符的出现计数吗

  • E2算符的基事件是什么

  • C是可选条件表达式吗

事件和条件表示法的例子

符号 使用 例子 描述

事件

国家行为(

on after(5,CLK):温度= WARM;

临时变量就温暖的5CLK激活状态后的循环。

事件

过渡

after(10,CLK)[temp == COLD]

发生关联状态外的转换临时变量是但不能早于10年CLK激活状态后的循环。

有条件的

过渡

ON[在(5,CLK) && temp == COLD后]

对象的广播时才发生脱离关联状态的转换事件,但不早于5CLK周期激活后的状态,只有当临时变量是

请注意

您必须在状态操作中使用事件表示法,因为状态操作的语法不支持条件表示法。金宝app

绝对时间时间逻辑的运算符

对于绝对时间时间逻辑,使用该表中描述的运算符。

操作符 语法 描述

后(n, sec)

(n, msec之后)

后(n,购买)

n是任何正数或表达式。证券交易委员会msec,购买是表示自激活关联状态以来所经过的模拟时间的关键字。

返回真正的如果n自激活关联状态以来,模拟时间单位已经过。否则,操作符返回.以秒为单位指定模拟时间(证券交易委员会),毫秒(msec)或微秒(购买).

重置计数器证券交易委员会msec,购买当关联的状态重新激活时,为0。

之前

(n,秒前)

(n, msec之前)

之前(n,购买)

n是任何正数或表达式。证券交易委员会msec,购买是表示自激活关联状态以来所经过的模拟时间的关键字。

返回真正的如果少于n自激活关联状态以来,模拟时间单位已经过。否则,操作符返回.以秒为单位指定模拟时间(证券交易委员会),毫秒(msec)或微秒(购买).

重置计数器证券交易委员会msec,购买当关联的状态重新激活时,为0。

每一个

每一个(n, sec)

每一个(n,毫秒)

每一个(n,购买)

n是任何正数或表达式。证券交易委员会msec,购买是表示自激活关联状态以来所经过的模拟时间的关键字。

返回真正的每一个n自关联状态激活以来的模拟时间单位。否则,操作符返回.以秒为单位指定模拟时间(证券交易委员会),毫秒(msec)或微秒(购买).

重置计数器证券交易委员会msec,购买当关联的状态重新激活时,为0。

使用每一个作为一个绝对时间时间逻辑运算符,只支持在独立的图表中作为MATLAB执行金宝app®对象。

temporalCount

temporalCount (sec)

temporalCount(毫秒)

temporalCount(购买)

证券交易委员会msec,购买是表示自激活关联状态以来所经过的模拟时间的关键字。

计算并返回指定的秒数(证券交易委员会),毫秒(msec)或微秒(购买)自激活关联状态以来所经过的模拟时间。

重置计数器证券交易委员会msec而且购买当关联的状态重新激活时,为0。

运行

运行(sec)

相当于temporalCount (sec).返回以秒为单位的模拟时间(证券交易委员会),自关联状态激活以来已经过了。

重置计数器证券交易委员会当关联的状态重新激活时,为0。

数(C)

返回条件表达式后面的勾数,C,成为真正的.的如果条件表达式变为.如果运算符在一个状态中使用,当包含它的状态被进入时,它将被重置。如果操作符在转换上使用,则在该转换的源状态输入时重置该操作符。

在Simu金宝applink中®模型的值取决于步长。更改模型的求解器或步长会影响Stateflow的结果®包含操作符。

持续时间

持续时间(C)

返回条件表达式后的秒数,C,成为真正的.的持续时间如果条件表达式变为.如果持续时间运算符在一个状态中使用,当包含它的状态被进入时,它将被重置。如果持续时间操作符在转换上使用,则在该转换的源状态输入时重置该操作符。

可以使用引号将关键字括起来“秒”“msec”,“购买”.例如,后(5秒)等于后(5秒)

请注意

时态逻辑运算符比较阈值n到整数类型的内部计数器。如果n是通过使用不是2的整数幂的斜率或非零偏差定义的不动点数,则比较可能由于舍入而产生意外的结果。有关更多信息,请参见定点数据的关系运算

绝对时间时间逻辑的例子

这些例子说明了状态动作和转换中的绝对时间时间逻辑。

操作符 使用 例子 描述

国家行为(

on after(12.3,sec): temp = LOW;

从激活状态开始经过12.3秒的模拟时间后,临时变量就

过渡

后(8毫秒)

从激活状态开始,经过8毫秒的模拟时间后,发生从关联状态的转换。

过渡

后(购买)

从激活状态开始,经过5微秒的模拟时间后,将发生从关联状态的转换。

之前

过渡

[temp > 75 && before(12.34,sec)]

如果变量临时超过75并且从激活状态到现在所经过的时间小于12.34秒,将发生从关联状态的转换。

temporalCount

国家行为(退出

exit: y = temporalCount(sec);

此操作计算并返回在激活和取消激活状态之间经过的模拟时间的秒数。

定义时间延迟的示例

这个连续时间图定义了转换中的两个绝对时间延迟。

图表执行包括以下步骤:

  • 当星图苏醒时,状态输入首先激活。

  • 经过5.33毫秒的模拟时间,从输入输出发生。

  • 国家输入停用,然后是状态输出激活。

  • 经过10.5秒的模拟时间,从输出输入发生。

  • 国家输出停用,然后是状态输入激活。

  • 重复步骤2到5,直到模拟结束。

如果一个图表有一个离散的采样时间,那么图表中的任何动作都是这个采样时间的整数倍。例如,假设您更改了配置参数,使Simulink®求解器使用0.1秒的固定步长。金宝app然后,从状态的第一次转换输入输出发生在t = 0.1秒时。这种行为适用于求解器,因为求解器不会在t = 5.33毫秒时唤醒图表。相反,求解器以0.1秒的整数倍唤醒图表,例如t = 0.0和0.1秒。

检测运行时间的示例

在这个模型中,一步块为图表提供单位步进输入。

图表决定了什么时候输入u= 1:

  • 如果t = 2秒之前输入为1,则从开始

  • 如果t = 2到t = 5秒之间的输入为1,则从开始

  • 如果t = 5秒后输入等于1,则从开始

启用子系统中的绝对时间时间逻辑示例

您可以使用绝对时间时间逻辑在位于有条件地执行子系统。当子系统被禁用时,图表变为非活动状态,时间逻辑运算符在图表休眠时暂停。操作员不会继续计算模拟时间,直到子系统被重新启用,图表被唤醒。

该模型有一个启用的子系统启用时的状态参数设置为举行

该子系统包含一个使用操作符。

Signal Builder块提供了一个具有以下特征的输入信号:

  • 信号使子系统在t = 0时生效。

  • 信号在t = 2时禁用子系统。

  • 信号在t = 6时重新启用子系统。

此图显示了在启用状态(或一个B).

当输入信号在时间t = 0时使子系统生效时,状态一个变为活动的或启用的。当状态为活动状态时,所花费的时间会增加。然而,当子系统在t = 2时被禁用时,图表将进入休眠和状态一个变得不活跃。

对于2 < t < 6,启用状态的时间停留在2秒,因为两个状态都不是活动的。当t = 6时图表苏醒,说明一个重新激活,时间消耗开始增加。从状态的转变一个到状态B取决于while状态所经过的时间一个启用,而不是在模拟时间上启用。因此,国家一个在t = 9之前保持活动状态,因此在该状态下所花费的时间总计为5秒。

当从一个B发生在t = 9时,即输出值y从0到1。

此模型行为仅适用于您设置Enable块参数的子系统启用时的状态举行.如果将参数设置为重置,当子系统重新启动时,图表将完全重新初始化。换句话说,执行默认转换,并将所有时态逻辑计数器重置为0。

这些语义也适用于之前操作符。

绝对时间时间逻辑的最佳实践

使用更换操作符

如果您使用使用绝对时间时间逻辑的运算符时,在尝试模拟模型时出现错误消息。使用操作符。

假设您想使用转换定义一个时间延迟(5.33秒)

将转换更改为后(5.33秒),如图所示。

控件使用外部自循环过渡更换每一个操作符

在状态流模型中,如果使用每一个使用绝对时间时间逻辑的运算符时,在尝试模拟模型时出现错误消息。控件使用外部自循环过渡操作符。

假设您希望在图表执行期间每2.5秒打印一个活动状态的状态消息,如的状态操作所示Check_status

用外部自循环转换替换状态动作,如下图所示。

还要在状态中添加一个历史连接,以便图表记住每次自循环转换之前的状态设置。看到使用历史连接记录状态活动

使用具有离散采样时间的图表可以更有效地生成代码

为不在被触发或启用的子系统内的离散图表生成的代码使用整数计数器来跟踪时间,而不是Simulink提供的时间。金宝app这允许在开销和内存方面更有效地生成代码,并允许在软件在循环(SIL)和处理器在循环(PIL)模拟模式中使用此代码。有关更多信息,请参见SIL和PIL模拟(嵌入式编码)。

另请参阅

|||||||

相关的话题