当前位置: 首页 > news >正文

LabVIEW之TDMS文件

在很多场合,早期的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文件比较完备的介绍了。

相关文章:

LabVIEW之TDMS文件

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

DeepSeek 实现原理探析

DeepSeek 实现原理探析 引言 DeepSeek 是一种基于深度学习的智能搜索技术,它通过结合自然语言处理(NLP)、信息检索(IR)和机器学习(ML)等多领域的技术,旨在提供更加精准、智能的搜索…...

2021 年 9 月青少年软编等考 C 语言五级真题解析

目录 T1. 问题求解思路分析T2. 抓牛思路分析T3. 交易市场思路分析T4. 泳池思路分析T1. 问题求解 给定一个正整数 N N N,求最小的 M M M 满足比 N N N 大且 M M M 与 N N N 的二进制表示中有相同数目的 1 1 1。 举个例子,假如给定 N N N 为 78 78 78,二进制表示为 …...

洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解

题目传送门: P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 这道题的核心问题是在一条直线上分布着不同品种的牛,要找出一个连续区间,使得这个区间内包含所有不同品种的牛,…...

编程领域的IO模型(BIO,NIO,AIO)

目前对于市面上绝大多数的应用来说,不能实现的业务功能太少了。更多的是对底层细节,性能优化的追求。其中IO就是性能优化中很重要的一环。Redis快,mysql缓冲区存在的意义。都跟IO有着密切关系。IO其实我们都在用,输入输出流这块。…...

DeepSeek和ChatGPT的对比

最近DeepSeek大放异彩,两者之间有什么差异呢?根据了解到的信息,简单做了一个对比。 DeepSeek 和 ChatGPT 是两种不同的自然语言处理(NLP)模型架构,尽管它们都基于 Transformer 架构,但在设计目标…...

Pyqt 的QTableWidget组件

QTableWidget 是 PyQt6 中的一个表格控件,用于显示和编辑二维表格数据。它继承自 QTableView,提供了更简单的方式来处理表格数据,适合用于需要展示结构化数据的场景。 1. 常用方法 1.1 构造函数 QTableWidget(parent: QWidget None)&#x…...

4. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--什么是微服务--微服务设计原则与最佳实践

相比传统的单体应用,微服务架构通过将大型系统拆分成多个独立的小服务,不仅提升了系统的灵活性和扩展性,也带来了许多设计和运维上的挑战。如何在设计和实现微服务的过程中遵循一系列原则和最佳实践,从而构建一个稳定、高效、易维…...

网络安全威胁框架与入侵分析模型概述

引言 “网络安全攻防的本质是人与人之间的对抗,每一次入侵背后都有一个实体(个人或组织)”。这一经典观点概括了网络攻防的深层本质。无论是APT(高级持续性威胁)攻击、零日漏洞利用,还是简单的钓鱼攻击&am…...

树和二叉树_7

树和二叉树_7 一、leetcode-102二、题解1.引库2.代码 一、leetcode-102 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 样例输入:root [3,9,20,null,nu…...

不同标签页、iframe或者worker之间的广播通信——BroadcastChannel

BroadcastChannel是一个现代浏览器提供的 API,用于在同一浏览器的不同浏览上下文(如不同的标签页、iframe 或者 worker)之间进行消息传递。它允许你创建一个广播频道,通过该频道可以在不同的浏览上下文之间发送和接收消息。 Broa…...

开源CodeGPT + DeepSeek-R1 是否可以替代商业付费代码辅助工具

开源CodeGPT + DeepSeek-R1 是否可以替代商业付费代码辅助工具 背景与研究目的 在快速发展的软件开发领域,代码辅助工具已成为提高开发效率和质量的关键。然而,商业付费工具如通义灵码和腾讯AI代码助手,尽管功能强大,但其高昂的成本和许可证限制,使得许多企业寻求更具吸…...

AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA的CAN FD汽车总线数据交互系统设计

目录 前言 汽车总线以及发展趋势 汽车总线技术 汽车总线发展趋势 CAN FD总线国内外研究现状 2 系统方案及CAN FD协议分析 2.1系统控制方案设计 2.2 CAN FD总线帧结构分析 2.2.1数据帧分析 2.2.2远程帧分析 2.2.3过载帧分析 2.2.4错误帧分析 2.2.5帧间隔分析 2.3位…...

STC51案例操作

案例 1&#xff1a;LED 闪烁 功能描述&#xff1a;通过操作 P1 口寄存器&#xff0c;让连接在 P1.0 引脚的 LED 以一定间隔闪烁。 #include <reg51.h>// 延时函数 void delay(unsigned int time) {unsigned int i, j;for (i 0; i < time; i)for (j 0; j < 123; …...

多光谱技术在华为手机上的应用发展历史

2018 年&#xff0c;华为 P20 系列首次搭载 5 通道色温传感器&#xff0c;可帮助手机在不同光照条件下保持画面色彩一致性。 2020 年&#xff0c;华为 P40 系列搭载 8 通道多光谱色温传感器&#xff08;实际为 11 通道&#xff0c;当时只用 8 个通道检测可见光&#xff09;&am…...

C语言:函数栈帧的创建和销毁

目录 1.什么是函数栈帧2.理解函数栈帧能解决什么问题3.函数栈帧的创建和销毁的过程解析3.1 什么是栈3.2 认识相关寄存器和汇编指令3.3 解析函数栈帧的创建和销毁过程3.3.1 准备环境3.3.2 函数的调用堆栈3.3.3 转到反汇编3.3.4 函数栈帧的创建和销毁 1.什么是函数栈帧 在写C语言…...

NLP_[2]_文本预处理-文本数据分析

文章目录 4 文本数据分析1 文件数据分析介绍2 数据集说明3 获取标签数量分布4 获取句子长度分布5 获取正负样本长度散点分布6 获取不同词汇总数统计7 获取训练集高频形容词词云8 小结 4 文本数据分析 学习目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文…...

【工具篇】深度揭秘 Midjourney:开启 AI 图像创作新时代

家人们,今天咱必须好好唠唠 Midjourney 这个在 AI 图像生成领域超火的工具!现在 AI 技术发展得那叫一个快,各种工具层出不穷,Midjourney 绝对是其中的明星产品。不管你是专业的设计师、插画师,还是像咱这种对艺术创作有点小兴趣的小白,Midjourney 都能给你带来超多惊喜,…...

从O(k*n)到O(1):如何用哈希表终结多层if判断的性能困局

【前言】   本文将以哈希表重构实战为核心&#xff0c;完整展示如何将传统条件匹配逻辑(上千层if-else判断)转化为O(1)的哈希表高效实现。通过指纹验证场景的代码级解剖&#xff0c;您将深入理解&#xff1a;   1.哈希函数设计如何规避冲突陷阱   2.链式寻址法的工程实现…...

视频采集卡接口

采集卡的正面有MIC IN、LINE IN以及AUDIO OUT三个接口&#xff0c; MIC IN为麦克风输入&#xff0c;我们如果要给采集到的视频实时配音或者是在直播的时候进行讲解&#xff0c;就可以在这里插入一个麦克风&#xff0c; LINE IN为音频线路输入&#xff0c;可以外接播放背景音乐…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...