- A+
所属分类:.NET技术
FCS一个完整的数据集主要有以下几部分:
-
头段(必须)
- 从数据集的第一个字节开始,文件的第一个数据集是从文件的第一个字节开始,最小长度为58个字节。
- 以ASCII码解析。
- 记录内容包括文件版本号(0~5共6字节)、文本段开始字节位(10~17共8字节)、文本段结束字节位(18~25共8字节)、数据段开始字节位(26~33共8字节)、数据段借宿字节位(34~41共8字节)、分析段开始字节位(42~49共8字节)、分析段借宿字节位(50~57共8字节)、其它段起止字节位(非必须,长度可自定义,但推荐8字节)。
- 文件版本号表示该文件是以哪个版本的FCS协议进行保存的,比如FCS2.0、FCS3.0、FCS3.1、FCS3.2,各个版本的版本号均还是6个字符,ASCII编码后是6字节。
- 6~9字节是空白预留字节,目前直到FCS3.2版本也未使用到。
- 各段起止字节位均是8字节,以ASCII解码后是一个数字字符串,数字字符串长度不足8位的会以空白字符(0x00)补齐。
- 各段起止字节位是相对版本号第一个字节的位置,并不一定是相对文件第一个字节的位置,在一个文件保存多数据集的情况下(虽然不推荐,但可能存在),前一个数据集文本段会有下一个数据集起始位($NEXTDATA)。
- 除了文本段,其它段的起止位的数字字符串长度超过8位,则在文本段中写入实际的起止位,头段则写入0。
- 文本段的起止位的数字字符串长度超过8位的,需要将文本段拆分为文本段和补充文本段,必须在头段中记录文本段的完整起止位。
-
文本段(必须)、补充文本段(非必须)
- Key-Value形式存储数据。
- 段的第一个字节是分隔符,分隔Key和Value以及下一个KeyValue,分隔符通常以KeyValue中不会出现的字符作为分隔符,FCS3.2版本推荐分隔符为0x0A,早期较多厂商使用垂线(0x7C)作为分隔符。
- 如果KeyValue中出现分隔符,则需要写入两个连续的分隔符表示,类似于\和的意思。
- Key值以ASCII解码,Value在FCS3.1、FCS3.2以UTF8解码,早期版本的FCS可以自定义解码格式($UNICODE)。
- 预定义的Key以$符号开头,自定义的Key无此限制。
- 预定义的Key除了各段的起止位置外,还包含实验、数据、样本等重要信息,其中部分是必须写入的,比如通道数($PAR)、总事件数($TOT)、通道名称($PnN)等。
-
数据段(必须)
- 数据段存储着各个通道的事件数据。
- 存储模式分两种:直方图模式(C)、列表模式(L),其中直方图模式在FCS3.1版本不推荐,FCS3.2版本不支持。各大厂商通常使用列表模式。
- 列表模式解析是从第一个通道的第一个事件开始,先循环通道,再循环事件,依次读取字节,即同一个事件的各个通道的数据按照通道顺序连续写在一起。
- 数据段的数据有4种:I(整型)、F(单精度浮点)、D(双精度浮点)、A(ASCII,较难见到)。
- 不同类型的数据使用不同的字节数或位数存储,在文本段中会记录各个通道使用的位数($PnB),其中单精度浮点固定为32位,双精度浮点固定为64位,ASCII模式下$PnB表示字节数,整型模式下$PnB表示位数。
- 整型模式下$PnB通常为8的倍数,否则解析算法比较复杂,解析速度较慢。目前各大厂商也是这么做,通常为16位或32位。
- 注意标准协议中整型模式下,数据存储是没有符号的,即整型模式下的数据均为正数,这也很好理解,采集信号要么有(正数),要么没有(0)。但部分厂商并未遵循此规则,原因是采集到的信号被计算处理过后变成负数。
-
分析段(非必须)、其它段(非必须)
- 分析段通常存储着分析过程或结果,但大部分情况下此段并不会出现,因为采集数据的机器软件并不特别擅长分析或者分析的结果并不会存入文件,通常交给专业的分析软件,比如FlowJo等。分析软件通常也不会修改原始文件。
- FCS3.1及以前版本,分析段与文本段一样是Key-Value形式,FCS3.2版不再限制为此形式,可以是任何形式,可能是几张图片,可能是一个Json字符串。
- 其它段属于自定义段,各个厂商可以根据自己需要创建只有自己软件能解析的段,通常情况下也不会出现。
-
CRC16校验(必须)
- 两个字节,CRC16校验码,跟随FCS3.2的发布,CRC16的计算方式也以代码的形式一起发布了。
-
传送门:
- FCS标准协议PDF文件下载地址:https://download.csdn.net/download/lwlcctv/86440144
- 流式图表开源地址:https://gitee.com/Lvwl-CN/FCSChart