你听说过LabVIEW吗?

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从多个角度有一个初步的介绍,后续也会再梳理更多的实际开发示例,更多嵌入式、无线通信硬核技术分享,职业发展、实战项目,在 vx gzh “技塑未来”。

猜你喜欢

转载自blog.csdn.net/suxiang198/article/details/128031103
今日推荐