【JKI SMO】框架讲解(二)

JKI State Machine 讲解

         将JKI State Machine 模板拖曳到程序框图中,

        如下图, 

       此模板会默认放置一个OK按钮在前面板中,用于提示用户如何增加一个简单的用户事件去使用此框架。

         “Event Structure”,Idle:此分支可以设置用户时间,超时时间设置为-1意味着超时帧永远不会执行,如果要执行超时分支,则需要将此处的超时时间改为0ms或者在更大的数值,同时此框架的 核心是一个事件结构,来控制程序的整体响应。

        如果想要加快事件的响应则需要加入一个判断,查是否没有剩余状态(队列中没有工作)。如果是(没有工作),则永远等待事件。否则(如果队列中仍有工作),则检查一次事件(超时为零毫秒)。然后,在构建工作时,您可以交错“检查事件”状态(请注意,我已将“检查事件”字符串添加到状态机的 Case Structure 的“空闲”框架中)。

        这段逻辑确保状态机的循环仅在需要执行工作时才执行。否则,它只是在等待事件。

        此框架通过拼接连续多个字符串来实现任务的跳转,每一行都是一个单独的状态,例如移位寄存器初始化状态,事件结构控制执行的任务,初始化

新增一个事件及任务 

        创建一个新的按键“Test”,并在事件结构里复制“OK值改变事件分支”编辑“Test”事件为值改变。

        修改New Category 分支下的用户自定义分支名字。

        在事件结构里,将跳转状态字符串修改为用户自定义分支的名字。在用户自定义分支里补充用户要执行的任务,同时支持在每个条件分支里跳转。

 

        如有用户需要定义初始化数据, 则需要在此分支里面定义数据的类型及名称并将其捆绑到蔟里。在其他分支里,可以使用按名称解除捆绑函数将数据拿出来使用,经处理后再扔回data蔟里。

        同时此框架的错误处理是通过此函数来进行处理的,他可以路由错误接线到任何一个分支里。

 使用JKI State Machine Editor

        右击状态的条件结构或者事件结构,可以打开编辑器。

         点击导航栏里的分支名称可以自动跳转到对应的状态进行编辑,还有另一个功能是在编辑好任务的字符串里,可以进行状态跳转用于检查。

 

 重命名、新建、排序、删除等功能

        右击对应的分支可以实现重命名、新建分支功能,请注意,重命名框架将会重命名 JKI 状态机中它的所有实例

同时拖放树中的框架以重新排序(拖动类别分隔符以移动整个类别)

FAQ

