【JKI SMO】框架讲解(二)

news2024/9/19 10:39:42

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.coloradmin.cn/o/1829801.html

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

相关文章

---异常---

我们在运行程序时总遇到各种与报错,数组越界,空指针的引用,这些在java中都称为异常 对于不同的错误都具有一个与他对应的异常类来秒描述 这是对于数组越界这个类里有的方法,这些是描述异常的 在java中有一个完整的描述异常的类的…

JavaFX 节点

JavaFX Node类javafx.scene.Node是添加到JavaFX 场景图的所有组件 的基类(超类) 。JavaFX Node 类是抽象的,因此你只需将 Node 类的子类添加到场景图中。场景图中的所有 JavaFX Node 实例共享一组由 JavaFX Node 类定义的公共属性。本 JavaFX…

运行vue3项目相关报错

1. VSCode打开TSVue3项目很多地方报错 报错内容 几乎所有文件都会出现未知飘红 error Delete CR prettier/prettier报错原因 插件冲突,Windows系统回车换行符与MAC不一致(所以这个问题Windows系统才会出现) 解决 需要安装Vue - Official…

掌握高等数学、线性代数、概率论所需数学知识及标题建议

在数学的广袤领域中,高等数学、线性代数和概率论作为三大核心分支,不仅在理论研究中占据重要地位,更在实际应用中发挥着举足轻重的作用。为了深入理解和掌握这三门学科,我们需要掌握一系列扎实的数学知识。 高等数学所需数学知识 …

vitepress搭建的博客系统cdn引入github discussions评论系统

github仓库必须是公开的。 按照CDN的方式引入 打开discussions模块 安装giscus app 配置giscus 就是刚安装了giscus app的仓库 页面往下走,生成了代码: 配置vitepress 采用了CDN的方式引入 使用web component 随便找个地方试试组件 效果 有了…

Web3失败下互联网的未来转型之路

互联网的消亡已不再是夸大其词的说法。在大型科技巨头和生成式AI的推动下,网络的死亡螺旋正在加速,就像希腊神话中的蛇怪,象征着自我吞噬与永生。互联网已经开始自我喂养,并吐出最糟糕的部分供我们消费。 没有价值 Web3未能提供…

LeetCode43.字符串相乘【大整数相乘】

LeetCode刷题记录 文章目录 📜题目描述💡解题思路 📜题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 Big…

Windows10安装Docker Desktop(实操步骤版)

1,下载Docker Desktop 官网下载地址: https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe 国内镜像下载地址(本人下载这个): https://smartidedl.blob.core.chinacloudapi.cn/docker/2…

黄仁勋最新建议:找到一门技艺,用一生去完善、磨炼!

“你可能会找到你的英伟达。我希望你们将挫折视为新的机遇。” 黄仁勋职业生涯中最大的教诲并非来自导师或科技公司 CEO,而是来自他在国际旅行时遇到的一位园丁。 近日在加州理工学院毕业典礼上发表演讲时,黄仁勋向毕业生分享了自己在日本京都的小故事。…

windows11 x64 23H2 企业纯净版2024.6.16

闲来无事试安装了下da_nao_yan的 【6月12日更新】Windows11 22631.3737企业版 23H2 自用优化版 (原版地址:https://bbs.pcbeta.com/viewthread-1985546-1-1.html),感觉比原版流畅多了,重新按照自己习惯封装了下&#x…

!力扣105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,15,7] …

Postgre 调优工具pgBadger部署

一,简介: pgBadger(日志分析器)类似于oracle的AWR报告(基于1小时,一天,一周,一月的报告),以图形化的方式帮助DBA更方便的找到隐含问题。 pgbadger是为了提高…

springboot集成shardingsphere-分库分表

导入maven依赖&#xff0c;如下 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><a…

【模块缝合】【NIPS 2021】MLP-Mixer: An all-MLP Architecture for Vision

文章目录 简介代码&#xff0c;from&#xff1a;https://github.com/huggingface/pytorch-image-models【多看看成熟仓库的代码】MixerBlock paper and code&#xff1a; https://paperswithcode.com/paper/mlp-mixer-an-all-mlp-architecture-for-vision#code 简介 这个转置…

jeecg快速启动(附带本地运行可用版本下载)

版本整理&#xff08;windows x64位&#xff09;&#xff1a; redis&#xff1a;3.0.504 MYSQL&#xff1a;5.7 Maven&#xff1a;3.9.4(setting文件可下载) Nodejs&#xff1a;v16.20.2&#xff08;建议不要安装默认路径下&#xff0c;如已安装在c盘&#xff0c;运行yarn报…

DDei在线设计器-DDeiCore-面板插件

DDei-Core-面板 面板是一个可见的功能界面&#xff0c;既可以装载到布局&#xff08;Layout&#xff09;上&#xff0c;也能够被嵌套进其它面板&#xff0c;这一篇对DDei-Core的提供的主要面板进行介绍&#xff0c;最后以表格的形式列举其它面板。 如需了解详细的API教程以及参…

Java并发编程三大神器之Semaphore

Java并发编程三大神器之Semaphore 1、Semaphore是什么2、Semaphore小试牛刀3、Semaphore和CountDownLatch组合使用4、Semaphore常用方法5、Semaphore 结语 1、Semaphore是什么 Semaphore 是一个计数信号量&#xff0c;是JDK1.5引入的一个并发工具类&#xff0c;位于java.util.…

YOLOv10涨点改进SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

本文改进:SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响,强烈推荐,适合直接使用,paper创新级。 目录 1,YOLOv10介绍 1.1 C2fUIB介绍 1.2 PSA介绍 1.3 SCDown 2.SPP &SP…

React 中的事件处理

React 中是如何处理事件的&#xff0c;现在下面简单的一段代码&#xff1a; export default function App() {const AList lazy(()>import(./List.js))const r useRef(null) const [show, setShow] useState(false);return (<><button onFocus{()>{setShow…

如何用 ChatGPT DALL-E3绘画(10个案例)

如何用ChatGPT绘画——10个案例&#xff08;附提示词&#xff09; DALL•E 3可以在ChatGPT plus里直接使用了。 如果想免费使用&#xff0c;可以用新必应免费使用。 上次有个朋友问&#xff1a;DALL•E 3 有什么用。 这里用十个案例&#xff0c;来解释一下这个问题。 1.创…