发明内容
本发明提供的跨平台实时数据处理方法和装置,支持不同操作系统的跨平台运行,能够极大的提高数据处理的实时性,并且能够防止消息的丢失,提高系统性能。
第一方面,本发明提供一种跨平台实时数据处理方法,所述方法包括:
根据系统构成信息创建数据队列,所述数据队列包括作为输入的接口数据队列和作为输出的状态数据队列;
在接收到事件通知或者检查到未处理数据之后,读取相应的接口数据队列中的数据,所述事件通知包括写入接口数据队列的通知和读取数据的通知;
将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统;
将处理后的数据记录到各状态数据队列中。
可选地,所述作为输入的接口数据队列包括采集数据队列、操作数据队列;
所述作为输出的状态数据队列包括实时数据队列、报警数据队列、全纪录队列及历史数据队列;
所述根据系统构成信息创建数据队列包括:
通过通信驱动模块将采集到的现场数据写入到所述采集数据队列;
将用户下发的控制数据写入到所述操作数据队列。
可选地,所述将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统包括:
将从各接口数据队列中读取到的数据处理为数字量或模拟量形式的现场状态点的信息,所述状态点的信息包括状态点的时间戳、数值和状态标识;
将从所述操作数据队列中解析出的控制指令发送到指定控制系统。
可选地,所述将处理后的数据记录到各状态数据队列中包括:
将报警点的报警信息写入所述报警队列中,同时写入所述全纪录队列;
将变位点的变位信息直接写入所述全纪录队列中;
将所述现场状态点的信息写入所述实时数据队列中;
将解析出的控制指令写入所述全纪录队列中;
将历史点的数值和状态写入所述历史数据队列。
可选地,所述方法还包括:在设定的处理周期到达之后,检查各接口数据队列是否存在未处理数据。
第二方面,本发明提供一种跨平台实时数据处理装置,所述装置包括:
创建模块,用于根据系统构成信息创建数据队列,所述数据队列包括作为输入的接口数据队列和作为输出的状态数据队列;
读取模块,用于在接收到事件通知或者检查到未处理数据之后,读取相应的接口数据队列中的数据,所述事件通知包括写入接口数据队列的通知和读取数据的通知;
处理模块,用于将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统;
记录模块,用于将处理后的数据记录到各状态数据队列中。
可选地,所述作为输入的接口数据队列包括采集数据队列、操作数据队列;
所述作为输出的状态数据队列包括实时数据队列、报警数据队列、全纪录队列及历史数据队列;
所述创建模块包括:
第一写入单元,用于通过通信驱动模块将采集到的现场数据写入到所述采集数据队列;
第二写入单元,用于将用户下发的控制数据写入到所述操作数据队列。
可选地,所述处理模块包括:
第一处理单元,用于将从各接口数据队列中读取到的数据处理为数字量或模拟量形式的现场状态点的信息,所述状态点的信息包括状态点的时间戳、数值和状态标识;
第二处理单元,用于将从所述操作数据队列中解析出的控制指令发送到指定控制系统。
可选地,所述记录模块,用于将报警点的报警信息写入所述报警队列中,同时写入所述全纪录队列;
将变位点的变位信息直接写入所述全纪录队列中;
将所述现场状态点的信息写入所述实时数据队列中;
将解析出的控制指令写入所述全纪录队列中;
将历史点的数值和状态写入所述历史数据队列。
可选地,所述装置还包括:
检查模块,用于在设定的处理周期到达之后,检查各接口数据队列是否存在未处理数据。
本发明实施例提供的跨平台实时数据处理方法和装置,根据系统构成信息创建数据队列,自动维护作为输入的接口数据队列和作为输出的状态数据队列,采用事件驱动周期保护的调度方法,当有数据写入到输入数据队列或者检查到有未处理的数据时,开始读取接口队列中的数据,处理各个状态点的数值和状态,并将处理过的数据输出到各个状态数据队列中。与现有技术相比,本发明支持不同操作系统的跨平台运行,通过采用事件驱动和周期保护的调度方式,实时处理接口队列中的数据,能够极大的提高系统事件响应的实时性,并能够防止消息的丢失。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
QT是一个跨平台C++图形用户界面应用程序框架,具有良好的跨平台性能。本发明基于原生C++和QT开发提供一种跨平台实时数据处理方法,采用组件化设计思想,提供不同的功能组件,能够根据上层应用程序的部署及功能需求,提供单机应用程序间实时数据处理及不同机器应用程序间实时数据处理使用。
本发明提供一种跨平台实时数据处理方法,如图1所示,所述方法包括:
S11、根据系统构成信息创建数据队列,所述数据队列包括作为输入的接口数据队列和作为输出的状态数据队列;
本发明根据工业监控组态系统提供的系统构成信息创建数据队列,如图2所示,为本发明一应用场景的系统示意图,系统构成包括操作员站数据通讯子系统、本机数据通讯子系统、历史数据子系统、数据采集子系统及实时数据处理子系统。
可选地,所述作为输入的接口数据队列包括采集数据队列、操作数据队列;
所述作为输出的状态数据队列包括实时数据队列、报警数据队列、全纪录队列及历史数据队列。
所述根据系统构成信息创建数据队列包括:
通过通信驱动模块将采集到的现场数据写入到所述采集数据队列;
将用户下发的控制数据写入到所述操作数据队列。
基于如图2所示的工业控制系统,实时数据处理子系统处理的数据包括:采集过程数据和控制过程数据。其中,采集过程数据是数据采集子系统采集的各设备模块的现场数据,通过驱动模块写入到采集数据队列;控制过程数据是上位机的用户操作如下发的控制指令等数据,这些数据均写入到操作数据队列中。
基于所述实时数据处理子系统,本发明提供的实时数据处理方法在后台运行,正常工作时用户不感知,自动维护各数据队列,并随时更新及全网同步实时数据表。如图3所示,为本发明提供的基于QT跨平台的实时数据处理方法在后台的运行模式。
S12、在接收到事件通知或者检查到未处理数据之后,读取相应的接口数据队列中的数据;
可选地,所述事件通知包括所述通信驱动模块写入采集数据队列的通知和通信管理模块读取数据的通知。
本发明提供的跨平台实时数据处理方法采用事件驱动和周期保护的调度方式,通讯驱动模块将数据写入各采集接口队列后或者上层应用读取数据时就通知实时数据处理子系,实时数据处理子系统按照通知消息中的信息处理响应的队列,并将处理后数据标记为已处理。同时为了避免事件通知丢失,实时数据处理子系统还设定一个处理周期,当周期处理时刻到时,主动检查各接口数据队列中是否有未处理数据,如果有则处理。
S13、将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统;
S14、将处理后的数据记录到各状态数据队列中。
可选地,所述将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统包括:
将从各接口数据队列中读取到的数据处理为数字量或模拟量形式的现场状态点的信息,所述状态点的信息包括状态点的时间戳、数值和状态标识;
将从所述操作数据队列中解析出的控制指令发送到指定控制系统。
可选地,所述将处理后的数据记录到各状态数据队列中包括:
将报警点的报警信息写入所述报警队列中,同时写入所述全纪录队列;
将变位点的变位信息直接写入所述全纪录队列中;
将所述现场状态点的信息写入所述实时数据队列中;
将解析出的控制指令写入所述全纪录队列中;
将历史点的数值和状态写入所述历史数据队列。
可选地,在所述将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统之后,所述方法还包括:将处理后的数据标记为已处理。
可选地,所述方法还包括:在设定的处理周期到达之后,检查各接口数据队列是否存在未处理数据。
本发明实施例提供的跨平台实时数据处理方法,根据系统构成信息创建数据队列,自动维护作为输入的接口数据队列和作为输出的状态数据队列,采用事件驱动周期保护的调度方法,当有数据写入到输入数据队列或者检查到有未处理的数据时,开始读取接口队列中的数据,处理各个状态点的数值和状态,并将处理过的数据输出到各个状态数据队列中。与现有技术相比,本发明支持不同操作系统的跨平台运行,通过采用事件驱动和周期保护的调度方式,实时处理接口队列中的数据,能够极大的提高系统事件响应的实时性,并能够防止消息的丢失。
本发明提供的跨平台实时数据处理方法不依赖于操作系统及硬件环境,能够在Windows操作系统、中标麒麟操作系统平台两个版本同开发同发布同维护,两个版本同开发、同发布、同维护,既兼顾了国产化需求,又满足了未来几年Windows仍会在民用领域持续应用的需求。具体地,本发明对各数据队列的实时处理如下:
(1)对采集数据处理
本发明方法可采集来自不同控制器的不同数据类型的数据,所以采集数据队列中的数据包大小可以是不一样的,同一个控制器的数据包大小固定,但是不同控制器的数据包大小可以不一致。数据采集子系统上传的现场数据经过基于QT跨平台的实时数据处理方法的加工后,分别产生报警和变位等数据状态,报警点被报警处理模块处理后写入报警队列中,同时写入全纪录队列,变位点直接写入全纪录队列中。
采集数据队列的状态可分为三种:空状态、正常读写状态和溢出状态。其中,采集数据队列的读指针等于写指针时,则队列为空;正常读写状态为读指针追着写指针;溢出状态为写指针写满整个队列,重头开始写,并追上了读指针;当采集处理模块发现要写入的新包的长度将要覆盖未处理或处理中的数据包,则队列写入模块将新来的数据包丢弃(如果要写入数据包的长度需要覆盖队列中的多个数据包,则这多个数据包中只要有一个处于处理状态,就属于这种情况),并对该丢弃事件做报警记录,并在下一次符合写入条件时写入一个全点包。如果此时输入处理启动,则它连续处理未处理包,直到读指针等于写指针。如图4所示,为采集数据队列的示意图。
(2)操作数据的处理
本发明方法提供对上位机的用户操作和状态更新数据的处理,操作员站的下发(控制)指令发到指定控制系统,同时记录到全纪录队列,经过本发明方法处理,写入实时数据表。
用户下发的控制数据均写入操作数据队列中,操作数据队列包含模拟量置数包、数字量置数包、画面下发模拟量操作包、单一状态操作包、控制器状态及运行主从包、数据站、打印机及北斗状态包。其中模拟量置数包用来存放模拟量的人工置数信息,其中存放的点类型包括:AI,AO(模拟量输入,模拟量输出);对于系统内任何地方的AI数值操作使用这个包,对于系统内的AO置数也使用这个数据包,而对于AO的画面下发操作,则不使用该数据包,而是使用画面下发模拟量操作包;数字量置数包用来存放数字量的人工置数信息,包括DI,DO(数字量输入,数字量输出),对于系统内任何地方的数字量数值操作都是用这个包;画面下发模拟量操作包分为操作起始,操作中间和操作结束三种情况,对于画面下发操作,信息一览需要记录AO操作前的数值。如图5和图6所示,分别为操作数据队列中模拟量置数包和数字量置数包的示意图。
(3)实时数据处理
本发明方法将处理后的AI、AO、DI、DO信息写入实时数据表(实时数据队列)中,实时数据表中的点信息包括点的处理时间、点的数值和点的状态信息。如图7所示,为实时数据队列的示意图。
(4)报警数据处理
本发明方法根据用户自己配置的报警信息处理采集接口队列中的报警点的报警信息,并将报警发生信息、报警恢复信息和坏点信息等写入报警数据队列,队列中包括模拟量报警包和数字量报警包。如图8和图9所示,分别为报警数据队列中模拟量置数包和数字量置数包的示意图。
(5)全纪录数据处理
本发明方法在处理各个输入接口队列中的数据时,将需要记入全纪录中的信息写入全纪录数据队列。全纪录队列是一个循环队列,可以处理数值报警、报警复位、数据设定回复、人工置数、模拟量画面下发操作、状态变位等信息类型。如图10和图11所示,分别为全记录数据队列中全记录模拟量置数包和全记录数字量置数包的示意图。
(6)历史数据处理
本发明方法在处理采集接口队列中的数据时,对于满足收集条件的历史点的数值和状态写入历史数据队列,历史数据的收集条件是:模拟量变化超过死区、数字量变化满足定义条件、数值未变但是状态发生变化。历史数据队列为循环队列,包括数字量历史点包和模拟量历史点包。如图12和图13所示,分别为历史数据队列中模拟量历史点包和数字量历史点包的示意图。
本发明提供的跨平台实时数据处理方法,支持在国产PC机中标麒麟操作系统及Windows操作系统上跨平台运行;采用组件化设计思想,可以应用到任何一种基于以太网的应用软件系统中,对于开发人员来说,不管业务逻辑如何增加,其通信处理方法仅需要维护。
本发明实施例还提供一种跨平台实时数据处理装置,如图14所示,所述装置包括:
创建模块11,用于根据系统构成信息创建数据队列,所述数据队列包括作为输入的接口数据队列和作为输出的状态数据队列;
读取模块12,用于在接收到事件通知或者检查到未处理数据之后,读取相应的接口数据队列中的数据,所述事件通知包括写入接口数据队列的通知和读取数据的通知;
处理模块13,用于能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统;
记录模块14,用于将处理后的数据记录到各状态数据队列中。
可选地,所述作为输入的接口数据队列包括采集数据队列、操作数据队列;
所述作为输出的状态数据队列包括实时数据队列、报警数据队列、全纪录队列及历史数据队列;
所述创建模块11包括:
第一写入单元,用于通过通信驱动模块将采集到的现场数据写入到所述采集数据队列;
第二写入单元,用于将用户下发的控制数据写入到所述操作数据队列。
可选地,所述事件通知包括所述通信驱动模块写入采集数据队列的通知和通信管理模块读取数据的通知。
可选地,所述处理模块13包括:
第一处理单元,用于将从各接口数据队列中读取到的数据处理为数字量或模拟量形式的现场状态点的信息,所述状态点的信息包括状态点的时间戳、数值和状态标识;
第二处理单元,将从所述操作数据队列中解析出的控制指令发送到指定控制系统。
所述记录模块14,用于将报警点的报警信息写入所述报警队列中,同时写入所述全纪录队列;
将变位点的变位信息直接写入所述全纪录队列中;
将所述现场状态点的信息写入所述实时数据队列中;
将解析出的控制指令写入所述全纪录队列中;
将历史点的数值和状态写入所述历史数据队列。
可选地,所述装置还包括:
标记模块,用于在所述处理模块将读取到的数据处理为能够解析的数字量或模拟量数据,并将解析出的控制指令发送到指定控制系统之后,将处理后的数据标记为已处理。
可选地,所述装置还包括:
检查模块,用于在设定的处理周期到达之后,检查各接口数据队列是否存在未处理数据。
本发明实施例提供的跨平台实时数据处理装置,根据系统构成信息创建数据队列,自动维护作为输入的接口数据队列和作为输出的状态数据队列,采用事件驱动周期保护的调度方法,当有数据写入到输入数据队列或者检查到有未处理的数据时,开始读取接口队列中的数据,处理各个状态点的数值和状态,并将处理过的数据输出到各个状态数据队列中。与现有技术相比,本发明支持不同操作系统的跨平台运行,通过采用事件驱动和周期保护的调度方式,实时处理接口队列中的数据,能够极大的提高系统事件响应的实时性,并能够防止消息的丢失。
本发明实施例还提供一种跨平台实时数据处理系统,所述系统包括上述跨平台实时数据处理装置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。