使用时态逻辑执行控制图
时间逻辑在时间方面控制图表的执行。在状态操作和转换中,可以使用两种类型的时间逻辑:基于事件的和绝对时间的。基于事件的时间逻辑跟踪重复发生的事件。绝对时间时间逻辑根据图表的模拟时间定义时间段。要对这些重复发生的事件或模拟时间进行操作,可以使用称为时间逻辑运算符的内置函数。
时序逻辑运算符使用规则
时间逻辑运算符只能出现在:
国家的行为
源于状态的转换
当整个过渡路径连接两个状态时,产生于结点的过渡段
请注意
此限制意味着您不能在默认转换或流程图转换中使用时态逻辑运算符。
每个时间逻辑运算符都有一个关联的状态,该状态是动作出现或转换产生的状态。
使用事件表示法在状态操作中表达基于事件的时间逻辑。看到基于事件的时间逻辑符号.
可以使用任何显式或隐式事件作为时态运算符的基础事件。基本事件是一个重复发生的事件,时间运算符对其进行操作。
对于没有输入事件的图表,可以使用
蜱虫
事件,表示图表唤醒的隐含事件。使用其中一个关键词
证券交易委员会
,msec
,或购买
以秒、毫秒或微秒为单位定义从激活状态开始经过的模拟时间。这些关键字仅在状态操作和起源于状态的转换中有效。使用绝对时间时间逻辑代替隐式逻辑
蜱虫
事件发生的原因如下:使用绝对时间时间逻辑的延迟表达式与模型的采样时间无关。然而,
蜱虫
事件依赖于采样时间。绝对时间时间逻辑适用于具有函数调用输入事件的图表。的
蜱虫
事件在具有函数调用输入的图表中不起作用。
基于事件的时态逻辑的运算符
对于基于事件的时态逻辑,使用该表中描述的运算符。
操作符 | 语法 | 描述 |
---|---|---|
后 |
|
返回 在没有输入事件的图表中, 重置计数器 |
在 |
|
返回 在没有输入事件的图表中, 重置计数器 |
之前 |
|
返回 在没有输入事件的图表中, 重置计数器 |
每一个 |
|
返回 在没有输入事件的图表中, 重置计数器 |
temporalCount |
|
每次发生基本事件时,递增1并返回一个正整数 在没有输入事件的图表中, 重置计数器 |
可以使用引号将关键字括起来“滴答”
.例如,“滴答”后(5)
等于蜱虫后(5)
.
请注意
时态逻辑运算符比较阈值n
到整数类型的内部计数器。如果n
是通过使用不是2的整数幂的斜率或非零偏差定义的不动点数,则比较可能由于舍入而产生意外的结果。有关更多信息,请参见定点数据的关系运算.
基于事件的时态逻辑示例
这些示例演示了基于事件的时态逻辑在状态操作和转换中的使用。
操作符 | 使用 | 例子 | 描述 |
---|---|---|---|
|
国家行为( |
|
在每个过程中都会出现一个状态消息 |
|
过渡 |
|
对象的广播时才发生脱离关联状态的转换 |
|
国家行为( |
|
的 |
|
过渡 |
|
对象的广播时才发生脱离关联状态的转换 |
|
国家行为( |
|
在10点正好出现一条状态消息 |
|
过渡 |
|
对象的广播时才发生脱离关联状态的转换 |
|
国家行为( |
|
每5分钟出现一条状态信息 |
|
国家行为( |
|
此操作计算并返回自激活状态以来已经过的滴答数的整数。然后,操作分配给变量 |
基于事件的时间逻辑符号
您可以使用两种表示法中的一种来表示基于事件的时态逻辑。
事件符号
使用事件表示法来定义仅依赖于基本事件的状态操作或转换条件。
事件表示法遵循以下语法:
tlo(n, E) [C]
在哪里
tlo
为布尔时间逻辑运算符(后
,之前
,在
,或每一个
)n
是运算符的出现计数吗E
算符的基事件是什么C
是可选条件表达式吗
有条件的符号
使用条件表示法来定义依赖于基本和非基本事件的转换条件。
条件表示法遵循以下语法:
E1 (tlo(n,E2) && C]
在哪里
E1
是否有非基事件tlo
为布尔时间逻辑运算符(后
,之前
,在
,或每一个
)n
是运算符的出现计数吗E2
算符的基事件是什么C
是可选条件表达式吗
事件和条件表示法的例子
符号 | 使用 | 例子 | 描述 |
---|---|---|---|
事件 |
国家行为( |
|
的 |
事件 |
过渡 |
|
发生关联状态外的转换 |
有条件的 |
过渡 |
|
对象的广播时才发生脱离关联状态的转换 |
请注意
您必须在状态操作中使用事件表示法,因为状态操作的语法不支持条件表示法。金宝app
绝对时间时间逻辑的运算符
对于绝对时间时间逻辑,使用该表中描述的运算符。
操作符 | 语法 | 描述 |
---|---|---|
后 |
|
返回 重置计数器 |
之前 |
|
返回 重置计数器 |
每一个 |
|
返回 重置计数器 使用 |
temporalCount |
|
计算并返回指定的秒数( 重置计数器 |
运行 |
|
相当于 重置计数器 |
数 |
|
返回条件表达式后面的勾数, 在Simu金宝applink中®模型的值 |
持续时间 |
|
返回条件表达式后的秒数, |
可以使用引号将关键字括起来“秒”
,“msec”
,“购买”
.例如,后(5秒)
等于后(5秒)
.
请注意
时态逻辑运算符比较阈值n
到整数类型的内部计数器。如果n
是通过使用不是2的整数幂的斜率或非零偏差定义的不动点数,则比较可能由于舍入而产生意外的结果。有关更多信息,请参见定点数据的关系运算.
绝对时间时间逻辑的例子
这些例子说明了状态动作和转换中的绝对时间时间逻辑。
操作符 | 使用 | 例子 | 描述 |
---|---|---|---|
|
国家行为( |
|
从激活状态开始经过12.3秒的模拟时间后, |
|
过渡 |
|
从激活状态开始,经过8毫秒的模拟时间后,发生从关联状态的转换。 |
|
过渡 |
|
从激活状态开始,经过5微秒的模拟时间后,将发生从关联状态的转换。 |
|
过渡 |
|
如果变量 |
|
国家行为( |
|
此操作计算并返回在激活和取消激活状态之间经过的模拟时间的秒数。 |
定义时间延迟的示例
这个连续时间图定义了转换中的两个绝对时间延迟。
图表执行包括以下步骤:
当星图苏醒时,状态
输入
首先激活。经过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模拟(嵌入式编码)。
另请参阅
后|在|之前|数|持续时间|运行|每一个|temporalCount