LabVIEW 标准状态机设计模式

LabVIEW 标准状态机设计模式

LabVIEW 软件框架介绍

源于虚拟仪器技术的LabVIEW程序设计语言,从被创建开始就是面向测量和应用的,并且绝大多数采用LabVIEW开发的应用程序都同测控仪器等硬件设备紧密结合。虽然这些设备的类型和规模各不相同,应用领域的差异也很大,但从测量和控制过程的基本步骤来看,绝大多数的LabVIEWV程序的基本框架是有章可循的,具有一定的模式特征。

多数的测量系统的应用程序框架可以分为8部分,包括初始化、打开会话、获取数据、分析数据、显示/存储数据等,如右图所示:

LabVIEW编程模式及其应用分析

LabVIEW是采用了独特的图形化数据流的编程模式,这种编程模式类似于传统的面向过程编程模式,。同样通过程序执行控制结构和子程序等组件来构成整个程序的框架。而这种图形化数据流的编程模式又与传统的文本的顺序执行有所不同,LabVIEW程序框图中节点间的数据流确定了代码的执行次序,这使得互不关联的代码可以简章地建立并行性程序。

基于这种图形化数据流的编程模式,在大量开发实践的基础上,为满足各种不同的应用需求,总结出了不同的程序代码框架,也就是LabVIEWV程序设计模式。

根据针对问题的不同,可以分为通用型和专用型。通用型的LabVIEW程序设计模式是针对一般性测量控制应用程序提出的,而专用型的LabVIEW程序设计模式是针对某些特殊的应用或应用中某些特殊功能提出的解决方案。

状态机模式的类型分析

按照两种类型分类,各种类型又分别包含以下几种设计模式:
通用型:主要包括状态机模式、消息队列模式和用户界面事件模式。
专用型:主要包括主从线程模式、生产消费模式、后台服务模式、异常处理模式和代理模式。

绝大多数的测试测量系统在运行时需要从一个状态转换到另一个状态,或者在不同的状态之间互相切换,直至结来。因此状态机模式作为一种典型的类顺序结构方式,被广泛应用于各种自动化测试系统申。状态机具有3个基本的要求:状态、事件和动作。任何一个状态机的执行都离不开这三个要素。

状态的选择是保证其他步骤有条不紊进行的前提,通常把程序需要经历的状态称做一个"状态序列",它描述了程序当前的运行情况。在设计可交互式状态序列时,"等待是一个必不可少的状态,因为常有一个状态需要等待用户"确认",这个状态决定了下一个状态,这取决于与外部对象的交互。

状态机在控制状态的同时,与各个状态对应的事件也会随之触发。

动作是事件的响应,当一个事件发生时,状态机会决定应该执行什么样的动作,这主要取决于目前所处的状态和发生的事件。

顺序型状态机是最简单的一种状态机结构,它和顺序结构等价。在状态机的基本架上,将循环索引端连接到Case结构的选择端口上,并在最后一个Case子框图中控制循环结束。

标准状态机设计模式及状态机应用学习

顺序型状态机是最简单的一种状态机结构,它和顺序结构等价。在状态机的基本构架上,将循环索引端连接到Case结构的选择端口上,并在最后一个Case子框图中控制循环结束。

顺序结构它的一个缺点是什么?

就是说当它每一个分支执行的条件是前一个分支必须执行完。如果说前一个分支没有执行完,那么后面的分支将永远不会被执行,直到前面一个分支执行完。这样就不便于我们程序的一个状态的一个跳转。如果在一个环节产生问题,那么程序可能会卡死在这个顺序结构里面。

我们使用顺序型状态机模式的话,就不会出现顺序结构的一种缺点。

注意:最下一条线是通过移位寄存器传递的时间,得出时间差。最上一条线是程序的转移过程,但是图的枚举转移中是否有误?

状态机结构

进行第一次运行。首先因为有条件分支,那么它第一次会跳到初始化的条件分支里面来。初始化条件分支你们的代码执行完毕之后,它就会跳到下一个分支。

跳到等待事件这个分支里面来。

等待事件有多条分支如下图所示:

通过事件的内容赋值给移位寄存器, 当while循环下一次执行的时候, 这边出来的就是"State 1"。

State 1",正在运行的文本,然后弹出一个提示对话框。当它执行完毕之后,他又会跳回到执行事件等待事件分支。

如果事件分支里 跳到"State 2"。

State 2",弹出一个提示对话框。然后选择跳转那个事件分支里


以上状态机结束了

相关推荐
三水不滴6 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [drivers][i2c]i2c-dev
linux·笔记·学习
土拨鼠烧电路7 小时前
笔记03:业务语言速成:“人、货、场”模型与IT系统全景图
笔记
2301_812731418 小时前
CSS3笔记
前端·笔记·css3
越努力越幸运5088 小时前
CSS3学习之网格布局grid
前端·学习·css3
chillxiaohan8 小时前
GO学习记录——多文件调用
开发语言·学习·golang
小乔的编程内容分享站9 小时前
记录使用VSCode调试含scanf()的C语言程序出现的两个问题
c语言·开发语言·笔记·vscode
中屹指纹浏览器10 小时前
2026年指纹浏览器技术迭代与风控对抗演进
经验分享·笔记
1104.北光c°10 小时前
【从零开始学Redis | 第一篇】Redis常用数据结构与基础
java·开发语言·spring boot·redis·笔记·spring·nosql
Funny_AI_LAB10 小时前
AI Agent最新重磅综述:迈向高效智能体,记忆、工具学习和规划综述
人工智能·学习·算法·语言模型·agi