Labview-关于TDMS文件逻辑的学习-从今天开始学习Labview

article/2025/9/11 21:37:58

1. TDMS文件的逻辑格式

TDMS文件的逻辑格式遵循TDM三层结构,仍然是文件、通道组、通道三层。用户在使用时只需要关心这三层就行了。

2. TDMS文件API

TDMS文件格式基本上可以称为NI用在测试测量领域的通用数据文件格式,LabVIEW, CVI/LabWindows, Signal Express, DIAdem中都可以使用,也常看到在Excel, MatLab被中调用。TDMS最核心的内容都在一个dll中,用户如果安装了LabVIEW,就会发现在Program Files\National Instruments\Shared\TDMS文件夹中有个tdms.dll的文件。其他软件正是通过调用这个dll的API来操作TDMS文件的。

在LabVIEW中操作TDMS文件其实相当方便,有专门的TDMS面板,提供了TDMS绝大多数的功能。虽然我们一直说Write/Read Measurement Files, Storage VIs, TDMS分别面向初级、中级、高级的用户,但是我个人觉得LabVIEW中的TDMS用起来十分方便,即便是初级用户,也能很容易的上手。在面板上一共就10个SubVI,无论是什么样的数据类型,都可以用这样同一套SubVI,无需大量额外的编程工作。


 

Picture

 

 

这里可以简单介绍一下TDMS面板上的两个SubVI,我个人觉得十分有用。一个是“TDMS File Viewer”,当用户写完某个TDMS文件之后,就可以用这个SubVI来方便的查看文件的内容,只要输入TDMS文件的路径即可,运行VI就会跳出一个Viewer的界面,可以查看数据、属性,并且可以根据数据简单的绘制出一些波形图。另外一个是“TDMS Defragment”,通常用户写完TDMS文件之后,可能会发现这个文件非常大,那么这时就可以使用这个SubVI,可以大幅度的减小文件的size。

3. TDMS二进制文件

TDMS从设计之初就确定它必须是二进制的。二进制文件带来两个优点:第一,与一般的文本式文件相比,二进制文件通常比较小;第二,二进制文件读写通常比较快。这两个都是其他二进制文件都具备的优点,就不再多说了。

4. TDMS头文件

用户写完TDMS文件之后,会发现硬盘上其实有两个TDMS文件,一个是.tdms,另一个是.tdms_index文件,我们通常把前者称为主文件或者数据文件,而把后者称为头文件或者索引文件。头文件与主文件相比,最大的区别就是把主文件中的raw data都去掉了,只留下属性等信息。这样做,有两个目的,第一,可以使得读文件加快速度,并且支持随机读取文件数据,这个稍后再解释,用户看完后面的内容就可以理解。第二,可以使得某些软件的搜索TDMS文件功能加快。比如在DIAdem中搜索TDMS文件,可以根据文件名、通道组名、通道名(其实这些也是属性),或者其他某些属性进行搜索,这个时候,仅将TDMS的头文件载入进行搜索,其速度远远比将TDMS主文件载入搜索快得多。

5. TDMS的内部结构

TDMS文件的内部结构,也就是物理结构,可以在这里找到原文。一般的用户并不需要了解这方面的知识就可以方便的使用TDMS文件。在这里介绍这个内部结构,是为了更好的解释TDMS文件格式的优点。

TDMS内部结构的核心概念是segment,如下图。为了避免混淆,在这里必须澄清的是,这个segment的概念与TDM的三层结构(即逻辑结构)没有任何对应的关系,也就是说,一个通道可能对应着多个segment,一个segment中也可能有多个通道。segment是什么意思?我们在写TDMS文件的时候,数据本来可能存放在内存中,那么总要往硬盘上写这些数据的,每次往硬盘上写(flush to disk)就会产生这样一个segment。同样,我们在读TDMS文件的时候,也是一个segment一个segment的把内容读出来。



 

Picture

 

 

再稍微深入介绍一下这个segment中的内容。一开始有一些头信息,比如这个segment中是否含有meta data,是否含有raw data,version是多少。下面的东西就很重要了,有个“next segment offset”的信息,指向下一个segment的起始位置,这个有什么用呢?比如我要读某个通道的数据,发现这个segment中并不包含这个通道的内容,就可以使用这样的信息直接跳到下个segment中看下个segment是否有要找的信息。同样,还有一个“raw data offset”的信息,比如用户只想读raw data,并不关心属性之类的信息,那么这个“raw data offset”的信息就派上用场了。说到这里,就可以明白,TDMS是怎样支持Random access,怎样支持独立的读属性信息和raw data的信息。