框架执行很长时间,不响应事件是什么原因?

        如果条件结构框架正在工作,事件结构框架将不会执行(直到条件结构完成并且状态字符串移位寄存器/队列上不再有“工作”(除非通过将“空闲”状态添加到状态字符串队列来明确调用它)。

        但是,一旦在案例结构中完成工作,事件(事件结构所注册的事件)仍然会排队等待事件结构处理。

JKI 状态机作为子VI?

  • (红色)通过引用访问控件和指示器中的数据会破坏 LabVIEW 的数据流范式,并使代码难以阅读。我的建议是仅将控件和指示器用于用户那里获取输入或用户显示信息。无论如何,我都会避免将它们用作存储信息的地方。从实际角度来说,这意味着我倾向于将大量信息存储在移位寄存器的数据簇中,而不是对控件或指示器的值进行“实际工作” 。我使用前面板控件中的值更改事件来更新簇中的信息,并使用 UI:更新指示器状态(或类似状态)在必要时将前面板指示器同步到数据簇。这将前面板对象与其余 VI 的数据和代码分离,但不会破坏数据流或依赖引用。
  • (绿色)在状态名称(如“UI: SetDIODisabled >> 2”)中,“2”是一个神奇的数字,这会损害可读性和可维护性。有几种可能的解决方法,不同的人可能会根据个人喜好使用:
    • 您可以用更好的参数替换“0”、“1”、“2”,例如“启用”、“禁用”和“灰色”。
    • 您可以为每个条件使用单独的状态,并完全取消状态参数。例如,您将有多个状态,称为“UI:禁用 DIO 控件”和“UI:启用 DIO 控件”。
    • 您可以将控件的“启用状态”存储在数据集群的元素中,并拥有一个名为“UI:联锁”的状态,该状态使用该信息并采取适当的行动。然后,当您需要禁用或启用控件时,您将在数据集群中设置该元素的值,然后执行“UI:联锁”状态。

    (紫色)如果您要为Command输入字符串,我会确保每个可能的 Command 都有一个 VI,并使用状态机作为每个命令的子 VI。这为您提供了一种 API 来调用您的状态机,并避免在调用此状态机的任何代码的框图上(误用)使用裸字符串常量。

JKI状态机与生产者消费者状态机的联系

        UI 事件消费者- 在 JKI 状态机中,通过注册包含 JKI 状态机的 VI 前面板上的控件的隐式事件(在编辑事件对话框中)来订阅 UI 事件。

        用户(动态)事件生产者- 在 JKI 状态机中,调用生成用户事件来生成(发布)一个或多个用户事件消费者注册接收的事件(使用注册事件功能)。

        用户(动态)事件消费者- 在 JKI 状态机中,调用注册事件和动态事件终端来注册 JKI 状态机的事件结构,以订阅由某些用户事件生产者(或可能生成事件的其他位置)生成的用户事件。

        如果需要,您还可以使用队列和通知程序,而不是用户(动态)事件,来处理 LabVIEW 在管理 UI 事件和用户事件“队列”方面的限制,例如无法刷新或限制事件“队列”的大小。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JS重点17】原型链(面试重点)

一:原型链底层原理 以下面一段代码为例,基于原型对象(Star构造函数的原型对象)的继承使得不同构造函数的原型对象关联在一起(此处是最大的构造函数Object原型对象),并且这种关联的关系是一种链…

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision,本软件代码架构更加合理,且新增ui设计器、原来的vb脚本改为C#脚本,并尝试将视觉与运动控制相结合,是一体化的框架。 对源码有需求的,订阅本专栏后,私信我领取。

活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型

在当今数字经济时代,城市全域数字化转型已经成为提升城市管理效能、优化资源配置、推动经济发展的重要手段。英码科技始终致力于为企业打造高效、低成本的行业应用方案,助力企业实现数字化转型。近日,英码科技受邀参加了多场行业展示活动&…

操作系统复习-线程同步

互斥量 两个线程的指令交叉执行互斥量可以保证先后执行称为原子性 原子性是指一系列操作不可被中断的特性这一系列操作要么全部执行完成,要么全部没有执行不存在部分执行部分未执行的情况 互斥锁 互斥量是最简单的线程同步的方法互斥锁,处于两态之一的…

01 飞行器设计 —— 一门独立的学科

01 飞行器设计 —— 一门独立的学科 01 引言02 飞机设计概述2-1 什么是飞机设计?2-1 飞机设计是从哪里开始的?2-2 如何成为一名飞机设计师?2-4 本书的组织 参考文献 说明:关于Raymer的《Aircraft Design》的读书笔记; …

解读ROS功能包模块的步骤

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言解读ROS功能包模块的步骤前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 推荐开发经验及方法博客专栏: [https:/…

哇塞,超好吃的麻辣片,一口就爱上

最近,我发现了一款让人欲罢不能的美食——食家巷麻辣片!😍 一打开包装,那浓郁的麻辣香气就扑鼻而来,瞬间刺激着我的嗅觉神经。😃食家巷麻辣片的外观色泽鲜艳,红通通的一片,看着就特…

Android断点续传原理及实现

常见两种网络请求方式 一、 HttpURLConnection HttpURLConnection的setRequestProperty()方法,对我们要读取的字节部分进行控制,比如: 1.Range0-100代表只读取前100个字节。 2.Range100-500代表读取从第100个字节开始,读到第500个字节为止。…

常见的宽基指数基金

指数基金投资指南 ❝ 这篇博客里面的内容主要来自于银行螺丝钉的《定投十年,财务自由》和《指数基金投资指南》这两本书中章“常见的宽基指数”,最近第三次读这本书,打算做一点笔记加深自己的印象。 博客中很多内容是从书中摘抄的&#xff0c…

【git使用三】git工作机制与命令用法

目录 git工作机制和相关概念 四个重要区域 分支的概念 上传代码到远程分支的基本流程 克隆代码 仓库同步 开发者如何提交代码到远程仓库分支 1.初始化本地仓库 2.关联本地仓库和远程仓库 创建关联 查看关联情况 如何解除关联 3.推送代码到远程仓库 3.1先下拉远程…

PyTorch计算机视觉入门:测试模型与评估,对单帧图片进行推理

在完成模型的训练之后,对模型进行测试与评估是至关重要的一步,它能帮助我们理解模型在未知数据上的泛化能力。本篇指南将带您了解如何使用PyTorch进行模型测试,并对测试结果进行分析。我们将基于之前训练好的模型,演示如何加载数据…

解决老毛子路由器自带微信提示功能无法触发问题

新买了一个二手的RM AC2100,刷了老毛子后,发现自带的上下线微信提示无法使用(方糖公众号无信息) 经我开启SSH,将上下线部分代码拿出来调试发现,发不出来的原因是原版信息发送长度过长,需要截取一部分才能发送成功。 …

【Android面试八股文】说一说JVM、DVM(Dalvik VM)和ART的区别

文章目录 1. JVM(Java Virtual Machine):2. DVM(Dalvik Virtual Machine):与JVM区别基于的架构不同执行的字节码不同3. ART(Android Runtime):与DVM的区别4. 什么是JIT?4.1 什么是JIT4.2 JIT 编译的优势包括:4.3 对于 DVM 和 ART,它们在 JIT(Just-In-Time)编译方…

【学习笔记】centos7安装mysql相关事项

究极恶心的体验 依赖要按照顺序安装,有些依赖安装位置也不同 非常细节 mysql安装包:mysql官网下载地址 centos7选择Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), RPM Bundle 下载版本自选 安装视频教程:centos7.5安装mysql …

消息队列-RabbitMQ-延时队列实现

死信队列 DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。 导致死信的几种原因: ● 消息…

Spring配置那些事

一、引言 配置是一个项目中不那么起眼,但却有非常重要的东西。在工程项目中,我们一般会将可修改、易变、不确定的值作为配置项,在配置文件/配置中心中设置。 比方说,不同环境有不同的数据库地址、不同的线程池大小等&#xff0c…

【计算机毕业设计】241外卖微信小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器,开启root 2.jadx: https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【文献阅读】Adaptive Arrays

符号表 由于论文内符号繁杂,这里写了一个符号表 符号含义 μ k l \mu_{kl} μkl​kl协方差项 n k n_k nk​K通道的复包络 n l n_l nl​L通道的复包络 μ l k \mu_{lk} μlk​kl协方差项的共轭 α \alpha α定义信号的幅度和时间变化 s k s_k sk​k信道中的信号 w …

什么是Dubbo?

文章目录 1、Dubbo介绍1.1 什么是Dubbo1.2 Dubbo关键特性1.3 什么是RPC1.4 实现RPC的方式1.5 Dubbo中的五大核心组件 1、Dubbo介绍 Apache Dubbo是一款高性能、轻量级的开源微服务开发框架,它提供了RPC通信与微服务治理两大关键能力。这意味着,使用Dubbo…