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

【LabVIEW学习篇 - 23】:简单状态机

文章目录

  • 简单状态机
    • 状态机的创建和了解
    • 状态机实现红绿灯

简单状态机

一个优秀的应用程序离不开好的程序框架,不仅要很好满足用户的功能需求,还要考虑到系统的稳定性、实时性、可扩展性、可维护性,执行效率等方面。借用一些成熟的设计框架,可以帮助开发人员很容易地完成一些复杂系统的设计和开发,并且在满足需求的同时还保证程序的性能。

有限状态机(FSM-Finite State Machine),即用有限确定数量的状态来描述一个系统的运行,统称称此为状态机。状态机的概念很早就有了,它不是LabVIEW特有的概念,而是LabVIEW比较适合设计框架之一。

状态机包括三个基本要件:状态、事件(转换条件)、动作。

状态机简单灵活,状态机设计的好坏取决于设计者的编程水平和逻辑思维。太少,会使得每个状态中要处理的任务太多;太多,又会使得状态机太复杂,不便于维护。

状态机的创建和了解

  1. 创建项目-简单状态机Main.vi中就是简单状态机的模板。
    在这里插入图片描述
    在这里插入图片描述
  2. 简单状态机。
    在这里插入图片描述
    在这里插入图片描述
  3. 状态机的执行过程:
    程序框图中最外层是一个while循环,内层是一个条件结构。条件结构主要根据移位寄存器也就是状态寄存器,用来保存当前系统的一个状态,从而在下次循环的时候将系统跳转到对应的状态去执行。
    Step1:首先,系统最初始的状态就是Initialize,进入循环后其状态存入移位寄存器中,然后进入条件分支结构,执行对应的操作,操作执行完之后就会跳转到下一个状态Wait for EventWait for Event就会赋值给移位寄存器。
    在这里插入图片描述
    Step2:当进入下一次循环,就会从移位寄存器中拿到Wait for Event的状态,Wait for Event中有一个事件结构,分别有三个事件分支,其中有两个事件分支有按钮,按下对应的按钮可触发该事件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Step3:当在Wait for Event分支中触发事件,将User State 1存入移位寄存器中,在下一次循环时切换到移位寄存器中,将字符串以对话框的形式显示,然后又切换到Wait for Event分支中。同理,其余的状态切换也相同。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

状态机实现红绿灯

  1. 在前面板中分别创建三个圆形指示灯,三个数值输入控件,数值输入控件用来设置红、绿、黄灯亮的时间。然后在自定义枚举框中添加RedYellowGreen
    在这里插入图片描述
  2. 设置好的各分支如下图所示:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 修改自定的簇,先给各圆形指示灯创建其引用,然后选其引用,创建常量。将其引用常量复制粘贴到自定义簇中。
在这里插入图片描述
在这里插入图片描述
4. 创建一个颜色簇
在这里插入图片描述
5. 在Initialize中对三个圆型指示灯导入簇中并进行初始化操作。
在这里插入图片描述
6. Red分支:在该分支中点亮红灯,熄灭黄灯,因为最后点亮的灯为黄灯,在Yellow分支中切到Red分支,需要熄灭黄灯,保证只有一盏灯亮。最后加上延时即可。
在这里插入图片描述
7. Green分支的设置同理。
在这里插入图片描述

  1. Yellow分支中设置黄灯闪烁,闪烁的间隔为1s。
    在这里插入图片描述
  2. 运行结果:
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

相关文章:

【LabVIEW学习篇 - 23】:简单状态机

文章目录 简单状态机状态机的创建和了解状态机实现红绿灯 简单状态机 一个优秀的应用程序离不开好的程序框架,不仅要很好满足用户的功能需求,还要考虑到系统的稳定性、实时性、可扩展性、可维护性,执行效率等方面。借用一些成熟的设计框架&a…...

【CSS】 Grid布局:现代网页设计的基石

引言 最近接到一个网页布局比较复杂的页面,看了半天还是决定用grid布局来写,记录一下 布局是构建用户界面的关键部分。CSS Grid布局提供了一种简单而强大的方式来创建复杂的网格布局,它让设计师和开发者能够更直观、更灵活地控制网页的结构。…...

jQuery UI API 文档

关于《jQuery UI API 文档》,我找到了一些有用的信息。jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题。如果您是 jQuery 新手,建议您先查看 jQuery 教程。目前,我找到的资料主要是关于 jQuery UI 1.10 版…...

盘点2024年大家都在用的录屏工具

