LabVIEW的数据存储实践

LabVIEW基于二进制(binary)流或文本(ASCII)流来存储数据。二进制(binary)流以存储速度快、所产生的文件占用硬盘空间小而称著,但是这种二进制文件一般只能由机器读取。因此,用户需要开发相应的程序,才能把二进制文件中的数据读取出来,而数据通过文本字节流保存则可以克服这个缺点,其最大好处是方便其他软件,如字处理文件或电子表格文件等来访问数据。为使用这种方式保存数据,需要将所有的数据转换为ASCII字符串。LabVIEW支持多种文件类型,在其8.2版本中,支持的文件类型已经达到10种之多,包括文本文件、表单文件、二进制文件、数据记录文件、XML文件、配置文件、波形文件、LVM文件、TDM文件以及TDMS文件等,虽然这些文件类型的操作方法不同,但是它们都是基于二进制流或文本流技术进行数据存储的。而到具体的项目上,就需要合理的选择文件存储类型。一般来说,系统的一些初始化信息可以写在配置文件中,而复杂格式的配置数据则适合使用二进制文件或XML文件;采集到的数据若数据量不大而且通道数较少则可以采用LVM文件,若数据量庞大或通道数较多并需要很好地管理,则TDM或TDMS文件更加合适;对于日志文件,最好直接以字符串形式存储为文本文件;而对于报表,则可以选择直接打印或采用HTML格式输出,LabVIEW也提供了专门的VI。
例子:有四个通道采集数据,采样率为10S/s,采样数为3S/次,现要求以文本文件类型实时保存数据,其中,第一列为采样时间,第二、三、四、五列为参数列,分别记录0、1、2、3四个通道的采样值。
图2为实现题目目标的程序代码。

图2 数据保存程序框图
提示:图2的程序代码是有点复杂罗嗦,其实,可以用下图所示的代码代替,它的实现功能与图2的一样。

最左边的波形数组包含四个成员,每个成员对应一个通道的波形数据,而一个通道的波形数据又包括采样开始时间t0,采样间隔dt和数据数组Y。(注:采样间隔dt等于采样率的倒数;数据数组Y的大小等于采样数。四个通道波形数据的t0、dt相等。)当“使能”布尔控件为真时,波形数组的数据流入case“真”分支中,该分支主要由3个for循环(分别用for 1、for 2和for 3标注)和一些数组、字符串、时间节点组成,通过调用这些功能节点,即可达到题目的要求。下面将详细介绍波形数组在case“真”分支中的执行过程。
一维波形数组通过自动索引隧道进入for 1中(共有四个通道,即自动索引4次,循环次数为4),由“获取波形成分”函数分别提取波形数据的成分,之后,dt、t0流入上面的红色虚线框图中,四个通道的数组Y流向下面的红色虚线框图。上面的框图与获取采样时间有关,下面的红色框图用于处理数组Y,先把二维数组转换为一维数组方便后续处理,再通过两次转换变为一维字符串数组输出,由for 3把一维字符串数组转为二维字符串数组输出(注:此循环的次数由最左边的一维波形数组的元素个数决定,最后输出的二维字符串数组,其行数等于一维波形数组的元素个数,列数等于数组Y的大小,即采样数),然后通过“连接字符串”把上下框图流出的数据组合成一个新的二维字符串数组,其中第一行为采样时间,第二、三、四、五行依次对应第0通道至第3通道的采样数据,再由“二维数组转置”节点把二维数组转置,这时第一列就是采样时间,其他列依次为各通道的采样数据,然后通过“数组至电子表格字符串转换”转换为ASCII字符串直接写入文本文件中。强调地,在上面的红色虚线框图中,有一个“格式化日期/时间字符串”节点,这个节点右边端子产生的时间字符串,其格式由该节点左上角的输入端子所设置的时间格式决定,图中设置的格式为%H:%M:%S%?u,字符u表示时间精度为秒的小数位,?为常量,指小数的位数,例子中由于采样率是10S/s,则0.1s采集一个数据点,那么采样时间的精度应该为0.1s,所以应在?处写上1,这时整个时间格式写成%H:%M:%S%1u,即产生的时间字符串格式为小时:分钟:秒:秒.小数位,具体见图3。
用该程序保存的文本文件的数据格式如图3所示。

图3 四通道数据存储(采样率为10S/s)
图三存储的格式非常好,类似的程序能给发一个学习么 erdongdedao@163.com 谢谢
有没有例程 有没有例程
谢谢分享。。
赞。
不错,感谢小编分享
我想做一个多路数据存储的程序,求大神指点!,我的QQ1280966100,谢谢
第三张图片可以发张清楚的吗 刚需要这块知识 谢谢啦
多谢小编,学习了 有类似的程序发个呗 htdong_he@163.com
小编,现在我急需这样的数据存储程序!您能发个到我的邮箱吗?975009914@qq.com,多谢了!
小编,能把您的这个程序发给我吗?现在我继续帮助,谢了!
很不错的资料学习中
正在学习中,特别棒,能不能给发一个,顺便交朋友一起学习1060173881@qq.com
正需要,例程能发下吗?感激不尽 fivegui@126.com
小编可不可以发个程序看仔细一下
http://bbs.elecfans.com/jishu_460511_1_1.html
谢谢楼组 学习了
谢谢,学习了。
小编,能不能把你的源程序上传一下啊,谢啦,感觉对于我这初学者非常有用,拜托啦
小编,可不可以把源程序发给我一下啊,谢啦,958890448@qq.com
你收到小编发的源程序了吗?或者你找到类似的源程序了吗?能给我发一下吗?谢啦958890448@qq.com
你有这方面的源程序吗?能给我发一下吗?958890448@qq.com,谢啦
小编给你发程序了吗?或者你有这种多通道采集的这方面的程序吗?能发给我一份源程序吗?958890448@qq.com,非常感谢
感觉对于我这初学者非常有用
1111111111111111111111111111111111
谢谢分享。。
多谢小编分享,小编好人
有没有例程 有没有例程
不错,学习了,,,,,,
可以看看学习哈
照猫画虎总有错误,能不能发上来之前的程序源码啊
很不错
来个历程看看
求个例程或者类似程序,349418492@qq.com,谢谢小编
学习一下,谢谢小编分享
发个例程看看
小编类似的程序也发我一下吧 careeryao@126.com
感觉对于我这初学者非常有用
求大神发程序啊,QQ975803256
谢谢分享
能不能把你的源程序分享一下啊?
小编有源程序吗?624817959@qq.com
怎么没有例子文件呢~~~
666666666666666666666666666666666
感谢小编分享
多谢大神的分享,努力学习中
多谢大神的分享,努力学习中
正在学习中,特别棒,
正在学习中,特别棒,
谢谢分享。。
谢谢分享。。
能发一下 源程序吗?谢谢。不方便的话,能不能发一个清楚的图作为参考。非常感谢您。
能发一下 源程序吗zqsong33@126.com?谢谢。不方便的话,能不能发一个清楚的图作为参考。非常感谢您。
现遇到一个项目就是需要采集数据后存储并加算法分析,小编方便的话请把这个程序发我邮箱吧,谢谢啦! 邮箱:350193835@qq.com
小编我也想要一下图3的例程,可以给我发一份吗?图上看不清,谢谢了!qlb@semi.ac.cn
小编大神,果然是骨灰级的。刚用labview不久,感觉这个开发工具除了提供的接口方便以外,学习就相当于学汉字,每一个字都要认识才行,看图不看程序是不行的。
