【NI-DAQmx入门】数据流盘

news2024/9/29 19:19:01

1.NI-DAQmx高速数据流盘

1.1什么是TDMS格式

        TDMS文件格式是NI推荐易于交换、固有结构化、具有高速流传输能力的文件格式,用于将基于时间的测量数据保存到磁盘,以实现高性能、可用性和复用性。借助NI-DAQmx驱动,可以实现将数据快速传输到磁盘中,速率可高达1.2GB/s。

NI 定义了技术数据管理 (TDM) 解决方案,其中包括三个集成组件:

  • NI TDMS 文件格式用于保存详细记录的测量数据
  • NI DataFinder 可快速定位之前存储的数据集
  • NI DIAdem 或 LabVIEW DataFinder Connectivity VI 用于处理数据和创建报告

1.2TDMS文件结构概述

       TDMS 文件格式采用三个层级结构,如图所示:文件、组和通道。

        文件级别可以包含无限数量的组,每个组可以包含无限数量的通道。

        在层次结构的每个级别,您可以存储无限数量的自定义标量属性。

        每个级别都接受无限数量的自定义属性,以实现记录良好且可搜索的数据文件。

        无需设计自己的标头结构。随着您的文档要求增加,您不必重新设计您的应用程序;您只需扩展模型即可满足您的特定需求。

        您用于记录测量数据的自定义属性越多,日后通过使用 NI DataFinder 客户端(可从用户那里抽象出复杂的数据库通信)来定位测量数据就越容易。

TDMS数据段布局

数据以段为单位写入TDMS文件。每次将数据附加到TDMS文件时,都会创建一个新的数据段。有关此规则的例外情况,请参考本文的元数据原始数据部分。数据段由以下三部分组成:

  • 前端—包含基本信息,如标识文件为TDMS的标签、版本号,以及元数据和原始数据的长度信息。
  • 元数据—包含数据段中全部对象的名称和属性。对于包含原始数据(通道)的对象,元数据部分还包含索引信息,用于在数据段中找到该对象的原始数据。
  • 原始数据—与数据段中包含的任意对象相关联的所有原始数据的连续数据块。原始数据部分可以包含交错的数据值或一系列的连续数据块。原始数据部分还可以包含来自DAQmx的原始数据。

关于TDMS文件结构格式更详细的内容请看NI的链接:TDMS文件格式内部结构 - NI

 1.3使用NI软件写入和读取TDMS文件

写入测量文件ExpressVI

        最简单的方式是使用 写入测量文件ExpressVI。该Express VI 提供了基于对话框的简单配置,但牺牲了性能,并且不适合高速流或实时应用。

  • 文本 (LVM) - 将文件格式设置为基于文本的测量文件 ( ),并将文件名.lvm中的文件扩展名  设置为 ..lvm
  • 二进制 (TDMS) - 将文件格式设置为不带 XML 标头的二进制测量文件 ( .tdms ),并将文件名中的文件扩展名设置  为 .tdms
  • 带 XML 标头的二进制 (TDM) - 将文件格式设置为二进制测量文件 ( ),并将文件名.tdm中的文件扩展名设置  为 ..tdm
  • Microsoft Excel (XLSX) - 将文件格式设置为 Microsoft Excel 文件类型 ( .xlsx),这是一种开放的 XML 文件格式。文件名中的文件扩展名  设置为 .xlsx.


使用  Express VI 配置对话框中的“操作”选项来配置文件保存选项。选项包括:

  • 将数据保存到一个文件或一系列文件(解析数据并保存在多个文件中)。
  • 一次或每次 Express VI 执行时提示用户输入文件名。


如果文件已存在,您可以选择以下选项:

  • 重命名现有文件
  • 将序号附加到文件名
  • 覆盖文件
  • 将数据附加到现有文件

选择流盘路径

右键单击 Express VI 并转到属性

 在前面板上创建一个控件,用户可以在其中指定文件路径。

 添加时间戳

对于写入lvm文件

对于tdms文件,选择x value(time)columns为 one column only

