上天不会亏待努力的人,也不会同情假勤奋的人,你有多努力,时光它知道!
一、 TDMS简介
我们用Labview编写上位机的过程中,一般都会遇到文件存储的问题,例如接收到下位机上传的数据,这些实时数据需要保存起来,方便以后进行数据分析。大部人的第一反应是用数据库,如果数据量不大的话,是可以用Access数据库存储数据的,但是如果存储的数据量过大,且需要实时存储,此时用数据库的话可能会导致计算机内存占用过大进而导致计算机卡顿;但是,使用TDMS方式存储实时数据就不会出现这个问题。
TDMS全称Technical Document Management System,最早是机务工程维修中高效管理技术资料等数据的计算机管理系统。而TDMS文件是NI公司推出的数据管理系统,以二进制方式存储数据,文件很小,速度很快,可以很好的解决实时数据的存储问题。TDMS文件分为文件、通道组和通道三个部分,至于它们之间的逻辑结构到底什么关系,我们不用过于深究,看看下面实例就明白了。
二、 实战练习
Labview提供的TDMS文件函数选板,位于“文件I/O”--“TDMS”中。下面再来看看如何具体使用TDMS文件来存储数据。
1、 简单文件读/写
①我们先来看下如何使用TDMS文件存储一个随机数,实现如下:
这个程序比较简单,主要就是将一个随机数存入Test1.tdms这个文件中,一秒存一个数,由于TDMS文件是以二进制方式存储文件的,我们可以看到,在当前VI路径的文件夹下,出现了两个文件:
其中index后缀那个文件是索引用的,先不用管他,数据主要存储在Test1.tdms这个文件中,一般情况下可以用Excel表格打开,但是我的电脑好像不行,打开就乱码,见鬼了!这时候用Labview自带的“TDMS文件查看器”就可以查看该文件中存储的数据了,第一图右边部分就是“TDMS文件查看器”的查看界面,使用比较方便。
②TDMS文件同时存储不同类型的数据、如时间、字符串等,实现如下:
我们再来写个读取TDMS文件的程序,看看读取的数据是否与“TDMS文件查看器”显示的内容一致?实现方法如下:
上面的读取程序选择性读取了文件中的数据、时间数据,通过前面板的数组显示框,我们可以看到,读取的数据与上图“TDMS文件查看器”中的数据一致。
需要注意的是,“TDMS读取”函数的组名和通道名都要设置正确,否则无法读取文件数据,“TDMS读取”函数还可以设置读取数据的起始位置以及读取数据的长度,也就是设置偏移量和总数,不设置的话默认读取该通道下的所有数据。
2、 波形数据读/写
由于TDMS文件具有高速存储的特性,适用于海量数据的存储。所以TDMS文件很适合存储波形数据,还可以同时存储多组波形数据,实现方法如下:
“TDMS文件查看器”的结果如下图所示:
实际的波形比较密集,看不太清楚,用右上角的缩放工具可以得到比较容易观察的图形。我们再用读取程序看看是否能读取到这个波形文件,实现方法如下:
前面板的结果如下,与“TDMS文件查看器”中的图形是一致的:
3、 二维数组读/写
TDMS可以存储二维数组或者字符串二维数组,数组的每一列作为一个通道,实现方法如下:
“TDMS文件查看器”中字符串二维数组与数值二维数组的内容是一样的,就不贴图了。我们再用读取程序看看二维数组文件如何读取并显示出来,实现方法如下:
在程序中,将数字二维数组转化一下后放到多列列表框中显示,字符串二维数组直接用数组显示,与上图“TDMS文件查看器”中显示的数据完全一致,说明我们的读写程序是正确可用的。
三、 小结
① TDMS支持多种类型数据的存储,具备高速数据管理功能;
② 虽然可以存储多种数据,但“TDMS写入”函数不允许直接输入标量,标量必须转成数组;
③ “TDMS读取”函数中,第一个数据的偏移量规定为0,也就是默认值;
④ TDMS还支持给数据文件设置属性或者读取文件的属性,使用专门的TDMS函数可以实现。