你听说过LabVIEW吗?

news2025/8/11 6:30:05

LabVIEW是美国国家仪器公司NI的图形化的编程语言,LabVIEW的全称是Laboratory Virtual Instrument Engineering Workbench,平时我们常见的Python、C/C++、Java编程语言虽然也分编译型语言和解释型语言、底层语言和高级语言等,但基本都是文字形式的程序编写,需要掌握其语言特定的语法来实现程序特定的功能,而LabVIEW则是由一个个图形化的模块加上模块上的输入输出端子,根据其特定的规则进行相互连线,即可实现程序的功能。本文将对LabVIEW进行一个全局的介绍,以助快速了解什么是LabVIEW,后续也会继续讲解LabVIEW的一些具体用法和项目开发的实践示例。

如果您觉得本文有助于进一步了解LabVIEW,或者想更加深入学习LabVIEW,可以文章底部公众号消息私信回复我,将为您发送整理好的系列学习资料和项目实例。

一 LabVIEW编程语言的地位

在大学期间,我有机会获得了LabVIEW的CLAD证书(Certified LabVIEW Associate Developer),证书的模样见下图(比CLAD更高阶的认证是CLA,这些认证都是需要付费的,然后参加相关的考试并通过后,获取证书)。在学校竞赛和工作中,用LabVIEW开发过多个自动化检测和测试的项目,以及结合有使用其他编程语言开发过诸多项目的经历,对LabVIEW结合自己的使用情况做一些体会分享。

我的CLAD证书

关于LabVIEW编程语言的地位,首先可以参考TIOBE的程序语言排行榜,每个月都会更新,当前最新排名,LabVIEW排在第44位。之前的排名我也经常关注,LabVIEW基本上是在40~50之间,基本不会怎么变动。

图源:tiobe官方网站

从LabVIEW的排名可以看出,LabVIEW并不常用,甚至不少开发者都没听说过。但是LabVIEW又有一定的市场,特别是在仪器仪表领域,在许多的科研院所、工业领域有非常重要的应用。

“软件即仪器”是LabVIEW的初衷,也是LabVIEW所提倡的“虚拟仪器”技术,即LabVIEW最为常见的开发场景是结合NI的硬件仪器,在PC上用LabVIEW快速开发应用和美观的界面,比如通过一个高速采集卡,搭配上不同的LabVIEW程序,可以作为示波器、信号发生器、逻辑分析仪等等各类基础的仪器仪表。

当然除了软硬件一体的系统快速搭建,也可以用LabVIEW来快速入门学习编程,因为图形化的编程方式,可以先不用了解那么多语法规则,但是可以直观的看到程序的流程的组合编写,在调试时还能实时看到数据在流程里面的流向,对于编程初学者而言,能够快速建立计算机程序运行的直观概念,再去学习其他编程语言时也能较快速的迁移。

当然LabVIEW并非广泛应用,也有其不便利的地方,比如仅安装LabVIEW编程环境,就需要以G为单位的存储空间,及时编写一个很小功能的程序,也需要完成基础的环境安装。因此许多普通的硬件设备上是没法发布和运行LabVIEW的程序的,虽然LabVIEW提供了转为C代码的功能,但是转换后的代码很难看懂其逻辑,功能也很难做到转换后即可用,所以LabVIEW是对机器硬件性能有比较高的要求的,当前的许多嵌入式设备和系统肯定是无法使用。因此在仪器仪表领域,通过LabVIEW开发高性能设备和仪器来做特定的用途,或对其他设备的生产和品质做标定是适合的,因此这些因素限制了LabVIEW的应用领域。

另外还有一点也可能限制LabVIEW的推广应用,它是收费的,向Python、C/C++、Java开发环境一般都是免费使用,有的甚至还是开源的,而LabVIEW是需要付费激活的,而且其中一些模块还需要再另外收费:

关于LabVIEW的基础编程知识,可以关注并私信我获取相关的学习资料,另外网上也能找到不少视频学习的教程。关于基础的这块本文就不再赘述了,接下来对LabVIEW中印象比较深的几个点做些梳理介绍。

二 LabVIEW里的特殊“变体”

LabVIEW中有一种特殊的数据类型叫做变体。LabVIEW官方将变体称为可以容纳所有数据类型的一个容器,可以传入几乎所有的其他数据类型,比如可以将某个数值转换为变体,然后再通过相应的变体至数值转换即可得到原来的值了。变体有许多很好的用处,但是编程也容易出问题。

