基于 LabVIEW 的数据采集与处理软件编程技巧
燕 延1 马增强1 杨明1
(1 石家庄铁道学院 计算机系, 石家庄 050043 )
摘要:针对基于 LabVIEW 平台的数据采集和数据处理程序设计中,常遇到的典型应用中的问题如:基于 TCP 的网络传
输、软件滤波、数组组合、波形振幅统计、超限报警等问题,本文给出了较详细的解决方案和实用程序设计技巧。
关键字: LabVIEW 数据采集 数据处理
中图分类号: TM93 文献标识码: A
1、 引言
LabVIEW 是美国 NI 公司推出的一个图形化软件开发环境,与其它软件平台相比,它的最大优势在于
测控系统的开发,因为它不仅提供了几乎所有经典的信号处理函数和大量现代的高级信号分析工具,而且
LabVIEW 程序还非常容易和各种数据采集硬件集成,可以和多种主流的工业现场总线通讯以及与大多数
通用标准的实时数据库链接。在 LabVIEW 平台上,笔者多年从事数据采集和处理软件的开发工作,在总
结编程经验的基础上写成本文,希望能和各位同行交流。
2、 数据采集和处理中的常见问题及编程技巧
(1)基于 TCP 的网络传输数据的处理:LabVIEW 可以通过采用 TCP/IP 节点实现局域网通信,TCP/IP
节点在功能模块板→Communication→TCP 子模块中。在网络数据采集中,上位机作为客户端,当数据采
集条件满足时,与远程现场数据采集站建立 TCP 连接(每个数据采集站都有独立的 IP 地址和端口号),在
实际应用当中,发现由于各种原因造成的网络故障导致不能正确实现连接的情况时有发生,特别是在调试
阶段,由于需要经常插拔或触动网线,造成接触不良等问题,使 TCP 连接不畅,所以在软件设计上,加上
TCP 握手次数计数,若超过指定次数仍不能正确连接,则放弃与这个测站的通信,并给出声音报警信息,
提示维护人员进行网络维护。
网络正确链接后,采用两个TCP Read节点读数据,第一个节点读出上传数据包的长度,这里要注意
数据包长所占字节数和数据类型要严格按照通信双方事先约定的格式进行(如双方约定包长和数据均用I16
类型(两字节有符号数)),则用TCP Read接点的bytes to read参数就设为 2,由于 TCP读出的数据类
型为字符型,将其按I16 类型转换成数字类型包长值,如约定每通道的数据均为I16 类型,则数采站每扫描
16 通道一次就将数据打包上传,则包长值为 32 字节,将包长值传给第二个TCP Read节点,它将后继的
32 个字节数据全部读出,并按约定的I16 类型进行转换,然后再将数据按通道进行拆分处理、单位换算、
波形显示、提取最大值、报警处理等。如图 1 所示。
图 1 TCP 接收及数据处理程序框图
http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛
在各种LabVIEW书籍及演示示例中第一个 TCP Read节点的bytes to read参数均为 4 且类型都为I32,
它适合于PC机对PC机间的TCP传输,如果在实际应用当中,传输的数据类型不是I32 类型的,注意此参
数的正确修改,否则读出的数据是错误的。
(2)软件滤波:在数据采集处理中,经常发现数据波形毛刺很多,这一般是各种电磁干扰、接触不
良等原因引起,除了在硬件上采取相应措施外,在软件上也可采取一些措施以剔除毛刺,使波形看起来比
较光滑,软件滤波程序如图 2 所示。这里引入输出值的本地变量,利用本地变量的性质(它总是记录上次
给它的赋值),数采当前值与上次的数采值进行比较,若差值大于给定值(在图 2 中,给定值设为 1)则
可能有毛刺出现,此时输出值采用上次的输出值,若差值小于给定值则无毛刺出现输出采用本次采集值,
这样就可以有效地滤除尖峰状的毛刺了,给定值可根据采集物理量的前后数值的最大可能值灵活确定。
图 2 软件滤波
(3)数采数据在数组中的重新组合技巧:在数据采集程序设计中,经常需要用数组存放采集的数据,
由于存储空间的限制,数组维数不可能设置太大,所以当数组被添满后数据又从头开始依次存放,所以在
数组中存放的数据的会出现后采的数据在前,先采的数据在后的情况。当采集结束条件满足时,停止数据
采集,这时需要对数组中的数据按时间的先后顺序进行重新组合,再做后继的数据处理工作。图 3 所示的
程序能实现这一功能。为简便起见,这里设数组维数为 20,这里数采数据用循环次数 i 代替,用 stop 按钮
代替数据采集停止控制。(在实用程序中用各自的数据和控制条件取代即可)。首先给数组初始化为 0,进
入数采循环,由 i 除数组维数的余数确定数据插入数组的具体位置(下标),这样采集数据依次进入数组中,
添满后再从头添入,当采集结束条件满足时,程序退出循环,以程序退出循环时最后进入数组的元素的下
标为界,用两个 Array Subset 函数将数组拆成前后两个,前面的数组在时间上是后进入数组的,而后面的
反之,所以用 Insert Into Array 函数将两个数组重新按时间顺序重新组合,在 output array 数组中即可得到
正确的数据了。
图 3 数据组合程序
(4)振幅统计:在实际应用项目中,经常
需要统计被测量各种范围的幅值出现的次数,下
面介绍针对这种情况的一个程序设计示例。被统
计的数据可以来自文件、数据库、数组等处。图
4 和图 5 以统计存储在文件中的数据的振幅为例,
首先设置一个 flag 标志,当波形处于上升阶段时
(新值大于旧值)flag 为 True ,这时程序继续
查询直到新值不再大于旧值(此时找到正峰值),
程序进入第二个 Case 的 False 框,使相应振幅段 图 4 振幅统计前面板
的计数器加 1,并设 flag 为 False,程序进入负峰值检测阶段,当时继续检测,直到新值不再小于旧值(此
http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛
时找到负峰值)程序进入 False 框,使相应振幅段的计数器加 1,并使 flag 再次设为 True,又进入正峰值
的检测循环。。。直到将文件中的所有数据查完,即可统计出波形文件各种峰值段的出现次数。
图 5 振幅统计程序
(5)超限报警程序设计小技巧:在对被测量进行监控的程序设计中,经常需要在前面板用不同色彩
来显示被测量状态,如被测量在正常用范围内,用绿色表示,当被测量大于一定值之后系统处于预警状态,
这时一般用黄色表示,当被测量大于警戒值时,系统处于报警状态,这时要用红色表示等等。系统要求用
三种以上颜色表示不同状态的信号时,常用的布尔双色指示灯就无法完成这一功能了,这时建议用色块
Color Box (它位于 Controls>>All Controls>>Numeric>>Framed Color Box 处),用 RGB to Color.vi(在 All
functions>>Numeric>>Conversion>>RGB to Color.vi 处)设置颜色,将其输出值送色块 Color Box 即可在前
面板上看到相应的颜色输出,如图 6 所示。依此类推,通过给 RGB to Color.vi 三个输入值设置不同的参数
即可让色块显示各种期望的颜色,以满足不同场合下,对颜色数量、种类的要求。
3 结束语
图 6 报警颜色控制
以上所述的基于 LabVIEW 的数据采集和数据处理的常见问题及几种典型问题的编程技巧,均来自作者
的实际工程项目,实践证明这些方法是很实用和有效的,希望能对读者有一定的借鉴作用。
参考文献:
1.陈敏等: 虚拟仪器软件 LabVIEW 与数据采集 < 小型微型计算机系统>2001。4
2.雷振山:LabVIEW 7 Express 实用技术教程 中国铁道出版社
3.杨乐平: 程序设计与应用 电子工业出版社
4.杨乐平:LabVIEW 高级程序设计 电子工业出版社
http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛
Programming Skill of Data Acquisition and Processing
Based on LabVIEW
YanYan1 Ma Zeng Qiang1 Yang Ming1
Deparmentof Computer Shijiazhuang Railway Institute1
Abstract: The typical problems, such as networking transmission based on TCP protocols、filtering by software、
array combination、amplitude Statistic、alarming for overtake and etc, are often met in the software programming
based on LabVIEW for data acquisition and processing and the paper gives a detailed introduction to the
resolving schemes and programming skills for these questions.
Key words: LabVIEW data acquisition data processing
作者简介: 燕延 1962 年 11 月出生 女 副教授 硕士,
主要从事计算机测控技术的教学和科研工作
E_mail yanyanhello@126.com
yanyan62@eyou.com 手机: 13932168416
http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