为有牺牲多壮志,敢教日月换新天。

LabVIEW(四):数据存储和文件IO

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9697761.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

1、使用NI数据采集板卡来进行数据保存和文件I/O操作。
2、在一个典型的测试测量系统当中,包括:信号调理、信号采集、信号分析、信号显示、数据存储。
数据存储:将采集到的数据储存到磁盘上,以备日后离线分析,或者作为数据日志。
3、文件I/O:把已经储存在磁盘上的数据导入到数据采集系统当中,并由数据采集板卡输出信号,这时需要用到文件I/O操作。
4、LabVIEW中最常用的三种数据存储格式:
(1)、ASCII文件格式(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
(2)、直接二进制存储。
(3)、TDMS文件格式(Technical Data Management Streaming 技术数据管理流)
5、三种文件格式的优缺点:
ASCII TDMS 直接二进制
共享数据 最优(任何文本程序容易读取) 次优(NI程序容易进行读取) 好(仅有元数据)
效率 好 最优 最优
数值精度 好 最优 最优
理想适用范围 在磁盘空间和精度不重要时,用于与其他程序共享数据/将简单数组数据和元数据与编程者进行共享 紧凑的存储数值数据,并提供随机访问功能

6、LabVIEW中提供了高层文件I/O函数和底层文件I/O函数来进行文件I/O的操作通过分类地进行文件操作,可以提高连续文件写入或读取的效率。
7、高层文件I/O函数封装了底层文件I/O函数在一个VI中完成了文件的打开、读取、写入、以及文件关闭的操作。高层文件I/O函数完成了一站式的文件操作。但是应该避免把高层文件I/O函数放入一个循环结构中,因为反复的打开关闭文件会大大降低文件操作的效率。
8、如果磁盘上已存储了相应的二进制文件可以将其通过数据采集板卡的AO通道进行输出。典型的信号输出范例:
(1)、首先建立一个AO输出通道。
(2)、并设定为连续波形输出模式。
(3)、将从文件中读取的数据写入模拟输出通道。
(4)、开始任务后进行波形的循环输出。
(5)、连接好设备后,通过测试面板观察信号输出情况。
9、除了普通的ASCII文件和二进制文件之外。NI提出了一种针对测试测量的高效文件存储格式—TDMS。
TDMS:为了简化设计和维护自定制的文件格式,NI提供了一种灵活的数据模型,称为TDM模型。它可以在NI LabVIEW、LabWindows/CVI(National Instruments 公司:美国国家仪器公司,简称NI 公司。推出的交互式C 语言开发平台)、DIAdem(DIAdem是一款专门用于帮助工程师和科学家们使用单一软件工具快速定位、检查、分析和报告测量数据的软件)中进行访问。如果需要从第三方软件中访问TDM模型,只需使用NI提供的相应TDM dll即可。
TDMS最核心的内容都在这个dll中,用户如果安装了LabVIEW,就会发现在Program Files\National Instruments\Shared\TDMS文件夹中有个tdms.dll的文件。其他软件正是通过调用这个dll的API来操作TDMS文件的。
TDM数据模型提供了多种特有的优点。例如:a.符合特殊工程需要。b.方便添加描述性的测量信息。TDM数据模型支持两种文件格式:a.TDM文件 b.TDMS文件
10、TDMS文件:位于文件I/O、TDM流子选版下面的一组API(Application Programming Interface,应用程序编程接口)用来访问TDMS文件类型,并针对数据流盘进行了优化。
11、TDM文件:使用文件I/O、存储子选版下面的函数来进行访问,同样提供类似性能,但并没有对数据流盘进行优化。
12、当需要存储测试或测量数据为数据分组,创建块的数据结构、存储定制数据信息并进行高速数据读写时,应当考虑使用TDMS文件类型。
13、TDMS文件数据类型的层次结构
TDMS文件将数据组织为三个不同层次的对象,最顶层由一个单独的对象组成,称之为:“文件的根”,其中包含了文件本身特有的信息例如工作者、标题。每个TDMS文件都能包含无限个组,而每个组又能包含无限个通道。简而言之:
TDMS三层结构对象为:
(1)、文件的根
(2)、组
(3)、通道
14、每个TDMS对象都有一个唯一的路径来进行标识,每个路径则是一个包含对象名称以及其所有者名称的字符串,并以正斜杠作为分割符。每个名称均被包含在一对单引号当中,如果对象名称中就含有单引号,那么它们将被直接替换为2个单引号。
不同对象路径格式的实例见下图:
Object Path
File object /
Group object Measured Data /'Measured Data'
Group object Dr. T's Events /'Dr. T''s Events'
Channel object Time in group Events /'Events'/'Tine'
编辑

15、常用TDMS文件API:
TDMS open、TDMS Write、TDMS Read、TDMS Close、
TDMS Set Properties、TDMS Get Properties。
每个TDMS对象同时可以拥有无限个属性,
每个TDMS属性则由一个字符名称、类型标识符、以及二进制值组成。
属性的典型数据类型包括:数值类型、时间标志、字符串等等。TDMS的属性不支持数组或复杂的数据类型
16、用户写完TDMS文件之后,会发现硬盘上其实有两个TDMS文件,一个是.tdms,另一个是.tdms_index文件,通常把前者称为主文件或者数据文件,而把后者称为头文件或者索引文件。这个索引文件包含了块数据文件当中包含的属性以及指针,以加快数据读取时的访问速度,如果索引文件丢失了,它可以自动得到重建。
17、头文件与主文件相比,最大的区别就是把主文件中的raw data都去掉了,只留下属性等信息。这样做的目的:
(1)、可以使得读文件加快速度,并且支持随机读取文件数据。
(2)、可以使得某些软件的搜索TDMS文件功能加快。比如在DIAdem中搜索TDMS文件,可以根据文件名、通道组名、通道名(其实这些也是属性),或者其他某些属性进行搜索,这个时候,仅将TDMS的头文件载入进行搜索,其速度远远比将TDMS主文件载入搜索快得多。
17、TDMSTDMS数据模型文件包含多个组,每个组又包含了多个通道,用户可在任意层中插入定制的属性。TDMS文件中的描述信息在无需涉及一个定制文件头的情况下,提供了一种方便的存档方式,当我们的文档需求更为复杂时,我们无需重新设计应用程序,只需扩展TDMS数据模型来满足我们特定的需求即可。与其他文件I/O函数相类似,使用TDMS API时,同样需要打开、写入、关闭文件。此外,可以使用TDMS特有的设置属性VI来保存某些属性,而无需担心文件格式、数据类型、以及其它在写入额外信息时所需要的附加工作。
18、属性的值不仅可以是字符串,也可以是数值类型。我们可以对文件、组、以及通道这三个层次进行任意的属性定制:
(1)、如果需要设置文件层次的属性,则无需连接组名称和通道名称输入端。
(2)、如果需要设置组的属性,则无需连接通道名输入,只需给出组的名称即可。
(3)、如果需要设置具体通道的属性,则即要给出组名,同时需要给出相应通道的名称。
19、TDMS属性读取的操作:当读取某个层的属性时,只需要给出相应的组名以及通道名即可。
20、TDMS面板上的两个SubVI
(1)、TDMS File Viewer:当用户写完某个TDMS文件之后,就可以用这个SubVI来方便的查看文件的内容,只要输入TDMS文件的路径即可,运行VI就会跳出一个Viewer的界面,可以查看数据、属性,并且可以根据数据简单的绘制出一些波形图。
(2)、TDMS Defragment:通常用户写完TDMS文件之后,可能会发现这个文件非常大,那么这时就可以使用这个SubVI,可以大幅度的减小文件的size。
21、TDMS从设计之初就确定它必须是二进制的。
二进制文件两个优点:
(1)、与一般的文本式文件相比,二进制文件通常比较小。
(2)、二进制文件读写通常比较快。
22、TDMS物理结构
TDMS内部结构的核心概念是segment(段)。这个segment的概念与TDM的三层结构(即逻辑结构)没有任何对应的关系,也就是说,一个通道可能对应着多个segment,一个segment中也可能有多个通道。segment是什么意思?我们在写TDMS文件的时候,数据本来可能存放在内存中,那么总要往硬盘上写这些数据的,每次往硬盘上写(flush to disk)就会产生这样一个segment。同样,我们在读TDMS文件的时候,也是一个segment一个segment的把内容读出来。这个segment还有一个极为重要的特点。我们每次写数据,每次往TDMS文件中flush to disk的时候就在文件的后面添加这样一个segment,而不去关心之前的segment中包含了什么样的信息。这个特点非常关键,这就可以使得我们写文件的速度非常快,我们并不关心之前文件中包含了什么信息,也就使得我们写TDMS文件的速度并不和TDMS文件的大小成正比或者有任何关系。
23、TDMS文件格式的优点
(1)、写文件速度必须要快——通过segment实现以及二进制。
(2)、向文件追加(append)数据的时候,速度要快——通过segment。
(3)、写文件的速度不能与文件大小成正比——通过segment。
(4)、支持随机的读取——通过segment以及头文件。
(5)、支持分别读写描述性信息和原始数据——通过segment以及头文件。
(6)、对读文件的速度也有一定的要求——通过segment以及头文件。
(7)、文件不能太大——二进制。
20、使用TDMS流文件查看器浏览数据详细信息。可以浏览具体的对象属性、详细的数据、直观的数据波形。可见使用TDMS文件格式存储测试测量数据,可以有效的进行数据的组织与合并,创建新的数据结构,并存储定制数据信息。

posted @ 2018-09-25 08:42  为敢技术  阅读(3460)  评论(0编辑  收藏  举报