如果未勾选时间戳选项,耶尔可以根据时间的相关信息进行计算

以这种方式呈现数据是为了减小 TDMS 文件的大小。如果时间戳作为值存储在每个测量组选项卡上,则 TDMS 文件将在磁盘上占用数倍的数据。


如何计算相对于测量开始时间的时间戳

要计算每个数据点的相对时间戳,我们可以使用以下公式:

time_relative =   ' wf_start_offset' + 'wf_increment'  x [样本数]

示例:计算每个数据点的相对时间戳时从上面的示例 TDMS 文件屏幕截图中的“组 1”中的“通道 1”,我们将得到以下结果。

  • 示例 0(第一个屏幕截图中的单元格 A2)- 0.000 秒
  • 示例 1(第一个屏幕截图中的单元格 A3)- 0.001 秒
  • 示例 2(第一个屏幕截图中的单元格 A4)- 0.002 秒
  • 等等。(可以为测量通道中的每个样本计算一个唯一值。)


如何使用绝对测量时间计算时间戳

要计算测量每个数据点的绝对时间,我们可以使用以下公式:

time_absolute =   ' wf_start_time' + 'wf_increment'  x [样本数]

示例:计算绝对时间戳时对于上面示例 TDMS 文件屏幕截图中“组 1”中的“通道 1”,我们将得到以下结果。

  • 示例 0(第一个屏幕截图中的单元格 A2)- 6/11/2020 6:03:13.385 PM
  • 示例 1(第一个屏幕截图中的单元格 A3)- 6/11/2020 6:03:13.386 PM
  • 示例 2(第一个屏幕截图中的单元格 A4)- 6/11/2020 6:03:13.387 PM
  • 等等。(可以为测量通道中的每个样本计算一个唯一值。)

 

        为了保证数据流盘的性能,最好是使用底层的文件函数。

        

Data Storage Express VI

注意: “Write Data” VI (写入数据VI)除信号输入外,还有两个输入:名称和单位。
通过双击 “Write Data” VI,可以选择要通过配置对话框保存的其他信息,类似于 "Write to Measurement File " Express VI  的过程。

TMDS写入 

TDMS读取

TDMS 写入自定义属性

TDMS读取自定义属性

合并TDMS文件数据

1.4查看TDMS文件 

        NI的开发环境都是可以写入和读取TDMS文件,但是未安装NI软件的电脑就存在局限性,这时候就需要安装NI的TDM插件,他是微软Excel的免费插件,使得其他用户也可以自由访问TDMS文件。

下载TDM Excel Add-In for Microsoft Excel - NI

TDM Excel 插件概述

        有时,在写入TDM数据文件后,必须对数据文件进行手动修改或扩展。用户可以使用免费的 TDM Excel 插件在 Excel 中打开 TDM 文件,并将其编辑保存到新的 Excel 文件中。只要对新 Excel 文件中的数据或属性所做的修改继续遵循原始数据布局(如本文档中所述),则可以使用 NI 件读取新 Excel 文件免费的 ExcelTDM 数据插件。只要维护架构,使用 Excel 进行手动修改的过程就可以无限期地重复。


 

 添加、更改或删除文件属性

 添加、更改或删除组属性

 

添加、更改或删除通道属性

 1.5NI-DAQmx高速数据记录

        DAQmx Configure Logging VI。此VI可用于配置在DAQ选板上的单个VI内如何将数据写入到TDMS文件中。 这样一来,此VI不仅易于使用,并且易于集成到现有的数据采集应用中,而且经过后台优化后,这也是将数据写入磁盘的最快方式。

        这种将数据流式传输到磁盘的方法可以通过优化多个内存操作并绕过 Windows、LabVIEW 和 TDMS 缓冲区来实现最大效率,从而真正突破高速测量数据流的界限。使用 DAQmx 配置日志 VI 进行的测试已实现超过 1.2 GB/s 的数据流速率。