2.1 什么是变体?

变体其实存储了两部分内容,第一部分是数据类型的描述,第二部分就是数值本身的存储了,因此在将数据类型的值转为变体时,不仅存储了该值,还有相应类型的描述。在从变体转为数据类型时,需要知道原来的数据类型,然后与之匹配转换出原值。这个功能看似将数据转来转去,多此一举,而且数据类型弄错就会导致错误的数据,但是变体是非常有用的,就像C语言中的万能指针一样,当不确定需要传入的数据为何种类型时,其使用价值就体现出来了。可能LabVIEW更多的像C语言一些,虽然也有面向对象部分的功能,但数据流的形式更加接近于过程控制。

2.2 变体的使用注意

其一是在传入数据类型不确定时使用变体,另外一点就是对ActiveX控件数据的传输,比如MSCOMM控件,还有数据库相关的DCT工具中数据的存取等,都用到的是变体。

变体使用的最大问题是数据类型的确定,这也是变体的本身的属性决定的。许多时候比如在使用ActiveX控件的时候,并不知道变体是如何将数据转换成更加底层的数据的,也就是只要使用到变体至数值或者是数值至变体中的一个,变体是从ActiveX中传来的,这时就必须详细的了解该ActiveX变体所支持的数据类型了,否则编程中会出现非常奇怪的数据错误问题。比如该ActiveX控件的变体只支持字符串和一维字节数组的传入,但由于没有了解到这一点,在编程时给ActiveX控件变体传入了float型数值,程序上并没有错误,但是ActiveX控件得到的数据并非需要的,经过转换后得到的是错误的数值,结果就出现莫名其妙的问题了。

三 一个示例:如何编写保存二进制文件的程序

这里以一个实际的LabVIEW编程实例,来说明LabVIEW的图形化程序到底是如何编写的。这里以在LabVIEW中编程将需要的一些数据保存为二进制文件为例,这里二进制文件后缀名取为.bin。

如下为实例实现的流程说明:

  1. “写入二进制文件VI”中文件,数据,字节顺序,预置数组或字符串大小在帮助文档中都有详细说明,我使用的是Windows操作系统,字节顺序一般都选择endian。

  1. “写入二进制文件VI”的“文件”输入有两种,一种是直接连接文件路径,另一种是打开或创建的文件的引用。下图是直接连接文件路径开始写入:

下图则是连接文件的引用:


这两种方式是有区别的,使用文件路径输入则是从创建或打开的文件开始进行写入,而使用引用输入则是接在前者后面继续写入(这一点在帮助文档中也有说明)。

  1. LabVIEW中支持路径和引用的相互转换,路径转换为引用使用“文件IO”下的“打开/创建/替换”VI:


而引用转换为路径使用“文件IO”中“高级文件函数”中的“引用句柄至路径转换”:

  1. 对于写入的二进制文件的验证,由于无法直接用文本编辑器查看(与.txt, .xml等文本文件不同),测试一般使用获取其字节大小来验证写入内容是否成功,该VI位于“文件IO”中“高级文件函数”下。

本文希望对LabVIEW从多个角度有一个初步的介绍,后续也会再梳理更多的实际开发示例,欢迎持续关注。

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

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

相关文章

[附源码]java毕业设计疫情状态下病房管理平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring 如何解决循环依赖

1.什么是循环依赖? 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如A引用B,B引用C,C引用A,则它们最终反映为一个环。 我们这里以两个类A和B为例进行讲解,如下是A和B的声明&a…

MCE | 丙型肝炎病毒的终结之路

Harvey J. Alter 对输血相关性肝炎的系统研究表明,一种未知病毒是慢性肝炎的常见病因;Michael Houghton 使用了一种未经验证的策略,分离了新病毒丙型肝炎病毒 (Hepatitis C virus) 的基因组;Charles M. Rice 提供了最终的证据&…

C语言源代码系列-管理系统之会员计费系统

往期文章分享点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过…

【附源码】计算机毕业设计JAVA疫情期间物资分派管理系统

【附源码】计算机毕业设计JAVA疫情期间物资分派管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: …

FEDformer里面的CZ1d

这里的x是传入的value,是(1,24,128,8)维度的。 然后,他提取的extra_x的维度是(1,8,128,8)这个维度的。 然后,下一步,将这两个xcat起来,不知道在干啥。 因为本来的x是&…

