LabVIEW之TDMS文件

news/2025/2/12 9:32:25/

在很多场合,早期的LabVIEW版本不得不借助常规的数据库来做一些数据管理工作,但常规数据库对于中高速数据采集显然是不合适的,因为高速数据采集的数据量非常大,用一般的数据库无法满足存储数据的要求。

直到TDM(Technical Data Management)数据管理技术,TDMS流式技术的引入,使得快速存储和查询、管理采集数据成为可能。

TDM采用文件、通道组和通道三层结构来描述和记录数据。每一层都包含固有属性,也可以自定义属性。TDM文件可以理解成小型的关系数据库,其中文件相当于数据库;通道组相当于数据库的表;通道相当于不同的字段。

一个完整的TDM包括两个文件,文件扩展名分别为tdm和tdx。tdm类型文件记录的是属性信息,比如文件的作者、通道组名称、通道名称和信号单位等,tdm文件时XML格式的文件,可以使用常用的浏览器打开以粗略的查看它的具体内容。tdx文件时纯粹的二进制数据文件,用来记录动态数据类型信号。

TDM适用于高速数据采集场景的机制是:由于TDM采用各种属性来描述采集的数据(相当于数据库的索引方式),因此我们可以快速定位数据,从而提高了写入和查询速度。

TDM正在被LabVIEW8.2之后推出的TDMS逐步替代,TDMS的存取速度更快,编辑方式也与普通VI相同,更适合新用户使用。这里主要介绍TDMS文件。

1.TDMS文件

LabVIEW为操作TDM文件提供了一些快速VI。这些VI的输入输出端子既可以通过对话框配置,也可以引出供用户动态修改。LabVIEW的快速VI适于快速搭建数据采集存储系统,但是快速VI在简化编程的同时,也丧失了一定的灵活性,TDMS的快速VI选板如下图所示。

图1 TDMS的快速VI选板

TDMS文件的读写过程也遵循打开、读/写和关闭三个步骤。TDMS文件是NI公司新推出的数据管理系统,以二进制方式存储数据,所以文件尺寸更小、速度更快。因此它在具备二进制文件优点的同时,又具备关系型数据库的一些优点。据测试,TDMS格式文件的存取速度能够达到600MB/s。这样的存取速度是能够满足绝大多数数据采集系统存取的需要。

2.TDMS的基本构成

如此之快的存取速度得益于TDMS内部的结构,TDMS与TDM一样采用三层的逻辑结构。但是它们的物理结构是完全不同的。TDMS分为文件、通道组、通道三部分。三种对象的关系是逻辑层次关系,处于顶层的是文件对象。文件对象包含固定的属性信息和用户自定义的属性信息,每个文件对象可以包含任意数量的通道组对象。同样的,通道组对象也包含属性信息(如名称等),每个通道组对象可以包含任意数量的通道对象。通道对象也同样具有自己的属性信息(如信号、名称等)。在三层不同的属性中,只有通道属性包括原始数据,通常为一维数组。

LabVIEW专门提供了TDMS文件函数选板,其位于“文件IO”选板中,如下图所示。

图2 TDMS函数选板

3.简单文件读/写

TDMS的读/写与一般格式的文件基本相同,也包括打开、读写、关闭三个步骤。简单的文件读写过程如下图所示。结束循环后调用“TDMS文件查看器”函数。TDMS查看器用于浏览TDMS文件,该文件包括文件属性、组属性、通道属性、通道数据等信息。通道数据既可以用表格方式显示,也可以用波形图方式显示。

图3 利用TDMS文件存储随机数并显示

在图3中,写入数据时未指定组名称和通道名称,所以在文件查看器中组名、通道名均显示为“未命名”。“TDMS写入”函数可以接受各类数据类型数据作为输入(包括波形、一维二维波形数组、数字表格、动态数据、一维二维数组(数组元素类型可以为有符号或无符号整数、单双精度或扩展精度数值、不包含空字符串的有数字和字符组成的字符串、时间标识、布尔型数据))。

通过设置通道组和通道可以记录不同类型的数据。如下图所示在“测试组”中,包括三个通道,分别记录了双精度、时间标识和整形数据。

图4 在TDMS文件中写入多种类型数据

在读取TDMS文件时,需要指定文件名、通道组名称、通道名和通道的数据类型,如下图所示。“TDMS读取”函数还允许指定偏移量和总数,实现TDMS文件的随机读取。第一个数据偏移量规定为0。

图5 读取TDMS文件中多种类型数据

4.波形数据的写入和读取

