美章网 资料文库 实时数据采集模型设计与开发范文

实时数据采集模型设计与开发范文

时间:2022-04-28 10:38:23

实时数据采集模型设计与开发

摘要:

数据采集是构建集团/区域公司级实时监管系统的重要基础。文章针对已有数据采集软件开发中功能模块重复开发,应用中测点配置不统一,不支持冗余部署,故障恢复能力不足等问题,采用C/S架构,设计了可靠实时数据采集模型,该模型包括数据采集、数据缓存、数据传输和数据持久性4个模块。实际应用表明,基于该模型开发的实时数据采集软件易于配置,数据传输可靠,故障恢复能力强,能满足实时系统的数据采集要求。

关键词:

实时数据;统一配置;数据采集;数据缓存;冗余传输

生产数据是各类电力信息系统的应用基础,从厂级监控信息系统(SupervisorInformationSystem,SIS)到集团/区域(省级)公司级实时监管系统,实时数据采集始终是实时系统不可或缺的部分[1-2]。在以往的数据采集软件开发中,功能模块重复开发较为严重,开发效率不高,软件质量管控工作量大;在工程应用中,数据采集软件测点配置多采用本地方式,无法进行统一管理,不便于配置、查询,不支持冗余配置,故障恢复能力不足。本文以实时监管系统中的数据采集为基础,结合实时数据采集的特性,针对数据抽取、转换、传输、数据缓存及冗余传输等相关环节进行分析,给出了较为通用的设计模型。

1数据采集软件的功能需求

在集团/区域(省级)公司实时监管系统中,绝大多数的基础数据来自于下辖电厂实时生产系统。实时监管系统中的数据监测、数据报警、性能指标计算,污染物排放定量分析及经济运行等相关功能都围绕一次生产数据展开[1-3]。数据采集软件需要完成对监管电厂海量实时生产数据的筛选,完成筛选后数据的网络传输,最终汇总到公司侧的数据库,实现生产数据的持久化。实时监管系统中,因监管电厂数量众多,各个电厂信息化程度差异大,接入的数据源差异很大。对于已有厂级监控信息系统(SupervisoryInformationSystem,SIS)、管理信息系统(ManagementInforma-tionSystem,MIS)的电厂,数据源主要包括实时数据库和关系数据库。实时数据库应用较为广泛的包括PI、eDNA、openPlant、Rython[4]等;关系数据库主要包括MSSqlserver、Oracle等。部分厂站侧没有集成后的信息系统,需要从生产系统中直接采集,通信协议包括用于过程控制的OLE(OLEforProcessControl,OPC)协议,IEC101、IEC104、CDT、ModBus等规约,少数系统需要采用自定义用户数据报协议(UserDatagramProtocol,UDP)。基于这种现状,数据采集软件必须要解决多种数据源的数据抽取。

实时监管系统在构建中需要兼顾数据完整性和数据规模2方面,既要保证采集数据能满足性能计算、分析的需要,又要避免采集数据规模过大,给主站侧系统带来不必要的压力。数据在采集中还需要完成筛选,及源测点和目标测点的映射;在传输中完成实时数据及时戳转换,同时要为工程实施提供易用的测点检索、维护功能等。在大多数实时监管系统中,从电厂的数据源到主站侧服务器,地域跨度较大,中间网络状况较为复杂。这种情况要求在出现网络异常时,软件能及时缓存数据,待通信恢复后,按照数据回补策略重新发送,保证实时数据的完整性。因此,数据采集软件必须能保证数据的可靠、高效传输,要能满足实时系统的相关功能指标要求。综上所述,实时数据采集软件必须涵盖的功能包括:支持多种类型数据源的采集;支持数据抽取筛选,自动完成测点的映射,支持测点和数据的标准化转换;完成实时数据的可靠、高效传输,具备一定的故障恢复能力,支持数据缓存,支持通信的冗余配置。

2数据采集模型的设计

2.1总体架构数据采集模型采用C/S模式,基于TCP/IP协议开发[5]。按照模块功能划分,模型架构如图1所示。

