当前位置: 首页 > article >正文

【LabVIEW学习篇 - 25】:JKI状态机

文章目录

  • JKI状态机
    • JKI状态机安装
    • JKI状态机的基本了解
    • 状态机的运行原理
    • 示例

JKI状态机

JKI状态机的核心就是队列消息状态机+用户事件处理器模式,JKI状态机采用指定格式的字符串来描述状态。

JKI状态机并没有采用队列而是采用指定的字符串进行存储,它封装了几个VI,用来实现状态的插入和输出,类似实现了元素入队列和出队列的功能,但是使用指定格式的字符串比较方便,原因是可在字符串后按照格式带入参数或者说屏蔽某一种参数。
在这里插入图片描述

JKI状态机安装

JKI状态机为第三方的工具包,由JKI公司开发的一个框架。

  1. 下载VI Package Manager,按下图所示进行下载。
    在这里插入图片描述
  2. 下载完成后在程序框图的选版中可看到。
    在这里插入图片描述

JKI状态机的基本了解

  1. Add States(s) to Queue(添加状态到队列中)的VI介绍。可在该VI的状态前后插入数据,最终输出的是一个字符串类型的消息。
    在这里插入图片描述
    在这里插入图片描述
    注意:有多条消息(状态)需要换行进行分割;同时每条消息都可携带参数(参数的格式:在消息后添加>>,例:Message>>aa即为参数);还可屏蔽状态,屏蔽的格式与C语言相同,即在状态前加///*
    在这里插入图片描述
  2. Parse State Queue(解析队列状态)VI的介绍。该VI主要对输入的消息(字符串)进行解析,即将状态和参数解析出来进行处理。
    在这里插入图片描述
    在这里插入图片描述
  3. 注意事项如下图所示:
    在这里插入图片描述

状态机的运行原理

  1. 首先是主信息的初始化。将Macro: Initialize这个消息入队列,入队列后进行解析,解析之后条件结构就会进入到主消息初始化分支,在这个分支中将四个消息入队列。
    在这里插入图片描述
  2. 主信息初始化后,将四条消息入队列,首先进入到Data: Initialize分支中。
    Data: Initialize分支主要完成数据的初始化。
    在这里插入图片描述
  3. 初始化JKI框架的核心数据。完成主信息初始化后跳转到Initialize Core Data,进行初始化JKI框架的核心数据。
    在这里插入图片描述
  4. 接着跳转到UI: Front Panel State状态,在这个状态中可以根据传入的参数,进入对应的分支中完成对应的任务。
    带参数的优势:有时候同一个类别的操作会有不同的条件,那么条件就靠参数来决定,结果就可以在一个分支下实现多个条件的任务,大大简化了VI的帧数,使得设计更加的紧凑。
    在这里插入图片描述
  5. 以上整个框架的一个初始化操作就已经完成。这个时候状态队列中就没有消息了,在循环下一次进行时就会跳转到Idle空闲状态。在这个空闲状态中有一个事件结构,去响应界面上的用户事件。
    在这里插入图片描述
    比如,按下Exit按钮,就会传入Macro: Exit状态,在这个状态下面会根据之前的条件,去关闭面板以及数据清理,最后退出。
    在这里插入图片描述
  6. 结论:这个JKI状态机除了把队列按照字符串实现了一个良好的封装,方便传参数以及拥有消息屏蔽的功能,还把生产者和消费者的事件合在一起。
    缺点:单线程。当触发事件后,任务没有执行完成,界面的其他事件没有办法响应。

示例

示例:使用JKI状态机,实现按钮控制LED灯的点亮和关闭,在点亮LED时鼠标显示忙碌状态,5s后鼠标自动回复空闲状态。

  1. 在前面板中,创建圆形指示灯和两个按钮控件。
    在这里插入图片描述
  2. 数据初始化。在程序框图中,Data: Initialize中将圆形指示灯的引用添加到簇中。
    在这里插入图片描述
  3. 在JKI框架中添加一个LED事件,相关的设置如下。
    在这里插入图片描述
    在这里插入图片描述
  4. Event Structure设置响应事件,相关设置如下图所示。
    在这里插入图片描述
    在这里插入图片描述
  5. 执行的总顺序:
    1 先进行初始化;
    2 初始化结束后JKI状态加进入到Event Structure中等待响应事件;
    3 当按下ON按钮时,进入到UI: Cursor Set分支中,根据传入的参数Busy将鼠标设置为忙碌状态,然后进入到LED分支中,根据传入的ON参数将LED灯点亮,并延时5s,5s后再进入到UI: Cursor Set中,根据传入的参数Idle将鼠标设置为空闲状态。OFF按钮的事件同理。

http://www.kler.cn/news/309345.html

相关文章:

  • I2C/IIC学习笔记
  • nonlocal本质讲解(前篇)——从滤波到Nonlocal均值滤波
  • Java项目实战II基于Spring Boot的宠物商城网站设计与实现
  • linux-软件包管理-包管理工具(Debian 系)
  • 【C++入门学习】7. 类型
  • Java项目实战II基于Java+Spring Boot+MySQL的服装厂服装生产管理系统的设计与实现
  • 归并排序
  • Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法
  • [ffmpeg]音频格式转换
  • matlab绘制不同区域不同色彩的图,并显示数据(代码)
  • 【每日一题】LeetCode 2848.与车相交的点(数组、哈希表、前缀和)
  • python知识点100篇系列(18)-解析m3u8文件的下载视频
  • 东土科技加码芯片业务投资,携手神经元共建新型工业生态
  • 【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战
  • 动态ip切换过快,会引起我的账号下次登录异常吗
  • CentOS详细解析及其配置方法
  • golang 字符串浅析
  • 使用Python实现深度学习模型:智能家电控制与优化
  • Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程
  • iOS 知识点记录
  • 区块链积分系统:革新支付安全与用户体验的未来
  • 【Petri网导论学习笔记】Petri网导论入门学习(三)
  • 启信产业大脑助力市北高新园区数字化升级,开启智慧园区新篇章
  • 自己建网站怎么建
  • OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用
  • 网络安全学习(五)Burpsuite实战
  • 解决Matlab报错:MEX 文件 ‘D:\MATLAB\toolbox\maple\maplemex.mexw64‘ 无效: 缺少依赖共享库
  • 2024年某大厂HW蓝队面试题分享
  • Github打不开解决方法
  • 产品经理有必要学习大模型技术吗?