测量小百科 | 如何解读回放流盘文件
来源: | 作者:JYTEK | 发布时间: 2025-11-10 | 39 次浏览 | 分享到:

概述

很多简仪的板卡支持流盘功能,即AI任务模式支持Record模式。当软件使用该模式后,即可使用流盘功能。

如何解读回放流盘文件?最简单的方法就是参考简仪为每种设备提供的C# 范例。用户可以登录简仪官网https://www.jytek.com/,注册下载简仪大全《JYPEDIA》,在“Drivers and Software” 页中搜索下载需要的C# 范例。简仪提供各类语言的设备使用范例,但C# 范例具有最全的功能集合,其中包含了流盘文件解读回放范例。其他语言开发者若也想实现流盘文件的解读回放功能,可参考C# 范例来实现。

本文特地汇总了简仪主流板卡的解读回放流盘文件的方法,如下表。

如上表所展示的原始数据解读方法,主要分为3种方法:

方法1-直接读取Double值

这种方法最为简单直接,由于保存的数据就是Double类型,因此只需要直接读取就可以,多用于采样率不高的板卡。

方法2-将Int16值转换成Double值

这种方法将保存的Int16类型数据根据量程进行Double类型转换。由于不同卡在设计的时候量程系数不同,因此需要查看表中的系数A和系数B来进行转换。这种方法较多用于采样率高的板卡中。

方法3-根据通道的标定系数转换成Double值

这种方法需将保存的Int16或Int32数据根据每个通道对应的标定系数进行标定转换成Double类型。好处是每个通道具有独立的标定系数,此种方法或可能是简仪未来发布的设备的主要解读回放流盘文件的方法。

此3种方法的使用通常出现在解读回放流盘文件的最后一步“将原始数据转换为Double值”,完整的步骤为:

· 了解多通道数据存放顺序

· 从流盘文件读取原始数据

· 将原始数据转换为Double值


下文将详细介绍这几个步骤。


了解多通道数据存放顺序

无论何种数据格式(Double或Int16或Int32),多通道数据在流盘数据文件中按以下顺序存放:


用户在使用BinaryReader回读回来后,均需要按此规律将数据归类到各个通道。


从流盘文件读取原始数据

根据流盘数据文件所保存的数据格式,采用合适的方法读取数据。以下以C# 语言为例。

创建一个BinaryReader的实例

  • _playbackfs是FileStream类型,创建流盘文件的文件流。

  • _playbackbr是BinaryReader类型,基于_playbackfs创建。


读取byte[]类型的1维数据

如果要读取的数据元素个数为N,且数据类型为Double,那么要读取的字节数就是N*sizeof(double),如下

  • playback是一个原始数据类型的2维数组。

    如果是double[,]类型,则是double[每通道样本数,通道数]

    如果是Int16[,]类型,则是Int16[每通道样本数,通道数]

  • buf是byte[]类型,即读到的数据,是个1维数组。


根据通道和原始数据类型数转为2维原始数据

为了方便区分各个通道数据,通常还需要将上一步骤中读取到的byte[]类型的1维数据转换为多维的原始数据。用户可以根据上一节“多通道数据存放顺序”所描述的方法来转换,或直接使用C# 中的Buffer.BlockCopy方法。

  • playback是一个原始数据类型的2维数组。

    如果是double[,]类型,则是double[每通道样本数,通道数]

    如果是Int16[,]类型,则是Int16[每通道样本数,通道数]


将原始数据转换为Double值

将原始数据转换为Double值有三种方法,以下详细说明这三种方法的实现。


方法1-直接读取Double值

前提条件:通道数量

方法:按照多通道存放顺序读取Double类型数据即可。可参考范例”Winform AI Data Playback”,以5500系列为例,如下方代码:

其中:

  • buf是byte[]类型

  • playback是double[,]类型

  • _playbackbr是BinaryReader类型


方法2-将Int16值转换成Double值

前提条件:通道数量,所用量程,系数A和系数B(查阅本文开篇表格,或参考查阅范例)

方法:按照多通道存放顺序读取Int16数据,并参考范例“Winform AI Data Playback”。以5320系列为例,A是0x7FFF而B是1,如下方代码:

其中:

  • buf是byte[]类型;

  • rawData是short[,]类型;

  • _playbackbr是BinaryReader类型;

  • playData是double[,]类型;

  • 0x7FFF是系数A

  • scaleValue=所用量程*系数B


方法3-根据通道的标定系数转换成Double值

前提条件:保存原始数据类型(Int16或Int32),通道数量,所用标定系数(在AI任务启动前,通过GetScalingCoefficients方法获取。该函数返回值为ScalingCoefficients类型的数组。包含了每个通道的Gain和Offset标定系数)

方法:根据保存的原始数据类型,按照多通道存放顺序读取原始数据,并利用每个通道的Gain和Offset系数对原始数据进行重新的标定。

则转换方法是

其中:

  • readValue是double[],是某个通道的转换后的Double类型数组;

  • readRawValue是Int16[]或Int32[],是某个通道的原始数据,其数据类型取决于流盘时设置的保存的数据类型。

  • scalingCoefficients是ScalingCoefficients[],这个值需要用户在流盘时记录下来。通过AI任务的GetScalingCoefficients()方法获取。