JKI状态机(JKISM)
JKISM 简介
JKI State Machine (JKISM) 是一个 LabVIEW 事件驱动队列消息状态机,核心是队列消息状态机 + 用户界面交互处理模式。JKISM 采用规定格式的字符串描述状态,利用字符串类型的移位寄存器构建消息队列。

优点
- 字符串格式的消息队列、消息,易于编辑、操作和查看
- 字符串消息可以携带附加的额外信息,构成消息 + 数据队列状态机
- 支持注释、宏消息
- 状态过程可通过文本描述,可以实现外部控制状态转换
- 模板内置错误处理机制
- JKISM Editor 工具
JKISM 开源地址:JKISoftware/JKI-State-Machine (github.com)
核心结构:Parse State Queue.vi
Parse State Queue.vi 是 JKISM 的消息处理核心,负责:
- 取出消息队列中下一条消息
- Error 时进入
"Error Handler"状态
消息队列为空时,程序进入事件结构等待用户操作。

消息格式
//打开前界面
UI: Front Panel State >> Open
| 元素 | 说明 |
|---|---|
//打开前界面 | 注释(以 // 开头) |
UI: Front Panel State | 消息(状态名) |
>> Open | 消息参数 |
Core Category(内置核心状态)
| 状态 | 说明 |
|---|---|
Default | 严重错误,捕获编程中使用未定义状态 |
Initialize Core Data | 初始化框架所需资源 |
Error Handler | 处理错误 |
Exit | 退出 |
JKISM 探针 (Probe)
JKISM 提供了专为 JKI 状态机设计的自定义探针,应用在状态连线上,显示下一个状态;如果没有则显示空字符串。

使用方法
在 LabVIEW 的连线右键菜单中,选择 Custom Probe → JKI State Queue Cyclic Table 即可插入 JKISM 专用探针。
在四个状态对应的代码中插入探针后,每个状态的运行结果会依次显示在探针窗口中。
History 探针
VIPM 中有多个历史列表探针库,安装后可以看到轮转的历史状态列表,方便追踪状态执行顺序。
JKISM 编辑器
JKISM Editor 是 JKISM 的配套开发工具,提供可视化的状态管理界面。

主要功能
- 打开方式:通过 JKISM 工具栏按钮或菜单打开
- 状态跳转 / 过滤状态:快速定位和筛选已定义的状态
- 调用状态跳转:点击状态名即可跳转到对应的 Case 分支
JKISM 编程技巧
技巧总览
- 不要在子 VI 中隐藏状态字符串
- 不要在事件结构中添加代码和逻辑判断
- 保留原生架构尺度,尽量不催生壮大架构
- 使用宏替代链式序列状态
- 左对齐替代右对齐状态字符串
技巧 1:不要在子 VI 中隐藏状态字符串
状态字符串应直接写在 Case 分支中,而不是封装到子 VI 内部。子 VI 内的状态字符串难以阅读和维护。

将状态字符串直接暴露在 Case 分支中,阅读代码时无需打开子 VI 即可了解状态流转逻辑。
技巧 2:不要在事件结构中添加代码和逻辑判断
事件结构只负责产生消息,不应包含业务逻辑。复杂逻辑应放在对应的状态 Case 中处理。

简单的条件逻辑(如判断是否入队某状态)可以放在事件结构中,但业务逻辑应保持在状态 Case 内。
技巧 3:保留原生架构尺度,尽量不催生壮大架构
- 尽量保留原生尺寸
- 尽量避免拖拽复制大量代码
- 关闭 Auto Grow 功能

技巧 4:使用宏替代链式序列状态
使用宏消息(Macro)将多个连续状态打包,代替手动链式入队多个状态,使代码更简洁。
// 链式序列(不推荐)
State 1
State 2
State 3
// 使用宏(推荐)
Macro: Initialize
其中 Macro: Initialize 展开后等价于:
Data: Initialize
Initialize Core Data
UI: Initialize
UI: Front Panel State >> Open

技巧 5:左对齐替代右对齐状态字符串
状态字符串常量应使用左对齐,而非右对齐,以便阅读。

在 LabVIEW 字符串常量属性中将对齐方式设为左对齐,多行状态队列字符串会更易读。