1
内部变量的声明
状态图环境内部的变量使用init关键字声明:
在这个例子中,我们引入了一个名为 var 的变量,类型为 int,初始值为 0。每次状态图执行遍历转换时,变量将递增 2。同一作用域中每个变量只能有一个init。
变量初始化的语法为:
varname:=expr0 init expr1
此表达式引入了一个名为 varname 的变量,其初始值在第二个表达式中给出(在 init关键字之后)。
从上述表达可以看出关键字 init 是用在过渡状态线上。
2
内部变量声明的简化写法
如果赋值中使用的表达式与用于初始化的表达式相同,则可以使用简化的语法:
我们在这里介绍两个变量 x 和 y,它们在传递初始转换时将被分配为零(整数或实数)。
变量的类型取决于用于初始化它的值。例如,在这里,使用文字整数 0 和浮点文字 0.0 分别导致实际类型 int 和 real:类型确定自动执行并最终在整个状态图中传播(任何后续使用 x 和 y 都会传播所涉及的表达式中的 int 和实数类型约束)。
注意:禁止将 int 变量与实变量混合和匹配。必须使用 to_real 和 to_int 函数进行转换。int 常量可以在任何地方用作实常数,但在从初始状态过渡时。(看到没 to_real 和 to_int 又是两个关键字)
3
变量的作用范围
内部变量的作用范围也即是内部变量的作用域。它们仅在状态图的某些部分可见。
变量在其复合状态下可见,在下面的所有子复合(或并行)状态下可见。
此示例中有三个不同的声明变量,一个“y”变量仅在第一个复合状态下可见,因为用于声明它的 init 关键字位于此状态内的转换中。还声明了两个同名变量:“x”。一个在顶层和 composite1 可见;另一个在 composite2 中声明,并隐藏先前声明的变量。由于这种隐藏,composite2 无法访问在顶级声明的变量 x。composite 1 不会重新定义名为 x 的变量,因此可以访问在顶级声明的变量。
注意:状态图环境编译器将在存在变量隐藏的情况下生成警告消息。(警告只是警告,但不是错误)
为了简化不同变量的范围,下表综合了不同变量的范围:
螺栓连接的疲劳失效模式有哪些?
5G手机将成为下一波换机潮最大亮点 手机大厂如何布局
台积电南京厂出货时间提前,本季末就能投片
物联网控制系统:实现对水泵的远程控制、实时监测
无人机燃爆 深圳600架无人机对香港喊话 合肥无人机城管上岗
AMEsim信号处理之有限状态机内部变量的声明
用户体验差成智能家居领域核心痛点,物联网智能家居解决方案来帮忙
国家和工业都在推进“5G+工业互联网”的发展
失落连咖啡
千视为您打造采集、监看、录制一站式解决方案
工信部:三季度末完成互联网电视业务IPv6改造
遥控器通信终端的电磁屏蔽箱体的设计
利用机智云的云计算平台实现老式电风扇改造
【新专利介绍】多功能水表
得益于骁龙888的优秀性能,iQOO 7的表现非常亮眼
电动脱模器的组成_电动脱模器主要技术指标
华为荣耀8青春版领衔, 笔记本、耳机、手环都玩潮流范儿
OMNIVISION推出单芯片LCOS面板
王腾:iPhone12mini性能不缩水,但电池却大大缩水
HarmonyOS三大技术理念