2.1.1服务器端的主要功能1)测点管理。基本测点属性见表1所列。通过测点的基本属性配置,完成了源测点与目标测点的映射,为客户端进行数据抽取、数据校验、转换提供了所需的配置信息。为了便于管理、查询,测点属性通常保存在服务器侧实时数据库或本地配置文件中,客户端仅保留一份配置副本,不需进行手动修改。当测点配置更改时,服务器会主动推送信息到客户端或由客户端在下一次连接时发起请求,主动获取更新本地副本。2)客户端管理。客户端管理包括客户端配置管理和状态管理,配置管理包括对每个客户端的基本信息配置,对互为冗余的客户端进行成组配置;状态管理主要检测当前客户端绑定的socket信息,完成当前数据链路的流量统计,完成客户端工作状态判定,通过对网络通信状态及工作超时检测,实现对冗余客户端的自动管理。在数据采集预处理时,服务器端通过测点配置项中的标识字符串或客户端标识,自动完成测点与客户端的逻辑关联,生成每个客户端的工作点集。3)网络通信管理。完成指定端口侦听,处理网络连接请求,完成数据接收、数据拼包,实现对基本数据指令的解析处理、处理网络异常检测等。4)数据存储管理。完成实时数据解析、处理,完成目标数据库配置、目标数据库自动连接,实现实时、历史数据入库速率控制等。5)数据缓存管理。在数据存储异常时自动完成数据缓存,同时通过缓存读取管理实现对历史数据回补的限速处理。

2.1.2客户端的主要功能1)数据源管理:完成数据源基本配置,实现数据源自动连接等。2)数据采集管理:维护采集测点副本,完成配置项验证,实现数据测点映射,实现数据及时戳转换等。3)网络通信管理:完成配置信息接收,实现传输数据组包,维持通信链路,处理网络异常等。4)数据缓存管理:处理在网络通信异常时的数据缓存以及实时数据流量控制等。以较为典型的数据抽取流程为例,数据处理流程如图2所示。

2.2数据采集

2.2.1配置预处理配置预处理是数据采集的基础,客户端在获取到配置信息后,要完成2部分的预处理。1)核对下发测点配置信息,主要包括测点名称和测点类型验证。通过测点名称验证,剔除数据源中不存在的点;完成测点数据类型验证,避免由于服务器端与数据源测点类型不一致导致的类型转换异常,特别是Float、Double等高精度类型被错误配置为Byte、Short等存储字节较小的类型时,类型验证尤为重要。2)重构源测点与目标测点映射表。在测点信息配置时,数据索引常采用字符串类型(如测点名称)的属性作为键值,在进行数据检索、处理时,效率较低,在测点数量较大时,对性能影响明显。在预处理时,选择整型(如测点ID)等基本属性进行映射表重构,可以显著提供检索效率,缩小数据包长度,提高传输效率。

2.2.2数据转换从源数据库读取实时数据后,通常需要根据测点配置完成3类转换:数值二次计算、一对多标签转换及数据时戳处理。1)数值的二次计算主要是为了解决源数据采用非标准工业单位、数据基准值需要补偿等问题,基本数据转换见表2所列。2)数值的一对多转换是为了处理单一源测点对应多个目标测点的情况,通过转换,保证了数据采集的完整性。3)数据时戳直接影响到数据过滤、压缩和存储。时戳转换主要包括:对时戳大幅超前的数据进行修正,大多数实时数据库对此类数据均采用抛弃策略,如果数据源无法修正,则会导致数据丢失;针对时区进行处理,部分控制系统采用格林尼治时间,在采集时需要根据时区进行调整,少量数据源所在地与服务器所在地跨时区,需要对时间进行修正;增加时戳,少数数据源提供的数据不携带时戳,需要增加。