现在录屏工具的使用范围越来越广了。我的深切体验是有很多人愿意为知识付费了,但是到线下培训的话很多人时间不一定能协调的来,这就导致涌现了不少的录屏课程。这次我们来探讨下要怎么录屏才能呈现更好的效果。 1.福昕录屏大师 链接达达:ww…...

【大数据】探索怎么从一段话中解析关键信息(寄件人相关信息)

本文由ChatGPT生成,主要用于学习,大家有疑问请及时提出。 使用NLP实现文本信息解析功能:以提取姓名、地址和电话号码为例 在这个博客中,我们将通过自然语言处理(NLP)技术来实现一个简单的文本信息解析功能…...

初学者指南:MyBatis 入门教程

主要介绍了Mybatis的基本使用、JDBC、数据库连接池、lombok注解! 文章目录 前言 什么是Mybatis? 快速入门 使用Mybatis查询所有的用户信息 配置SQL提示 JDBC介绍 Mybatis 数据库连接池 lombok 总结 前言 主要介绍了Mybatis的基本使用、JDBC、数据库连接…...

reader-lm:小模型 html转markdown

参考: https://huggingface.co/jinaai/reader-lm-0.5b 在线demo: https://colab.research.google.com/drive/1wXWyj5hOxEHY6WeHbOwEzYAC0WB1I5uA#scrollTo0mG9ISzHOuKK 输入网址:https://www.galaxy-geely.com/E5 结果: 代码…...

进击J6:ResNeXt-50实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 阅读ResNeXt论文,了解作者的构建思路对比之前介绍的ResNet50V2、DenseNet算法使用ResNeXt-50算法完成猴痘病识别 二、实…...

新代机床采集数据

新代集團1995年成立於台灣新竹,事業版圖遍布全球,以台灣為中心向外發展,據點橫跨歐洲、美洲、亞洲三大洲。新代長期深耕於機床控制器的軟體及硬體技術研發,專注於運動控制領域,目前已成為亞太市場中深具影響力的控制器領導品牌之一。主營產品包括:機床數控系統、伺服驅動…...

景联文科技:专业数据标注公司,推动AI技术革新

数据标注作为AI技术发展的重要支撑,对于训练高质量的机器学习模型以及推动应用领域的创新具有不可替代的作用。 景联文科技作为专业的数据标注公司,致力于提供专业的数据标注服务,帮助客户解决AI链条中的数据处理难题,共同推动人工…...

k8s以及prometheus

#生成控制器文件并建立控制器 [rootk8s-master ~]# kubectl create deployment bwmis --image timinglee/myapp:v1 --replicas 2 --dry-runclient -o yaml > bwmis.yaml [rootk8s-master ~]# kubectl expose deployment bwmis --port 80 --target-port 80 --dry-runclient…...

android 权限说明

1. 权限的定义语法 注&#xff1a; 任何应用都可以定义权限 <permission 标签是定义权限 <uses-permission 标签是使用权限。 <permission android:description"string resource"android:icon"drawable resource"android:label"string res…...

<winsock>重叠IO模型

基于事件判断io完成 send程序 #include <stdio.h> #include <winsock2.h>#pragma comment(lib, "Ws2_32.lib") #pragma warning(disable : 4996)int main() {WSADATA wsaData;if (WSAStartup(MAKEWORD(2, 2), &wsaData) ! 0){printf("WSAStart…...

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化

Android Tools | 如何使用Draw.io助力Android开发&#xff1a;从UI设计到流程优化 1. 引言 在Android开发中&#xff0c;视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大&#xff0c;但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具&#xff…...

Java 每日一刊(第5期):变量守护者

前言 这里是分享 Java 相关内容的专刊&#xff0c;每日一更。 本期将为大家带来以下内容&#xff1a; 量子数据宇宙的变量守护者第一章&#xff1a;能源错配与基本数据类型第二章&#xff1a;引用类型与通讯网络的崩溃第三章&#xff1a;作用域冲突与系统崩溃终章&#xff1…...

【C++二分查找】2517. 礼盒的最大甜蜜度

本文涉及的基础知识点 C二分查找 贪心&#xff08;决策包容性) LeetCode 2517. 礼盒的最大甜蜜度 给你一个正整数数组 price &#xff0c;其中 price[i] 表示第 i 类糖果的价格&#xff0c;另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼…...

【详解】数据库E-R图——医院计算机管理系统

题目 某医院病房计算机管理中需要如下信息&#xff1a; 科室&#xff1a;科室名&#xff0c;科室地址&#xff0c;科室电话&#xff0c;医生姓名 病房&#xff1a;病房号&#xff0c;床位号&#xff0c;所属科室名 医生&#xff1a;工作证号&#xff0c;姓名&#xff0c;性别&a…...

