LabVIEW开发:如何按阈值选择全量或抽点记录数据写入TDMS文件
思路合理性说明
你的方案完全可行,是工业场景下降低TDMS存储体积的通用方案,既可以保留超过阈值的关键段全量高分辨率数据,非关键段降采样也能大幅压缩文件体积,适配你的需求。
核心功能实现方法
1. 阈值判断功能实现
- 一维波形数组:直接调用原生
Threshold 1D Array函数,输入待判断波形、阈值参数即可输出触发布尔值,直接对接Case结构选择端。 - 无符号长整型数据:直接用数值比较节点输出大于阈值的布尔值即可。
如果需要避免信号波动导致的频繁触发切换,可以给布尔输出加1~2秒的延时保持逻辑。
2. 等间隔抽点实现
不同数据类型可直接用LabVIEW原生函数处理,无需自行编写逻辑:
- 无符号长整型数组抽点:调用
Decimate 1D Array函数,输入源数组、抽点间隔n,输出即为每n个点保留1个的降采样数组,该函数原生支持所有数值类型,无需额外类型转换。 - 一维波形数组抽点:波形包含t0(起始时间)、dt(采样间隔)、y(采样值数组)三个属性,按以下步骤处理即可:
- 保留原波形的t0作为降采样波形的起始时间
- 降采样后的dt = 原dt * 抽点间隔n
- 对y数组调用
Decimate 1D Array按间隔n抽点
最后用Build Waveform函数拼接三个参数生成新的降采样波形,多通道一维波形数组套外层For循环逐个通道处理即可。
优化替代方案
如果希望进一步降低运行时内存开销,可以不用先修改源数组再写入,直接调用TDMS高级API的TDMS Advanced Set Next Write Position函数,全量写入时按正常步长写入,降采样写入时每次跳过n-1个点的位置写入单个值即可,写入效率更高。
如果担心阈值触发瞬间的前后数据被抽点丢失,可以额外加1~2秒的环形缓存,触发阈值前后的过渡段也做全量存储,避免关键事件数据不全。
你提供的现有日志记录流程框架无需调整,只需要在TDMS写入节点前加上述预处理的Case分支即可完成改造。
内容的提问来源于stack exchange,提问作者Mey11
相关产品推荐
相关产品推荐