赵本山最有钱徒弟,曾经入股宾利投资吴京,如今又盯上歌手腾格尔

有句话叫作:过了山海关,都找赵本山。说明本山大叔在东北影响很大,其实他的徒弟也不弱。赵本山老师作为央视春晚小品王,手下弟子没有三千也有八百,个个都是出来拔萃身怀绝技。 这些人之所以拜本山大叔为师,无…

[附源码]java毕业设计医药管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Teracloud+GoodSync

TeracloudGoodSync 前言 Teracloud除了存文献外,它还是个云盘,可以搭配各种同步软件使用,之前在博客多终端云同步文献管理:ZoteroTeraCloud(WindowsAndroid)里提到用同步软件搭配Teracloud使用&#xff0…

使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)

经过几位下载同学的反应、大部分运行未成功的原因有以下几点、特此记录以下。代码是完全没有问题的 项目地址:https://download.csdn.net/download/weixin_43304253/85811914 代码运行环境: tomcat:8 IDEA:2020 JDK:1…

vue.js毕业设计,基于vue.js前后端分离在线考试系统设计与实现(H5移动项目)

功能介绍 用户首次登陆系统需要注册一个用户或直接使用微信作为账号,用户在登录平台后,可以进行平台的操作。主要模块包括以下几点: 注册登录功能:注册普通账号登录;也可以直接使用微信登录;登录后可以修改…

【MySQL进阶】单表访问方法

【MySQL进阶】单表访问方法 文章目录【MySQL进阶】单表访问方法一:访问方法(access method)1:const2:ref3:ref_or_null4:range5:index6:all二:注意事项1&…

黑马点评--Redis消息队列

Redis消息队列 Redis消息队列实现异步秒杀 消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Br…

这就是你了解的指针吗?

小叮当的任意门——指针1. 指针是什么?2. 指针和指针类型1. 指针-整数2. 指针的解引用3. 野指针1. 野指针的成因未初始指针越界访问指针指向的空间释放2. 如何规避野指针4. 指针运算指针减指针指针的关系运算5. 二级指针6. 指针数组1. 指针是什么? 在讲指…

内核的架构 --- 宏内核与微内核

宏内核 宏内核就是把进程管理代码、 内存管理代码、 设备管理代码、 文件管理代码、 各种设备驱动程序代码以及其 他功能模块的代码经过编译, 最后链接在一起, 形成一个大的可执行程序。 这个大程序里有实现支持这些功能的所有代码, 向用户应…

Spring Cloud Nacos 2021使用LoadBalancer做负载均衡

项目源码&#xff1a;https://download.csdn.net/download/weixin_42950079/87150709 Spring Cloud Nacos 2021 移除了 Ribbon&#xff0c;在Spring Cloud Commons 项目中添加了 Spring Cloud LoadBalancer 作为新的负载均衡器 <dependency><groupId>com.alibaba.…

html实现好看的导航主页(附源码)

文章目录1.设计来源1.1 主界面1.2 底部导航1.3 屏幕保护2.效果和源码2.1 动态效果2.2 源代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/128028326 html实现好看的导航主页(附源码) html实现好看的导航主页&…

印度富士康的iPhone产能在扩产,对中国制造将产生深远影响

郑州富士康生产iPhone再次受到影响&#xff0c;这让业界想起当下在国内越来越多见的印度制造的iPhone14&#xff0c;业界猜测苹果和富士康将加快印度产能扩张的进程&#xff0c;推动印度制造的iPhone占比加速提升。目前苹果的三大代工厂中的纬创和富士康都已在印度设厂生产iPho…

关于我给dumi2.0提pr的完整记录

前言 博主最近一年时间在工作业余都在写开源组件库 concis &#xff0c;其中文档站点生成框架采取了 dumi&#xff0c;前几天不久dumi2.0正式发布&#xff0c;博主也是顺势而为直接把项目升级&#xff08;dumi1 -> dumi2&#xff09; 由于dumi2 的站点设计比原来好看太多了…

nios烧写到EPCS的问题处理

原理图如下图&#xff0c;板卡FPGA同时使用2片flash配置芯片&#xff0c;左侧M25P64即EPCS64。2片flash配置芯片使用相同的SPI总线。 在不使用nios的quartus工程中&#xff0c;使用jtag烧写jic的方式固化程序到EPCS64&#xff0c;始终正常。 近期使用含有nios的quartus工程&am…