目录

实例说明

编程思路

程序框图设计


在LabVIEW高级编程技巧中,基于状态机的架构是一种常用的程序框架结构之一,也是一种通用的设计模式。

在状态机程序架构中包含了有限个运行状态,这些运行状态可通过一定的条件进行组合反复执行,或者在状态之间进行任意切换执行。

下面通过一个例子,基于while循环、条件结构、事件结构及移位寄存器等基本编程知识点,演示在LabVIEW中如何实现状态机的程序框架架构。

一、实例说明

为演示状态机的编程实现,这儿模拟了某个工作场景,在这个场景中需要执行2个任务,这2个任务可由5个子任务(分别为子任务1、子任务2、子任务3、子任务4、子任务5)完成,在状态机结构中可将这5个子任务理解为5个不同的状态。其中,执行任务1时需要依次执行子任务1、子任务2、子任务4完成,执行任务2时需要依次执行子任务2、子任务3、子任务5完成,其前面板运行界面如下图所示:

在上图中,点击按钮“执行任务1”“执行任务2”时可执行对应的任务,同时在右侧“系统运行记录”控件中显示了当前任务执行中的各个状态情况。此外,点击“清空记录”按钮可清空右侧“系统运行记录”控件的内容。

二、编程思路

程序主框架使用while循环、条件结构、事件结构及移位寄存器的组合方式。

(1)、While循环维持状态机的运行,同时,配合使用移位寄存器实现一个或多个状态的选择,进而执行相应的代码。

(2)、条件结构中根据不同的状态实现相应的功能代码。

(3)、事件结构的功能是,根据前面板产生的事件,组合对应的状态,切换执行对应的代码。

下面看下具体的程序框图代码实现。

三、程序框图设计

1、程序框图主代码

程序框图主代码使用了while循环、条件结构、事件结构及移位寄存器,如下图所示:

在while循环上使用了2个移位寄存器,其中,上面一个存储完成某任务时需要执行的所有状态;下面一个的目的是显示当前系统运行状态的记录情况,用来存储前面已有的记录,与状态机无关。

由于状态寄存器中存储了多个运行状态,是一个字符串类型,包含了多行字符串内容,每一行字符串对应了一个具体的运行状态,因此,这儿使用了“匹配模式”函数来解析每个运行状态,其函数原型说明如下图所示:

正则表达式参数输入“[\r\n]+”即根据回车换行符匹配出第一行的内容,作为当前要执行的状态输入到选择结构中,然后执行具体的代码。输出参数“子字符串之后”即为剩下的还未执行的所有状态,然后继续在状态机中解析直到执行完所有的状态即可。

2、条件结构框图代码

条件结构中负责每个状态的具体功能代码实现。本例中,共包含如下条件分支:

LabVIEW编程技巧:手把手教你实现基于状态机的程序框架架构 (baidu.com)

LabVIEW编程技巧:手把手教你实现基于状态机的程序框架架构相关推荐

  1. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  2. 手把手教你:基于TensorFlow的语音识别系统

    系列文章 第十章.手把手教你:基于Django的用户画像可视化系统 第九章.手把手教你:个人信贷违约预测模型 第八章.手把手教你:基于LSTM的股票预测系统 目录 系列文章 一.项目简介 二.语音数据 ...

  3. 手把手教你:基于LSTM的股票预测系统

    系列文章 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 第六章.手把手教你:人脸识别的视频打码 第五章.手把手教你:基于深度学习的滚动轴承故障诊断 目录 系列文章 一.项目简 ...

  4. LabVIEW编程技巧:如何制作安装包程序

    目录 一.LabVIEW中制作安装程序的方法 二.生成应用程序(EXE程序) 二.制作安装包程序 三.总结 当我们在LabVIEW平台上辛辛苦苦编写完成测试软件程序时,一般很少情况将程序源代码分发给用 ...

  5. 手把手教你:基于深度残差网络(ResNet)的水果分类识别系统

    系列文章 手把手教你:图像识别的垃圾分类系统 手把手教你:人脸识别考勤系统 手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类 目录 系列文章 一.项目简介 二.水果分类结果 ...

  6. 手把手教你:基于Django的用户画像可视化系统

    系列文章 第九章.手把手教你:个人信贷违约预测模型 第八章.手把手教你:基于LSTM的股票预测系统 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 目录 系列文章 一.项目简介 ...

  7. 手把手教你写个微信小程序

    手把手教你写个微信小程序 很多人看完bmob快速入门,并完成了bmob的基本配置之后依然不知道如何下手去写自己的代码,那么跟着我一起来一步一步做个小程序吧. 工具:Bmob后端云 新建小程序项目 一. ...

  8. 手把手教你搭个Frida + Sekiro Rpc框架

    一.目标 联手机签名是个比较取巧的方案,之前我们介绍过 android连真机签名公网ip更新方案 http://91fans.com.cn/post/androidipsend/ Sekiro + X ...

  9. 基于状态机的游戏框架

    一 定义 有限状态机就是一个具有有限数量状态, 而且可以依据对应的操作从一个状态变换到还有一个状态. 而在同一时刻仅仅能处在一种状态下的智能体. 英文:Finite State Machine 简称: ...

  10. VC++基于MFC的程序框架剖析(前言)

    目录 基于MFC的程序框架剖析 MFC类组织结构图:层次结构图 接上:VC++MFC应用程序向导 接下:VC++MFC程序中的WinMain函数(一) 基于MFC的程序框架剖析 MFC库是开发Wind ...

最新文章

  1. 一个流畅的iOS图表框架PNChart
  2. android systemtrace 报错
  3. python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
  4. python下载图片-python下载百度图片,python图片下载程序
  5. 解决This picacion faied to trt becuse t could, not find or load the Qt platform plugin “windows““问题
  6. Defination list(定义列表)
  7. CCNA-第六篇-静态路由+动态路由开头
  8. 3-2:常见任务和主要工具之存储介质
  9. CAP定理(CAP theorem)
  10. python转置列表代码_转置字典(从字典列表中提取一个键的所有值)
  11. MOQL—筛选器(Selector)(一)
  12. 传统梯度下降法面临的挑战
  13. 时频分析 matlab 例程,《Matlab时频分析及其应用》的详细代码
  14. 多店进销存管理系统源码本源码亲测可用
  15. 虚拟数字人的“风”,从“工业级”吹向“消费级”
  16. golang的json的时间格式化解决方案
  17. CDN加速是什么?具体有什么用?
  18. 360 2019校招笔试题第一题 表面积
  19. Hutool工具生成二维码
  20. 以Vigoss、Perp、dydx为例,解析衍生品在DeFi2.0进程里的演进

热门文章

  1. 服务器英文系统怎么切中文,云服务器怎么把英文改成中文
  2. 关于用WinHex解析vm虚拟机的.vmdk文件。
  3. ins图片视频批量下载
  4. python多元回归因子选取_用Python进行多元线性回归分析(附代码)
  5. 两种曲线下面积AUC(Area Under the ROC Curve):ROC-AUC、PR-AUC(性能度量)
  6. git 拉取最新代码
  7. 计算机英语词汇汇总,计算机英语词汇汇总
  8. 智能识别系统设计---图像特征提取
  9. php mb_eregi_replace 只替换一个,php正则ereg ereg_replace eregi eregi_replace split
  10. OpenCV:图像的基本操作之修改像素、拆分及合并RGB通道