此外,这个segment还有一个极为重要的特点。我们每次写数据,每次往TDMS文件中flush to disk的时候就在文件的后面添加这样一个segment,而不去关心之前的segment中包含了什么样的信息。这个特点非常关键,这就可以使得我们写文件的速度非常快,我们并不关心之前文件中包含了什么信息,也就使得我们写TDMS文件的速度并不和TDMS文件的大小成正比或者有任何关系。

6. TDMS文件格式的优点

我在以前的文章中提到几个数据文件格式的技术要求,我们现在再来回顾一下,看看TDMS文件是如何实现这些技术要求的,这样也就能看出TDMS文件的优点来。

1)写文件速度必须要快——通过segment实现以及二进制。 

2)向文件追加(append)数据的时候,速度要快——segment。

3)写文件的速度不能与文件大小成正比——segment。 

4)支持随机的读取——segment以及头文件。

5)支持分别读写描述性信息和原始数据——segment以及头文件。

6)对读文件的速度也有一定的要求——segment以及头文件。

7)文件不能太大——二进制。

7. 其他

TDMS文件格式目前(LabVIEW 8.5)只支持Windows和PharLap(一种实时操作系统)平台上。不过我还看到一个基于VI的TDMS API,这个完全基于LabVIEW,既然LabVIEW能在其他平台上工作,那么这个小工具也能在其他平台上工作。当然,效率、性能的会差很多了。

通常总有人拿TDMS文件格式和一般的基于Windows API文件流操作比较,然后会说TDMS比那样的Win32 streaming API慢嘛,是不是TDMS不行?比如在某些磁盘阵列的配置下,Win32 streaming API可以达到650MB/S,而TDMS只能600MB/S左右。我在这里需要澄清的是,TDMS在保持着数据良好逻辑结构(TDM的三层结构)、良好的数据管理的前提下,还能保持着这样高速的性能,这才是TDMS最大的优点。Win32 streaming API只是纯粹的追求速度(也仅比TDMS快5-10%左右),并不能将测试测量的数据良好的组织好、管理好,用户如果片面的追求速度而不管写入文件的数据如何保存如何管理,那就有点得不偿失了。

当然,TDMS文件也并不完美,同样存在着种种缺点。比如不能支持方便的删除某个通道的功能,目前还不支持其他操作系统等等。相信将来都会有改善的。

最后,用一个不是很恰当的例子来结束这篇文章。测试测量数据的文件格式,有很多种,文件格式就像我们中午带饭的饭盒一样。其他的数据文件格式就是把饭菜都放在一起,吃起来不方便(速度慢),而且味道都混杂在一起(组织不好);而TDMS文件格式就像是内部有分隔的饭盒,不同的饭菜分开存放,吃起来又方便(速度快)味道又好(组织良好)。


http://chatgpt.dhexx.cn/article/ufvTnHUa.shtml

相关文章

[Matlab科学计算] Matlab打开Labview保存的TDMS文件

1. TDMS文件简单介绍 TDMS文件格式由三个层次结构级别组成:文件、组、通道。文件级别可包含任意数量的组,而每个组又可包含任意数量的通道。通过通道分组,用户可以选择如何组织数据以使其更易于理解。每​个​TDMS​文件​都​包含​两​种​…

JAVA解析TDMS文件

2023年更新: 没想到还有人关注,上传了最新代码 https://github.com/yc97/TDMSDecoder 该代码经过测试,基本没什么bug了 reference: http://www.eefocus.com/Junking/blog/12-07/281264_7bf69.html http://www.ni.com/white-paper/14252/zh…

LabVIEW写入可快速加载的TDMS文件

LabVIEW写入可快速加载的TDMS文件 TDMS文件格式的设计目的是在尽可能快地读写数据的同时仍保持足够的灵活性来适应采集过程中通道数量和采样率的变化。 但是数据读写速度快的文件未必可快速加载。 TDMS文件是一个完全的二进制文件,由多个部分数据段组成,…

LabVIEW TDMS连续写入内存增长

LabVIEW TDMS连续写入内存增长 每次执行TDMS写入VI时,内存(RAM)使用量都会略有增加。这是内存泄漏吗,如何防止内存使用量增加? 解答 此问题有几种可能的解决方案: TDMS文件的引用可能没有适当地关闭。对…

Matlab查看tdms文件