1.6可选数据压缩功能

 影响数据流盘性能的主要因素

  • 磁盘I/O带宽
  • CPU带宽
  • 总线带宽

        NI-DAQmx提供了一个非常简单的数据压缩方式,即将样本末端的位省略掉,并将得到的样本封装到内存。开发人员可将NI-DAQmx配置为省略样本中的一个或多个最低有效位。例如,可以将具有24位分辨率和32位采样容量的通道配置为仅返回20个最高位。这样总共省略了12个位,其中包括8个未使用的位,因而可将所需的磁盘空间减少37.5%。但在某些情况下,样本包含了未使用的位,这样省略掉这些位并不会“丢失”数据。例如,一个具有12位分辨率和16位采样容量的通道包含4个未使用的位。舍弃这4个位不会带来造成数据丢失,却可以减少25%的所需磁盘空间。NI-DAQmx不执行任何其他无损或有损压缩算法,例如LZW或JPEG。

      

1.7设置TDMS文件中通道顺序 

1.8如何减少TDMS文件的体积 

 有多种选项可以减小 TDMS 文件的大小:

  • 一次将多个数据点写入 TDMS 文件。
  • 使用TMDS碎片整理VI来整合数据。您可以将其包含在代码末尾,以确保在应用程序结束之前对文件进行碎片整理,以节省磁盘空间。
  •  在写入 TDMS 文件之前,使用TDMS设置属性功能缓冲配置的数据量,在 TDMS 文件中设置一个名为“NI_minimumBufferSize”的特殊属性。
    当您向此属性写入数字时,库将缓冲内存中某个段的所有数据,直到有那么多样本为止。这是最简单的解决方案,但确实意味着:
    a) 额外的 RAM 使用量
    b) 如果发生崩溃/断电,您将丢失最新的数据。
  • 写入更大的数据集,虽然仍会产生碎片文件,但是元数据分布在更多的原始数据中,效果不明显
  • 编写单独的文件并稍后将他们组合起来
  • 如果磁盘空间是主要问题,请在存储之前对文件进行碎片整理。TDMS 调色板中有一个碎片整理功能,可以在文件完成后使用该功能来减小大小。

DMS 内置了许多优化,以尝试使占用空间尽可能接近二进制。

当您编写具有相同频道列表和元数据的两个段时,TDMS 格式将跳过该段的元数据(甚至是开头),这意味着所使用的空间仅为原始数据的空间,从而提供有效的“压缩率”为100%。

假设我们将完全相同的通道重复写入文件,我们只得到一份元数据副本,其余的都是原始数据,这正是我们想要的。

但考虑一下这种情况:

tdms_alternate_writes

在一种常见情况下,我们可能希望向文件写入两次。每次 TDMS 写入都会向文件写入一个段,在这种情况下,因为它将在两者之间交替,所以元数据确实会发生变化,并且每次都必须写入。这会导致文件碎片化。

TDMS 碎片可视化

在我们使用多个 TDMS 写入节点写入单个文件的任何场景中,都会发生这种情况。

您还可以看到碎片级别将取决于每次写入中包含的原始数据量。

如果我们每次写入10,000 个点,元数据仍然比原始数据小得多,虽然碎片化,但可能是可以接受的。

然而,如果我们每次写入1 个样本,那些绿色区域将会缩小很多,您最终可能会得到比实际数据更多的元数据!

我们可以通过查看使用文件时生成的 tdms_index 文件的大小来衡量碎片的影响。这本质上是从文件中提取的所有元数据。

tdms_fragmented_files

在这里我们可以看到文件2.tdms正是我们想要的。1kB 元数据到 15MB 文件。然而, 0.tdms 的碎片很严重,36MB 文件中的 12MB 用于元数据(在这种情况下,文件0.tdms1.tdms实际上包含完全相同的数据,但使用了稍后提到的一些技术,并在提到的示例中进行了演示)在最后)。

在处理碎片文件时,您还会看到库的内存使用量随着时间的推移而增加。这是因为 TDMS 库在内存中保存文件的模型,整理元数据,以便它可以执行诸如执行随机访问之类的操作。元数据越多,需要的内存就越多。