2.2.3数据过滤和压缩实时监管系统中涉及的网络传输往往需要跨网段,由于多种网络设备的引入,导致数据链路质量无法优化;同时,大多数情况下,数据链路被多种业务共享,实时监管系统的数据采集是持续、稳定的网络业务。因此,必须在保证数据传输效率的基础上,尽可能降低网络带宽占用,减少对其他业务的影响。为提高网络传输效率,客户端采集数据在传输前,对数据采取了过滤和压缩策略。数据过滤是指基于数据值和时戳对实时数据进行过滤,采用“变则发,不变不发”的原则;数据压缩是指采用Deflate、GZip等无损压缩算法对过滤后的数据进行二次处理。通过过滤和压缩,显著节约了网络带宽,降低或减少了实时数据采集对其他业务的影响。

2.3数据传输数据采集模型的核心功能是数据传输,为提高数据传输效率,保证数据可靠性,从以下几方面进行处理。

2.3.1网络链路采用长连接在实时监管系统中,数据源与目标服务器大多跨网段,传输距离较远。为了提高传输效率,数据传输采用长连接模式。当发送数据量较少时,采用周期性发送心跳包的方式维持链路,减少由于路由器、防火墙等网络设备的超时策略导致数据连接频繁中断。客户端在数据传输中的状态转换如图3所示。客户端为保证数据通信的可靠性,重点处理网络连接超时、数据发送超时、数据应答超时等异常情况。当链路状态转入网络重连后,立即启用数据缓存,保证发送数据被及时保存;对于发送超时、应答超时发送时,主动关闭现有连接,切换到网络重连状态。

2.3.2使用变长数据包根据数据包头信息,易于完成数据完整性校验,实现数据拼包、分包及解析。数据包格式如图4所示。

2.3.3传输模块内嵌数据缓存根据数据实时采集的特性,在传输模块中内嵌数据缓存。数据缓存分为为内存队列和缓存文件两级。短时间的网络故障,数据被缓存到队列中,系统处理无I/O操作开销,效率较高;如果故障时间较长,为保证可靠性,自动将数据转存到本地文件。数据缓存结构如图5所示。当数据获取线程从数据源抽取数据后,在异步发送数据中,如果发送速率低于数据获取速率,导致实时数据队列超长,数据自动转入缓存队列;如果网络异常或其他原因导致发送失败,则数据从发送队列转存至本地缓存。当异常时间过长,数据队列超过上限,则被持久化到本地文件。本地文件以保存到文件中的首笔数据时戳命名,当文件大小超过配置设定上限时,自动切换,生成新的文件。在实时系统中,实时数据优先级最高,在网络链路恢复后,优先发送实时数据,对于历史数据采取限速发送的策略。

2.3.4通信链路冗余配置为了提高数据传输的可靠性,在采集模型设计中,采用2路并行通信的冗余策略。2个客户端部署在独立的接口机上,从同一数据源采集数据,共同组成一个冗余数据组,当某一个客户端出现硬件故障或网络异常时,自动切换到冗余客户端。服务器侧对客户端的管理采用客户端Session和Socket动态绑定的方法,每路客户端首先创建客户端Session,在客户端连接成功后,通过客户端标识将Session与底层的SocketID映射绑定。通过对Session类的操作,完成冗余状态判定、工作状态判定、数据流量统计及链路超时判定等。客户端Session基本信息见表3所列。其中,链路状态分为中断和工作2种,为区分冗余组中2个客户端的状态,发送数据的客户端(主客户端)标识为工作,发送心跳数据的客户端(从客户端)标识为连接。冗余组中的客户端,在连接服务器成功后,首先向服务器发送冗余组标识,该标识为每个冗余组的唯一标识。服务器根据冗余组标识动态管理多路客户端,同时根据客户端接入的先后顺序来动态确定主从:先连接的客户端为主,后连接的为从。被判定为主的客户端,接收状态信息后,循环向服务器发送实时数据,判定为从的客户端连接成功后仅发送心跳包以维持链路。服务器端启用专门的检测线程管理客户端。当主客户端连接超时(即未发送数据的时间间隔超过了设定时限)或异常中断时,如果从客户端处于连接在线状态,则服务器向从客户端推送冗余切换指令,实现主从客户端的切换。