由于最近项目需要使用Labview开发解调设备,对于高速采集卡就需要使用tdms存储数据(存储的数据量较大),而用matlab无法对tdms格式文件进行直接读取,所以查找一些相关博客,解决了读取的问题。(以下…

Labview数据存储与读取——TDMS文件的创建与写入

Labview数据存储与读取——TDMS文件的创建与写入 你好,这是我在自学Labview编写软件过程中使用的一些功能。我在存储采集卡数据时,通过阅读大量他人的程序,发现TDM及TDMS文件十分适合波形数据的记录,TDMS文件比TDM文件在存储动态…

TDMS转EXCEL

NI官方有推出TDMS转EXCEL插件,安装后可直接用excel打开tdms文件。 下载链接:https://download.csdn.net/download/Kleds_Love/81168914 下载为iSO文件,右键→装载→管理员身份安装即可 安装完成后,直接双击tdms文件,…

计算TDMS文件的THD

1.用采集卡采集一路正弦信号,存为.tdms文件 2.将.tdms文件转成.csv文件或.txt文件或.xlsx文件,使MATLAB可以将数据导入工作空间 法1:将.tdms文件转成.csv文件(依靠LabVIEW程序) 法2:将.tdms文件转成.txt文件…

如何打开tdms文件

1、下载一个插件 地址:https://www.ni.com/example/27944/en/ 2、下载后按照导向安装即可 3、安装后如果不能打开文件,试试重启电脑,或者你电脑上没有execl软件

用Matlab处理TDMS数据(降噪+频谱分析)

目录 TDMS文件从导入到最终处理的整个过程第一:把TDMS文件导入到matlab用MATLAB TDMS函数使用ConventTDMS函数 第二:把Matlab的数据画出来附录:1-照着步骤依然显示不了图的解决办法附录:2-使用Matlab批量转换".TDMS"文件…

labview的TDMS文件读写

文章目录 一概念介绍1.相关概念2.tdms文件介绍 二.VI介绍1.TDMS打开VI2.TDMS写入3.TDMS读取4.TDMS设置属性5.TDMS获取属性6.TDMS关闭 三.范例分析——TDMS文件 并行读写的操作 写在最前面:本文先介绍TDMS概念和文件结构,然后介绍VI如何使用,最…

插件框架篇一之scrollbars

问题:部分手机(如三星)ListView或GridView设置scrollbars显示时会报错奔溃。 问题分析: ScrollView继承于View,在View的构造器中初始化scrollbars。 根据initializeScrollbars判断是否需要进行scrollbars初始…

VBA,窗体和控件的动态效果之一:scrollbar如何实现自动效果

问题由来:静态和瞬时的效果不够用,窗体的动态效果更难实现 之前只学习了窗体的静态效果现在考虑 窗体和控件的动态效果 1 srcollbar如何实现自动效果 给 Button 2 绑定了这样一个sub点击后,Scroll Bar 1 可以自动变化注意点:因为…

C#开发串口小助手(可更改波特率、串口号,可实现数据以及字符的收发)

0. 前言 前置项目为:VS 2019中利用C#语言在.Net Framework 4.5框架上开发简易串口发送数据软件本项目的全部代码已经放置至码云:https://gitee.com/jiawei_zh/serial_assistant本项目参考杜洋工作室:入门C#设计。 1. 项目实现 1.1 配置For…

android RecyclerView 添加可拖动的滚动条

实现的效果图如下,为了效果这里我设置的宽了一些,实际根据需求修改即可 先说几个属性: android:scrollbars" 一般都是垂直的滚动条设置vertical android:scrollbarSize 设置滚动条的宽度 android:scrollbarThumbVertical:…

基于机智云的Android开源app修改教程

前言 首先,这是我最近搞的毕业设计,然后为了使自己的app更加的有个人风格,故在网上寻找了很多的参考资料,这里是对自己设计的总结,具体机智云APP生成流程请参考我上一篇博客。链接: 基于stm32的连接机智云教程 机智云…

Android中修改ScrollBar默认样式

好吧,又遇到需求了,需要修改ScrollBar的样式,于是查阅了很多文档,觉得这位大牛总结的不错,顺便看了下他的主页,哇哦,大神啊~!!!附上大神文章的链接&#xff1…

RecyclerView实现可拖动滚动条并修改宽度

本文参考了孤调的文章,链接如下: https://www.jianshu.com/p/67e1df2b1920 基本实现了拖动的需求,但是还有一个问题就是滚动条的宽度跟需求不符,需要进行修改.但是官方并未提供相应的参数.自己动手丰衣足食,开始撸源码. 打开RecyclerView类,搜索fastScrollEnabled,定位到构造方…

IDEA修改配置

1.修改 bin/idea.properties---------------主要是把路径放开 # Use ${idea.home.path} macro to specify location relative to IDE installation home. # Use ${xxx} where xxx is any Java property (including defined in previous lines of this file) to refer to its v…

利用ajax修改删除页面数据,使用Jquery的Ajax实现无刷新更新,修改,删除页面

本文将向大家讲述一下最近工作的一些总结,主要包括了以下内容,注册界面以及详细信息界面的编辑。主要是介绍了AJAX技术,因为我觉得其他方面没什么好介绍的。首先是跟大家说一下Ajax的优点,假如你删除了一个页面的内容,…