分类预测|基于改进的灰狼IGWO优化支持向量机SVM的数据分类预测matlab程序 改进策略:Cat混沌与高斯变异

分类预测|基于改进的灰狼IGWO优化支持向量机SVM的数据分类预测matlab程序 改进策略&#xff1a;Cat混沌与高斯变异 文章目录 一、基本原理原理流程1. **定义目标函数**2. **初始化GWO**3. **评估适应度**4. **更新狼的位置**5. **更新狼的等级**6. **重复迭代**7. **选择最佳解…...

圆锥曲线练习

设 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A\left( x_{1}, y_{1} \right), B\left( x_{2}, y_{2} \right) A(x1​,y1​),B(x2​,y2​) l : y k ( x 2 ) l: y k\left( x2 \right) l:yk(x2) 显然 y 0 y0 y0符合题意 当 k ≠ 0 k\neq 0 k0 联立 l l l和 C C C ( k 2 1 2 ) x…...

STM32时钟树

1 什么是时钟 2 时钟数简图...

NX—UI界面生成的文件在VS上的设置

UI界面保存生成的三个文件 打开VS创建项目&#xff0c;删除自动生成的cpp文件&#xff0c;将生成的hpp和cpp文件拷贝到项目的目录下&#xff0c;并且在VS项目中添加现有项目。 修改VS的输出路径&#xff0c;项目右键选择属性&#xff0c;链接器中的常规&#xff0c;文件路径D:…...

Wine容器内程序执行sh脚本问题研究

问题背景 wpf程序在wine环境执行sh脚本&#xff0c;不能等待脚本执行完成自动退出的问题进行了研究&#xff0c;需求很简单&#xff0c;在wpf程序使用cmd&#xff0c;或者bat &#xff0c;又或者是直接执行sh脚本&#xff0c;想到脚本执行完成才处理后面的逻辑。但是实际验证过…...

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录 一、模型匹配 1、什么是模型匹配 2、步骤 1&#xff09;提取模型的特征 2&#xff09;在图像中查找特征点 3&#xff09;进行特征匹配 4&#xff09;模型匹配 3、参数及用法 1、用法 2、参数 1&#xff09;image&#xff1a;待搜索对象 2&#xff09;templ&am…...

Java XML

1、XML文件介绍 配置文件&#xff1a;用来保存设置的一些东西。 拿IDEA来举例&#xff0c;比如设置的背景图片&#xff0c;字体信息&#xff0c;字号信息和主题信息等等。 &#xff08;1&#xff09;以前是用txt保存的&#xff0c;没有任何优点&#xff0c;而且不利于阅读&a…...

好用的视频压缩工具有哪些?这4款千万不要错过

视频压缩的方法有很多种&#xff0c;像我们手机里的视频剪辑工具&#xff0c;手机和电脑自带的压缩功能&#xff0c;在线压缩网站&#xff0c;专业压缩软件压缩等等。不同的场景和需求下大家可以选择不同的工具&#xff0c;但是如果碰到需要大量和经常压缩视频的话&#xff0c;…...

【Python爬虫系列】_016.关于登录和验证码

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…...

基于opencv实现双目立体匹配点云距离

双目相机或两个单目相机。 一、相机标定 MATLAB软件&#xff0c;打开双目标定app。 点击add images&#xff0c;弹出加载图像的窗口&#xff0c;分别导入左图和右图&#xff0c;设置黑白格长度&#xff08;标定板的长度一般为20&#xff09;。 点击确定&#xff0c;弹出加载…...

RabbitMQ高级篇,进阶内容

强烈建议在看本篇博客之前快速浏览文章&#xff1a;RabbitMQ基础有这一篇就够了 RabbitMQ高级篇 0. 前言1. 发送者的可靠性1.1 生产者重试机制1.2 生产者确认机制1.3 实现生产者确认 2. MQ的可靠性2.1 MQ持久化2.2 LazyQueue 3. 消费者的可靠性3.1 消费者确认机制3.2 失败重试策…...

STM32重定义printf,实现串口打印

在“usart.c”文件中加入以下代码 #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);return ch; }…...

项目进度

变为负进度了&#xff0c;还是要用baseservlet&#xff0c;我就又重新写了一部分&#xff0c;看了好几遍视频&#xff0c;突然就想明白了&#xff0c;感觉每次要上课&#xff0c;就时间不连续思路总是断&#xff0c;今天晚自习算是搞懂了怎么写了&#xff0c;就是代码有点多&am…...