CFETR中性束注入实验数据绘制分析系统开发*
2022-08-20杨子言胡纯栋赵远哲
杨子言,胡纯栋,赵远哲
(1.安徽大学物质科学与信息技术研究院,安徽 合肥 230601;2.中国科学院合肥物质科学研究院等离子体物理研究所,安徽 合肥 230031)
1 引言
Figure 1 Structure of data plotting system 图1 数据绘制系统结构
中性束注入凭借其优秀的加热效果和清晰的物理机制,成为了聚变等离子体重要的加热手段。而射频负离子源因其适合长时间稳态运行且中性化效率不会随粒子能量增加而下降的特性,逐渐取代了灯丝源和正离子源,成为中性束离子源的发展方向。负离子源中性束注入NNBI(Negative ion based Neutral Beam Injection)系统的研制也成为中国核聚变实验堆CFETR(China Fusion Experimental Test Reactor)发展总体规划中的重要部署。射频负离子源脉冲实验在实验过程中会产生大量的数据,如实验信号、设备状态、图像信息和日志记录等。在以往的短脉冲实验中,以LZO(Lempel-Ziv-Oberhumer)压缩文件作为数据的存储方式可以满足实验需求[1 - 5]。但是,随着脉冲实验的进一步发展,实验的时间长度将由过去的数秒量级,逐步发展至未来的千秒量级,同时待采集的信号数量也在逐步增加,目前单次实验产生的实验数据已达到百兆字节量级[1],LZO压缩文件的非实时特性已不能满足实验运行的数据存取要求[1,5]。而模型驱动系统MDSplus(Model Drive System plus)作为一个高效、功能丰富的数据管理系统,凭借其强大的数据存储和数据实时处理特性,获得了聚变界的广泛认可,并逐步应用于美国的D形截面约束托卡马克装置DIII-D(DoubletIII-Di)、意大利的反场磁约束实验装置RFX(Reversed-Field eXperiment)和中国的全超导托卡马克核聚变实验装置EAST(Experimental and Advanced Superconducting Tokamak)等聚变实验中[6 - 10]。在该背景下,射频负离子源脉冲实验项目也计划将MDSplus作为实验数据的存储管理系统。
然而,现有的数据绘制软件只适用于LZO压缩文件存储方式,而MDSplus自带的jScope绘制软件无法对任意炮号数据波形进行对比并且缺少相关辅助功能[11],无法满足实验人员的研究需求。本文针对射频负离子源脉冲实验的实验特性,结合MDSplus数据管理系统的系统特性,利用.NET平台上Winform框架多种控件的丰富功能,设计了一套实时、多功能的射频负离子源数据绘制系统。
2 系统设计
系统结构在设计时主要考虑目前实验对数据存取性能的需求以及将来实验规模扩大后的可扩展性。根据需求分析,射频负离子源数据绘制系统要满足实验数据的分段存储以及用户对实验数据的远程实时绘制要求。该系统主要由数据存储模块和数据绘制模块组成,如图1所示。
2.1 数据存储模块设计
2.1.1 存储需求分析
在射频负离子源脉冲实验中,根据启动条件、采样率和采集对象来源的不同,将采集的实验数据对象种类分为高速采集数据;低速采集数据、真空数据、光谱诊断数据、低温数据和朗缪尔探针数据等。其中,高速采集数据主要是加速电源以及引出电源产生的电压电流;低速采集数据主要是射频功率源、引出电源、加速电源、偏置电源、偏置板电源、磁滤器电源、缓冲器偏置电源、启动灯丝电源、弧偏置电源和电偏转电源等的电压电流;真空系统、光谱数据、低温数据等数据对象则为对应子系统产生的各类相关数据[1]。
MDSplus支持储存的数据类型中,除了有符号整数、无符号整数、单精度和双精度实数、单精度和双精度复数、字符数据以外,还包括了信号和设备等复合数据类型。其中,信号复合类型包含实验数据及其他相关的独立轴(例如射频负离子源源电流与时间的关系)。考虑到实验数据的绘制需求皆与实验时间相关联,因此对于实验数据的存储皆采用信号复合数据类型。而除此之外的其他数据,诸如增益、偏移和采样率等相关配置信息,采用单精度实数就足以满足数据存储要求。
2.1.2 存储结构设计
MDSplus在逻辑存储结构上采用树形结构,单个实验项目由一个模型树文件和若干个脉冲树文件组成[1]。其中,模型树决定了数据存储的层次结构,模型树内的分支构成了树的结构,叶子节点则为对应数据存储的位置;而脉冲树则是模型树的数据副本,用于按照模型树的层次结构存储对应实验所产生的数据。根据存储需求的分析,射频负离子源脉冲实验数据的模型树结构设计如图2所示。
Figure 2 Structure of model tree 图2 模型树结构
在模型树结构中,按照射频负离子源系统的子系统组成分为若干个子树,子系统下按照设备的不同再次延伸为若干个子树。为了在满足实验需求的基础上提高存储效率,每个子树叶子结点下设置信号(Signal)、原始数据(Raw Data)、时序(Timing)、开始时间(Start Time)、采样率(Sampling Frequeney)、偏移(Offset)和增益(Gain)等数据节点。其中,信号节点为复合数据类型,由原始数据和时序复合而成。为了避免数据冗余,本文采用MDSplus的BUILD_RANGE方法,根据实验的开始时间、持续时间和采样率动态计算得到相应的时序,以节省时序数据占用的空间;信号节点的复合通过MDSplus的MAKE_SIGNAL方法实现,只需通过该方法即可将原始数据与时序建立起对应关系,且不占用额外存储空间。
2.1.3 存取方式设计
为了保证数据的安全性以及服务器运行的稳定性,数据存储模块运行于CentOS系统服务器上,并配合MDSplus中Mdsobjects.h提供的函数实现服务器对实验数据的存取功能。
MDSplus相对于以往的LZO压缩方式来说,在数据存取上的最大特点就是支持数据的分段写入和读取[3]。在数据写入的过程中,采集设备将每一秒内采集的数据与对应的炮号、信号名称以及采集的开始时间、结束时间、采样率等信息打包发送给服务器,服务器接收后通过对数据包进行分析找到对应的节点,并用MakeSegment方法将数据段写入,写入流程如图3所示。MakeSegment方法会将数据保存至数据段的末尾,当实验过程中出现错误导致实验数据不能正常存储时,可用PutSegment方法将数据段插入至指定位置。
Figure 3 Flow chart of data writing图3 数据写入流程
当第一段数据写入数据库后,MDSplus允许对数据库中的数据按段进行读取。利用GetNumSegments方法,可以获取当前节点的数据的段数量,再利用GetSegment方法即可获取当前节点目标段号的段数据。系统还设计了SetTimeContext方法,该方法允许用户按照指定采样率获取指定时间段内的全部数据。GetNumSegments方法和SetTimeContext方法的使用差异如图4所示。
Figure 4 Data read mode comparison图4 数据读取方式对比示意图
2.2 数据绘制模块设计
2.2.1 绘制需求分析
射频负离子源脉冲实验中,目前单次实验的时间长度为26 s,采样率为5 000 Hz,单个信号源的数据量可达13万。除此之外,目前共有64道信号数据需进行采集绘制。考虑到将来实验时间长度的延长和待采集信号数量的增长,系统需支持对最大百万量级的数据实现快速稳定的传输和绘制。
在波形绘制方面,系统除了需要将数据平滑完整地绘制以外,还需要提供横纵向缩放、区域截取和数值显示等基本功能。为了方便实验人员在实验过程中观察数据,还需要添加诸如波形对比、全局缩放、波形平铺和缩放记忆等辅助功能。除此之外,针对将来脉冲实验持续时间最长可至3 600 s这一现实需求,还需要提供数据重采样功能,以实现对高采样率数据进行低采样率快速绘制。
在数据通信方面,因为TCP协议具有拥塞控制、快速重传和快速恢复等特性,能够保证射频负离子源脉冲实验产生的数据完整地传输至用户端口,所以系统采用TCP协议来实现数据的远程传输。为了实现客户端与服务器之间、服务器与采集端之间的统一通信,系统定义了MDSplusHeader结构体作为服务器识别请求的媒介。MDSplusHeader中定义了设备名、服务器名、操作符、信号名、炮号、时间增量、开始时间、结束时间和数据长度等信息,服务器识别对应信息后,会进行相应存入或者读取数据的操作。MDSplusHeader结构体中各字段如图5所示。
Figure 5 Diagram of MDSplusHeader field 图5 MDSplusHeader各字段示意图
2.2.2 数据绘制模块设计
为了保证数据的平滑绘制及相关功能的实现,在经过对比msChart、MicroChart、ZedGraph、WaveFormGraph和EasyChart等波形绘制控件的功能及显示效果之后,射频负离子源数据绘制模块采用简仪科技开发的EasyChartX和StripChartX绘图控件实现数据绘制。上述控件绘制百万量级的数据所需时间最快仅需数十毫秒,能够满足实验需求。数据绘制模块流程如图6所示。
Figure 6 Flow chart of data plotting module图6 数据绘制模块流程图
根据需求分析,数据绘制模块的重点是能在数据绘制方面提供多种功能。绘图控件自身提供了横纵向缩放、区域截取和数值显示等基本功能,其余特色功能需要利用控件提供的各项接口组合实现。其中,利用绘图控件支持同时绘制多线条的特性,可以实现多炮号实验波形的对比功能,考虑到这一功能的使用场景往往为单次实验结束之后,因此数据绘制模块将绘制功能分为实时模式和对比模式2种模式。在实验过程中,实验人员往往需要对整段数据中固定时间范围的所有信号数据进行缩放,根据这一需求,本文利用控件的ViewMaximum和ViewMinimum属性实现对全局信号的统一控制,也可以记录当前缩放状态以对下一炮的实验数据波形进行相同范围缩放。
平铺绘制功能和数据重采样功能是数据绘制模块的特色功能。其中平铺绘制功能针对的是实验数据的峰谷值相差较大时,在对某一区间数据截取后还需要多次进行手动纵向的缩放才能达到良好的绘制效果这一问题。利用ArrayArithmetic库中的FindMaxMin函数,可以获取到数据内的最大值和最小值,即可通过限制视图范围的方式对数据线条进行平铺。并且当用户对特定区域进行缩放后,仍可对该特定区域的绘制线条进行二次平铺。该功能能够简化实验人员的操作步骤,方便实验人员对实验数据进行分析。该功能绘制效果如图7所示。
Figure 7 Plotting effect of tile function 图7 平铺功能绘制效果
数据重采样功能针对的是对大量实验数据进行分析绘制。当待接收的数据量过大时,会导致系统响应缓慢,且会增加实验人员的等待与反应时间。而系统的数据收集与数据绘制是2个独立的过程,只有当数据收集完成后,控件才会对数据进行绘制,这其中数据收集耗费的时间远大于绘制所耗费的时间。因此,针对长脉冲数据的绘制任务,可利用本文设计的SetTimeContext方法先获取低采样率的数据。SetTimeContext方法允许用户从MDSplus数据库中获取不同采样率的数据。当低采样率数据快速绘制完成后,数据绘制模块在后台继续接收高采样率的数据,当接收完成后,实验人员可以自行选择是否将波形更新为高采样率的数据。该功能的绘制流程如图8所示。
Figure 8 Flow chart of resampling function图8 重采样绘制功能流程图
通过这种方法实现的数据重采样功能,在应对将来的3 600 s脉冲实验时,能够极大节省绘制时实验人员的等待时间。具体效果如图9所示。图9中,“Before Resampling”为500 Hz采样率的数据绘制效果,“After Resampling”为5 000 Hz采样率的数据绘制效果。
Figure 9 Plotting effect of resampling function 图9 重采样功能绘制效果
在界面设计上,由于数据绘制模块的主要目标是满足实验人员分析数据的需求,因此波形绘制界面在整体界面中占有很大的比重。除此之外,本文还设计了诸如基本功能选择栏、配置信息设置、全局模式设置、基本信息显示和小功能栏等模块方便实验人员使用。界面的整体布局如图10所示。
Figure 10 Interface layout of data plotting module 图10 数据绘制模块界面布局
3 系统性能测试
为检测系统在时间、空间和功能上的性能是否能够满足需求,现对数据存储和数据绘制2个模块的相关性能进行测试。
3.1 数据存储模块测试
由于数据的压缩效率和数据的读取时间对系统整体的使用影响最大,本节主要测试数据压缩的空间性能和数据读取的时间性能。
系统测试中客户端环境为Intel Core i7-8700K处理器、16 GB DDR4内存、1 000 Mbps网络;数据服务器环境为Intel Xeon E5-2450L处理器、8 GB DDR3内存、1 000 Mbps网络、MDSplus版本为7.96-stable。
数据压缩方面,测试采用26624、26625、26635三炮的实验数据在文本文件下与MDSplus数据服务器内相应炮号脉冲树下的.datafile文件字节大小的不同来计算压缩率,结果如表1所示。经测试得到MDSplus数据的压缩率平均为15.5%,与LZO算法平均20%的压缩率[11]相比,进一步提高了存储空间的利用率。
Table 1 MDSplus file compression ratio表1 MDSplus文件压缩率
数据读取方面,由于MDSplus具有分段管理数据的特性,服务器在处理读取数据的请求时会按数据段异步执行读取和传输操作,所以单次数据请求的处理时间将由网络传输速度决定,数据读取耗时可忽略不计。
3.2 数据绘制模块测试
数据绘制模块的测试主要是数据绘制模块执行各项绘制功能所需的时间,以及软件运行的稳定性。各功能所需执行时间如表2所示。
Table 2 Execution time of module functions 表2 数据绘制模块各功能耗时
经多次测试,数据绘制模块对于单个约127 MB的数据文件绘制的平均耗时为530 ms。而在绘制2个总大小为253 MB的数据文件这种较为极端的情况时,绘制耗时平均为1 260 ms。针对这种情况对采样率为5 000 Hz的原数据文件分别进行1 000 Hz和500 Hz的重采样绘制之后,平均绘制耗时则分别为315 ms和133 ms,该功能能够在保证一定绘制质量的同时极大地减少绘制耗时。
4 结束语
本文基于MDSplus的数据存储模块和基于C++的数据绘制模块共同实现了数据的分段存储、分段读取、实时绘制等射频负离子源脉冲实验迫切需求的功能。而MDSplus对实验数据的高效压缩以及数据绘制模块提供的多种功能进一步提高了实验过程中数据存储和分析的效率,改善了实验人员的体验,也通过了时间的考验。该系统除了可以应用于射频负离子源脉冲实验这类中性束注入实验以外,对于大部分需要大量绘制和存储实验数据的使用场景,均能起到减少数据存储空间、分段管理数据和实时绘制数据等作用。然而,系统本身仍旧存在一些需要改进的地方。下一步将针对数据绘制模块使用过程中内存占用较高、无法保留已绘制的页面、最大仅支持三炮数据对比绘制等问题,进行进一步改进和完善。同时,也将继续在数据存储结构优化和数据存储管理等方面进行探索,以求找到更高效、更灵活的数据存取方式。