(相反,一些报告称,按照意外的严格定义,这并不是“内存泄漏”,它是完全可以预测的,并不是说它会让你感觉好很多!)

要减少内存,您需要减少碎片,或者定期关闭并打开新文件。

1.9将大数据集的TDMS文件导出到excel文件

要将TDMS数据集导出到Excel,请参考以下步骤:

  1. 右键单击所需的TDMS文件,然后从“打开方式”选项中选择“ Excel导入器” 。
  2. 选择“ Excel导入器”后,将自动打开一个Excel工作簿,并将TDMS文件的所有内容导入其中。

如果您的数据长度大于1,048,575,则在执行步骤1后将显示以下窗口。 


这是由于Microsoft Excel支持的最大行数为1,048,576。因此,您必须确定导入的开始索引。也就是说,如果要将2,000,000个数据从TDMS文件的单个通道导出到Excel文件,则必须执行两次导出,其中第一次导出的起始索引为1,而第二次导出的起始索引为1,048,576。

未完成,后续更新其他文件格式和数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vue3】引入高德地图并初始化

npm安装amap/amap-jsapi-loader包 <script setup> import AMapLoader from amap/amap-jsapi-loader; /*在Vue3中使用时,需要引入Vue3中的shallowRef方法 (使用shallowRef进行非深度监听, 因为在Vue3中所使用的Proxy拦截操作会改变JSAPI原生对象 否则会出现问题,建议JSAP…

学习笔记:利用CANOE Panel和CAPL脚本模拟主节点发送LIN通信指令

前一篇文章已经对CANOE如何模拟主节点和从节点进行LIN通信做了简单的记录&#xff0c;修改主节点发送的指令需要修改LIN ISC模块里的Frames帧对应的signal。这样改起来比较麻烦且不直观&#xff0c;幸好CANOE提供了Panel designer这样的工具&#xff0c;我们可以利用它设计自己…

谷歌浏览器配置允许跨域

1、在谷歌浏览器导航栏搜索chrome://flags 2、搜索Block insecure private network requests 3、修改状态

代码随想录打卡第六十三天|84.柱状图中最大的矩形

84.柱状图中最大的矩形 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 提示&#xff1a; 1 < heights.length <105 0 < h…

C语言:对于宏的一些概念及技巧

一、前言 宏在C语言中是一段有名称的代码段&#xff0c;在程序编译过程中&#xff0c;会将宏的内容被这段代码进行替换&#xff0c;常常用于定义一些常量、函数、代码块等&#xff0c;由于近年来发现许多公司进行面试时对于宏的面试题尤为多&#xff0c;故本文将对C语言中的宏的…

基于springboot实现招生平台管理系统项目【项目源码+论文说明】

基于springboot实现招生管理系统演示 摘要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括招生管理系统的网络应用&#xff0c;在外国招生管理系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。招…

使用Keepalived实现双机热备,实现服务高可用

安装&#xff08;所有节点&#xff09; yum -y install keepalived修改配置 vi /etc/keepalived/keepalived.conf :set nu //显示行号 :35 dG // 删除35行以后的所有行ip a将master1虚拟机挂起&#xff0c;再次执行ip a 看vip是否漂移到另一台虚拟机worker1 漂移了&…

一图搞懂傅里叶变换(FT)、DTFT、DFS和DFT之间的关系

自然界中的信号都是模拟信号&#xff0c;计算机无法处理&#xff0c;因此我们会基于奈奎斯特定理对模拟信号采样得到数字信号。 但是我们发现&#xff0c;即便是经过采样&#xff0c;在时域上得到了数字信号&#xff0c;而在频域上还是连续信号。 因此我们可以在时域中选取N点…

Softing TDX——设计模板

| 高质量的设计模板——减少开发诊断仪所需的工作量 现今&#xff0c;用户对诊断仪的界面和操作理念提出了更高的要求。一个直观的用户界面既能减少用户熟悉诊断仪的时间&#xff0c;又能减少在日常工作中进行诊断任务的时间。然而&#xff0c;创建一个精巧又独立于平台的诊断…

apollo docker搭建

1 mysql搭建 先需要一个mysql&#xff0c;mysql我使用的是5.7&#xff0c;搭建过程忽略 2 数据导入 我们需要从github上下载apolloportaldb.sql, apolloconfigdb.sql 2个sql 随后cp apolloconfigdb.sql apolloconfigdbUat.sql cp apolloconfigdb.sql apolloconfigdbDev.sq…

翻转二叉树(C++解法)

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&…

STM32G0+EMW3080+阿里云飞燕平台实现单片机WiFi智能联网功能(三)STM32G0控制EMW3080实现IoT功能

项目描述&#xff1a;该系列记录了STM32G0EMW3080实现单片机智能联网功能项目的从零开始一步步的实现过程&#xff1b;硬件环境&#xff1a;单片机为STM32G030C8T6&#xff1b;物联网模块为EMW3080V2-P&#xff1b;网联网模块的开发板为MXKit开发套件&#xff0c;具体型号为XCH…

chrome安装Vue Devtools插件以及无法添加来自此网站的应用问题

chrome安装Vue Devtools插件以及无法添加来自此网站的应用问题 问题背景 Chrome Vue插件是一款可以帮助前端开发人员在浏览器中实时查看和编辑Vue组件和数据的工具。给前端开发人员提供了极大的便利。本文将介绍Chrome浏览器中如何安装Devtools插件。 问题分析 &#xff08…

SpringBoot上传与下载文件

使用SpringBoot的虚拟路径映射。 Config中的类 import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import o…

iconfont 图标使用

&#xff08;1&#xff09;在阿里巴巴矢量图标库注册账号&#xff0c;然后让同伴拉你进项目iconfont-阿里巴巴矢量图标库 &#xff08;2) 点击资源管理 - 我的项目 - 可以看见该项目的图标了 &#xff08;3&#xff09;点击上传图标至项目 - 可以上传图标 使用图标 &#x…

使用高德地图获取定位报错:INVALID_USER_SCODE(无效用户代码)

1. 确定自己已经申请了相关应用的key&#xff0c;这里有两个key 一个是应用的Key&#xff0c;一个是安全密钥 2. 应用key一般是发送请求的是后通过key"xxx"发送 3. 安全密钥要在head里加入进去 <script type"text/javascript">window._AMapSecuri…

CocosCreator使用物理引擎和回调

在2d中开启碰撞需要在项目设置–功能裁剪–2D物理系统【选择 基于Box2D的2D物理系统】 如果想要两个物体碰撞&#xff0c;则需要添加刚体和碰撞【&#xff01;&#xff01;重点】 设置刚体类型 可以设为四种&#xff0c; Static 静态刚体&#xff0c;零质量&#xff0c;零速度…

《微服务架构设计模式》之三:微服务架构中的进程通信

概述 交互方式 客户端和服务端交互方式可以从两个维度来分&#xff1a; 维度1&#xff1a;一对一和多对多 一对一&#xff1a;每个客户端请求由一个实例来处理。 一对多&#xff1a;每个客户端请求由多个实例来处理。维度2&#xff1a;同步和异步 同步模式&#xff1a;客户端…

如何评价现在的CSGO游戏搬砖市场

如何评价现在的csgo市场&#xff1f; 其实整个搬砖市场&#xff0c;现在已经变得乌烟瘴气&#xff0c;散发着“恶臭”。我个人非常鄙视那些虚有其表&#xff0c;大小通吃的做法&#xff0c;那些甚至连搬砖数据都看不懂的人&#xff0c;也出来吹嘘着“实力强大&#xff0c;经验丰…

[架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法

目录 前言&#xff1a; 一、概述: 软件聚合的程度由简单到复杂 二、主要开发方法详见 2.1 结构化的开发方法 2.2 面对对象的开发方法 2.3 面向服务的开发方法 2.4 面向组件的开发方法 三、不同开发方法比较 3.1 结构化开发方法 3.2 面向对象(OOP)开发方法 3.3 面向服…