【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 事件和用户事件“队列”方面的限制,例如无法刷新或限制事件“队列”的大小。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D ToF赋能小米CyberDog 2提升视觉灵敏度

随着科技的进步,智能机器人越来越多地融入我们的日常生活。其中,CyberDog 2作为一款前沿的四足机器人,凭借其出色的视觉灵敏度和多功能技术配备,受到了广泛的关注。本文将重点探讨CyberDog 2的视觉系统,尤其是其四种不同类型的摄像头如何共同提升其视觉灵敏度,以及激光传…

c++_0基础_讲解7 练习

这一讲我为大家准备了几道题目,大家试着独自做一下(可能来自不同网站) 整数大小比较 - 洛谷 题目描述 输入两个整数,比较它们的大小。若 x>yx>y ,输出 > ;若 xyxy ,输出 &#xff…

在ubuntu中恢复误删除的文件

1、安装 TestDisk 在 Ubuntu 上,可以使用以下命令安装 TestDisk: sudo apt-get install testdisk2、查询你删除的文件所在那个分区 #查询分区 df -h #我这里是/dev/sda2 #也可以使用下面命令查看具体哪个分区 lsblk3、查询该分区是什么系统类型 sudo …

【CICID】GitHub-Actions语法

[TOC] 【CICID】GitHub-Actions语法 1 场景 ​ 当我们开发过程中,经常需要提交代码,打包,部署新代码到对应的环境,整个过程都是人工手动操作,占据开发人员大量时间,并且很繁琐容易出错。所以需要借助一些…

redis 缓存jwt令牌设置更新时间 BUG修复

大家好,今天我又又又来了,hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug ,redis中缓存的token 是单用户才能实现的。 就是 我 redis中存储的键 名 为token 值 是jwt令牌 ,但是如果 用户a 登录 之后 创建一个…

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

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

C++ 算法教程

归并排序 #include<iostream> using namespace std; template <class T> void Merge(T data[],int start,int mid,int end) {int len1 mid - start 1, len2 end - mid;int i, j, k;T* left new int[len1];T* right new int[len2];for (i 0; i < len1; i)…

数据结构--力扣104,110 二叉树相关(C

1.力扣104。二叉树的最大深度-. - 力扣&#xff08;LeetCode&#xff09; 2.力扣110。平衡二叉树->. - 力扣&#xff08;LeetCode&#xff09; 1. 叶子结点 指&#xff1a;没有子节点的节点 思路&#xff1a; 求其 左子树和右子树的最大深度&#xff0c;返回其中最大值即可…

《C语言》文件操作

文章目录 一、认识文件1、文件的概念2、程序文件3、数据文件4、文件名 三、二进制文件和文本文件四、文件的打开和关闭1、流2、标准流3、文件指针4、文件的关闭和打开 四、文件的顺序读写文件的随机读写1、fseek2、ftell3、rewind4.int origin 一、认识文件 主要讨论数据文件 1…

C++ 矩阵乘法

描述 如果A是个x行y列的矩阵&#xff0c;B是个y行z列的矩阵&#xff0c;把A和B相乘&#xff0c;其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的 矩阵的大小不超过100*100 输入描述&#xff1a; 第一行包含一个正整数x&#xff0c;代表第一个矩阵的…

Go如何在本地引用以及发布并引用自定义工具包

如何引用本地自定义工具包 我们首先要准备两个项目&#xff0c;分别为需要引入的工具包和当前项目。 myutils、myproject1. myutils为我们的项目1-工具包 package mypakgeimport "strings"func IsContains(s string) bool {if strings.Contains(s, "a")…

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后&#xff0c;新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类&#xff0c;接口是接口&#xff0c;它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明&#xff1a;interface 4、在jdk1.8之前&…

二分查找-java代码实现(easy)

目录 一、问题描述 二、代码实现 三、刷题链接 一、问题描述 二、代码实现 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 如果目标值存在返回下标&#xff0c;否则返…

STM32理论 —— μCOS-Ⅲ(2/2):时间管理、消息队列、信号量、任务内嵌信号量/队列、事件标志、软件定时器、内存管理

文章目录 9. 时间管理9.1 OSTimeDly()9.2 OSTimeDlyHMSM()9.3 OSTimeDlyResume()9.4 延时函数实验 10. 消息队列10.1 创建消息队列函数OSQCreate()10.2 发送消息到消息队列函数(写入队列)OSQPost()10.3 获取消息队列中的消息函数(读出队列)OSQPend()10.4 消息队列操作实验 11. …

使用React和GraphQL进行CRUD:完整教程与示例

在本教程中&#xff0c;我们将向您展示如何使用GraphQL和React实现简单的端到端CRUD操作。我们将介绍使用React Hooks读取和修改数据的简单示例。我们还将演示如何使用Apollo Client实现身份验证、错误处理、缓存和乐观UI。 什么是React&#xff1f; React是一个用于构建用户…

Unity 3D 物体的Inspector面板

1、Transform&#xff1a;位置、旋转、大小 2、Mesh Filter&#xff1a;物体的形状 3、Mesh Renderer&#xff1a;物体渲染&#xff08;物体的衣服&#xff09; 4、Collider&#xff1a;碰撞体

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

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

Electron无感打印 静默打印(vue3 + ts + vite)

&#xff08;electron vue3 项目搭建部分 自行查找其他资源 本文只讲解Electronvue3 如何实现静默打印&#xff09; 第一步获取打印机资源 渲染端代码&#xff08;vue里面&#xff09; // 因使用了vite所以在浏览器中打开 require会报错 只能在electron中 const { ipcRender…

【gitcode】idea 在本地拉取和push本地代码到gitcode仓库

【首次使用】 1、idea 拉取代码&#xff0c;很容易这里就不记录了。 2、push代码时&#xff0c;总是弹窗登录输入在gitcode.com登录能成功。但是在idea 怎么都不成功。控制台提示 remote: HTTP Basic: Access denied fatal: Authentication failed for ******* 认证失败 3…

仲恺ZK——信计专业《软件体系结构》24年试卷回忆

以下是我在总结的复习内容&#xff0c;有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》&#xff0c;两者结合起来复习&#xff0c;帮助你轻松过考试&#x1f60a;。总的来说&#xff0c;考试不会太难&#xff0c;只要你了解了各类设…