2.4数据存储1)数据分包。服务器侧接收到数据后,通信功能模块完成数据包头解析。在完成数据校验后,根据包头定义的数据长度,判定当前接收数据是否完整。数据包根据长度不同,分为3种情况:接收的数据包完整,包长度和数据定义长度一致;接收数据包长度小于定义长度;接收数据包长度大于定义长度。针对后2种情况,使用数据缓存暂存数据,后续接收到数据后完成数据分包。在获取到完整的数据包后,将数据包转至线程池进行解析。通过将数据通信与数据解析异步化,保证了服务器的处理效率和并发能力。2)数据解析与存储速率控制。对于接收到的完整数据包,按照通信协议,依次进行数据解压、数据解密及数据存储。在实时传输系统中,优先保证实时数据存储,历史数据被首先写入本地缓存,根据配置调整写入线程速率,实现了数据入库时的速率控制。

2.5异常处理及日志系统数据采集传输涉及多个环节,异常情况多样。在每个功能模块,都需要处理异常并给出较为详细的日志信息。通过完备的日志系统,帮助工程人员对数据传输中的各个环节进行检查,方便准备定位异常,及时处理。在日志系统处理时,将信息划分为信息、警告及调试3个等级,每个等级输出的信息量逐次增加,既保证了调试模式输出信息完整,又保证在正常运行时,日志模块不会影响正常的数据处理。

3数据采集模型开发涉及的主要技术

3.1插件技术从不同的数据源抽取数据的方式差异很大,无法在开发时处理完所有的数据接口。针对这种情况,采用组件式插件[6]解决。针对不同数据源,根据已定义的数据访问接口,开发实时数据抽取插件,通过简单配置完成不同数据源的切换。在使用C#进行开发时,通过反射方式加载数据抽取DLL[7],实现了多种数据源的统一。

3.2异步网络通信数据传输模块基于.Net中SocketAsyncEven-tArgs类[8-9]封装,SocketAsyncEventArgs类为高性能网络服务器应用程序设计,基于高性能异步Socket实现[9],SocketAsyncEventArgs从设计上避免了在异步套接字I/O量非常大时,需要重复进行对象分配和数据同步,避免频繁进行垃圾回收,降低了系统开销。借鉴内存池的处理思想,对高频使用的数据缓冲区(Buffer)管控进行优化。在网络通信模块初始化时完成Buffer数组创建,按照最大连接数乘以单个最大Buffer大小初始化,在使用中以客户端ID为索引完成快速检索,同时将发送Buffer和接收Buffer分离,保证了数据处理的效率。

3.3多线程服务器端接收、处理数据,客户端采集、发送数据等功能均基于多线程实现。根据线程的生命周期长短和工作频率,把线程分为长、短两大类。长期工作线程的生命周期和应用程序几乎等长,此类线程使用单独线程来处理。对于短线程,如完成数据解析的线程,执行需要时间短,不需要指定线程优先级,不需要对线程进行睡眠、挂起等操作,适合采用线程池来实现。.Net中ThreadPool类[7]针对大量运行线程设计,通过有限的固定线程能为大量并发操作服务,通过使用线程池减少了创建、销毁线程所需的系统开销,提高了系统的整体效率。为了保证数据安全,在处理数据时,通过锁、信号量等机制进行数据同步[7,10]。在多个功能模块之间进行交互时,使用线程安全队列,实现读、写线程处理异步化,降低了系统各个功能模块间的耦合度,兼顾了处理效率和数据安全。

4结语

本文以实时监管系统中的实时数据采集为研究基础,对可靠数据采集中涉及的主要问题进行了讨论,该数据采集模型中的主要功能模块易于复用。基于该模型开发的实时数据采集软件具有配置查询简单、数据转换方便、网络传输可靠等特点,已在多个工程中得到应用。

作者:王文庆 刘超飞 单位:西安热工研究院

被举报文档标题:实时数据采集模型设计与开发

被举报文档地址:

https://www.meizhang.comhttps://www.meizhang.com/gclw/sjcjlw/692568.html
我确定以上信息无误

举报类型:

非法(文档涉及政治、宗教、色情或其他违反国家法律法规的内容)

侵权

其他

验证码:

点击换图

举报理由:
   (必填)