TDMS文件高速存取的特性,使得它特别适合于海量数据存取。TDMS文件在数据采集应用中,经常用于存取波形数据。如下图所示在TDMS文件中同时写入多组波形数据。

图6 存储波形数据

写入波形数据后,按照上面读取数据的方式在TDMS文件中同时读取多组波形数据,如下图所示,波形数据既可以一次全部被读取,也可以随机读取。通过指定偏移量和总数。可以分段随机读取数据。

图7 读取波形数据

5.表格的写入和读取

TDMS允许存储二维数值数组或者字符串数组,数组的每一列作为一个通道,如下图所示。存储表格数据时需要注意,不允许有空字符串,遇到空字符串可以采用空格或其他不可打印字符替换,然后再存储。

图8 读取二维数值数组和字符串数组

6.TDMS文件的属性

通过“TDMS列出内容”函数,可以查看通道组名称和通道名称。若不输入“通道组名称”参数,函数将返回所有通道组名称和所有通道名称。输入“通道组名称”,则返回对应通道组的所有通道名称,“TDMS列出内容”函数的用法如下图所示。

通过“TDMS设置属性”函数和“TDMS获取属性”函数,可以设置或者取得文件、通道组、通道的属性,对文件、通道组和通道可以设定任意数量的属性。

图9 列出TDMS的通道组、通道名称

7.TDMS文件的内置属性

TDMS文件允许设置任意数量的属性。同时,TDMS文件也存在固有的属性。跟踪“TDMS查看器”函数,可以看到该函数使用了两个TDMS的内置属性:NI_DataType和NI_ChannelLength。前者返回通道存储数据的类型码,通过类型码可以判断通道存储的数据类型;后者返回通道包含元素的个数,即长度,通过通道长度可以判断是否读取到通道尾部。如下图所示。

图10 获取通道长度及元素数据类型

使用“TDMS设置属性”函数可重命名.tdms文件中的组和通道。将NI_UpdateGroupName端子连线至“属性”输入端可以对通道组重新命名;将NI_UpdateChannelName端子连线至“属性”输入端可以对通道重新命名。这个还有许多自定义的属性可以查看函数帮助具体了解。

以上就是TDMS文件比较完备的介绍了。


http://www.ppmy.cn/news/1571384.html

相关文章

Deepseek-R1实现原理概述

Deepseek-R1实现原理概述 基本概念 强化学习(Reinforcement Learning) 强化学习 (RL) 是一种机器学习,其中AI通过采取行动并根据这些行动获得奖励或惩罚来进行学习。目标是随着时间的推移最大化奖励。 示例:想象一下教机器人玩游戏。机器人尝试不同的…

Java网络编程学习(一)

网络相关概念 网络体系结构 OSI体系结构(七层) OSI(Open Systems Interconnection,开放系统互联)体系结构将整个计算机网络分为七层,从上到下依次为:应用层、表示层、会话层、传输层、网络层…

ssm校园二手交易平台小程序

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

axios如何取消请求、配置

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在实际开发中,有时候需要取消已经发起的请求,同时也需要对请求进行各种配置。以下分别介绍 Axios 取消请求和配置请求的方法。 取消请求 使用 CancelToken(旧方…

【目标检测xml2json】label从VOC格式xml文件转COCO格式json文件

目录 🌷🌷1.VOC格式xml文件 🍀🍀2.COCO格式json文件 💖💖3.xml2json代码(python) 🍌🍌4.输入输出展示 🍭🍭4.1输入xml 🍋🍋4.2输出json 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🌷🌷1.VOC格式xml文件 VOC数据…

python实现比对两个json串的方法

记录瞬间 前段时间为了解决一些实际问题,引出了要对json字符串进行比对的需求。 觉得有意义,作以简单记录。 # 比对数据 def compare_data(set_key, src_data, dst_data, noise_data, num):if isinstance(src_data, dict) and isinstance(dst_data, d…

DeepSeek Janas-Pro 图像模型

DeepSeek Janus-Pro 是由 DeepSeek 团队开发的一款开源多模态大模型,旨在统一图像理解和生成任务,并在多个领域展现出卓越的性能。以下是对其主要特点和功能的详细介绍: 1. 模型架构与技术特点 解耦视觉编码路径:Janus-Pro 采用解耦的视觉编码路径,将图像理解与生成任务分…

分层解耦-IOC DI 入门

步骤 ①.Service层及 Dao层的实现类,交给I0C容器管理。 ②.为Controller及Service注入运行时,依赖的对象。 ③.运行测试。 添加注解进行分层耦合 Component 会将当前类交给IOC容器管理,成为IOC容器中的bean - 控制反转 Autowired 运行时,IOC容器…