# 状态机变量设置


介绍状态机输入输出变量的定义、配置和使用方式,并通过示例解决如何合理设置这些变量。

在状态机设计中,输入输出变量的设置是实现状态机功能的基础。输入变量用于接收外部信号或事件,驱动状态的转换;输出变量则用于反映状态机的行为或与外部系统交互。

# 基本概念

  • 输入(Input)变量

    • 触发状态转移或影响状态的外部数据来源,如传感器信号、用户输入、系统事件等。
  • 输出(Output)变量

    • 状态机对外输出的信息,常用于表示当前状态或触发外部动作。
  • 参数(Parameter)变量

    • 状态机运行时的配置值,用于影响状态机的行为。参数变量在运行时通常不可修改,其值在初始化阶段由外部系统设置。
  • 常量(Constant

    • 状态机内部定义的固定值,在整个运行期间保持不变。通常用于表达逻辑中的不变条件或标识符。
  • 局部(Local)变量

    • 状态机内部的临时变量,用于存储中间数据或状态逻辑的辅助信息。

# 变量范围总结对比表

变量类型 定义位置 作用范围 是否可修改 数据来源 用途
Input 外部模块或系统 全局(状态机外部输入) 外部信号或事件 驱动状态转移
Output 状态机内部 全局(状态机对外输出) 状态机逻辑 表示当前状态、触发外部行为
Paramter 外部配置或初始化 全局(全生命周期有效) 外部配置 影响状态机行为
Constant 状态机内部定义 全局(设计时定义) 设计时固定值 表示常量或标识符
Local 状态或过度逻辑内部 局部(特定状态有效) 状态机内部定义 临时存储中间值,辅助状态转换

# 管理界面

状态机变量管理界面分为对话框和面板两种形式,在管理界面定义状态机中使用到的所有变量,是状态机正常运行的基础。

# 状态机变量对话框

状态机建模界面的空白处右击,右键菜单中选择编辑状态机变量,打开状态机变量对话框。

# 状态机变量面板

状态机建模界面选中建模-状态机变量,打开状态机变量面板。

此窗口主要分为三栏:

组件栏

  • 可以选择组件进行变量定义,在状态机中定义的变量及事件,所有状态及转移线都能使用,在状态栏上定义的变量仅此状态及其子状态可用。

  • 状态机中需要进行输入、输出的变量及事件必须定义在状态机层。

操作栏

从左到右的功能点依次为:

功能点 功能说明
添加变量 在变量与事件栏中新增一个变量
新建事件 在变量与事件栏中新增一个事件
删除变量 在变量与事件栏中选择条目后才可使用,效果为移除选中的条目
检索框 在检索框内输入字符后,变量与事件栏中将只显示“范围”和“名称”中包含此字符串的条目
上层显示 切换状态机变量窗口是/否保持在最上层显示

变量与事件栏

变量与事件可设置项为:

设置项 功能说明 可选项说明
范围 指定变量的作用范围。 - Input:输入变量,每定义一个输入变量,chart 模块就会多一个输入接口,并将输入端口接收到的数据赋值给对应的变量。
- Output:输出变量,每定义一个输出变量,chart 模块就会多一个输出接口,并将对应的变量以此端口输出。
- Parameter:参数变量,可以在整个模型(不局限于状态机)中使用。
- Constant:常数变量。
- Local:局部变量,只能在状态机中使用的变量。
名称 指定设置项对应的变量名,状态机语句中需引用相应的变量名才能生效。 /
指定变量的初始值,即仿真开始时的值。 /
类型 指定变量的数据类型。 - 浮点型:float/double
- 整数型:uint8/uint16/uint32、int8/int16/int32
- 布尔型:boolean
- 定点型:fixdt(1,16,0)
维度 指定变量的数据维度。 - 标量:填 "[]" 即可。
- 数组:以 "[n]" 形式输入,其中 n 表示数组的元素个数,如包含 3 个元素的数组 {1,2,3} 的维度为 [3]。
- 矩阵:以 "[m,n]" 形式输入,其中 m 表示矩阵行数,n 表示矩阵列数,如两行三列矩 {{1,2,3},{4,5,6}} 维度为 [2,3]。
触发方式 - 输入变量的触发方式:触发时输入变量相当于值为 true 的布尔值,支持作为转移条件。
- 事件的触发方式:事件触发的时机。
- 输入变量:rising(变量从 0 或负值变为正值)falling(变量从 0 或正值变为负值)either(在任一方向发生过 0 变化);
- 输入事件: rising(上升沿触发) falling(下降沿触发) either(上升或下降沿触发) functionCall(函数触发);
- 输出事件:either(上升或下降沿触发) functionCall(函数触发);
- 局部事件:默认为 functionCall(函数触发),不提供编辑操作。
端口 指定 Input/Output 类型变量所暴露接口的顺序,输入端口与输出端口的排序相互独立。 备注:编号为 1 的端口显示在最上端,然后按端口索引顺序递增排列。

# 注意事项

  • 状态机中使用的所有变量及事件,必须在状态机变量管理界面中全部定义,是状态机正确执行的基础。

  • 确定变量名称具有清晰的含义,并根据作用范围选择合适的类型。

  • 仅定义必要的变量,减少重复数据的传递或存储。

  • 合理使用局部变量和全局变量,避免不必要的全局变量污染。

  • 所有变量在使用前应初始化,确保数据一致性与正确性。