发明内容
本申请所要解决的技术问题是提供一种工业实时数据压缩方法及装置,用以解决现有工业控制***中的实时数据急剧增加,需要对这些历史实时数据进行压缩存储的技术问题。
本申请提供了一种工业实时数据压缩方法,应用于工业控制***,所述方法包括:
确定所述工业控制***中待存储的当前数据点,并获取所述工业控制***中已经存储的数据点中最近存储的数据点作为目标数据点;
依据所述目标数据点中的目标时间标签及所述当前数据点中的当前时间标签,确定所述当前数据点的压缩时间标签;
依据所述目标数据点中的目标质量码及所述当前数据点中的当前质量码,确定所述当前数据点的压缩质量码;
依据所述目标数据点中的目标浮点值及所述当前数据点中的当前浮点值,确定所述当前数据点中的压缩浮点值;
整合所述压缩时间标签、所述压缩质量码和所述压缩浮点值,得到所述当前数据点的压缩数据点。
上述方法,优选的,所述依据所述目标数据点中的目标时间标签及所述当前数据点中的当前时间标签,确定所述当前数据点的压缩时间标签,包括:
计算所述当前数据点的当前时间标签与所述目标数据点的目标时间标签的差值;
将所述差值作为所述当前数据点的压缩时间标签。
上述方法,优选的,所述依据所述目标数据点中的目标质量码及所述当前数据点中的当前质量码,确定所述当前数据点的压缩质量码,包括:
将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,得到对比结果;
判断所述对比结果是否表明所述当前质量码与所述目标质量码相同,如果是,设置所述当前数据点的压缩质量码为空,否则,将所述当前数据点的当前质量码作为所述当前数据点的压缩质量码。
上述方法,优选的,所述依据所述目标数据点中的目标浮点值及所述当前数据点中的当前浮点值,确定所述当前数据点中的压缩浮点值,包括:
将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,得到所述当前浮点值与所述目标浮点值的首个差异位;
依据所述首个差异位,计算所述当前浮点值的待存储位数;
判断所述待存储位数是否为0,如果是,设置所述当前数据点的压缩浮点值为空,否则,依据所述待存储位数计算浮点标记码,所述浮点标记码包括5位存储位,将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值。
上述方法,优选的,所述整合所述压缩时间标签、所述压缩质量码和所述压缩浮点值,得到所述当前数据点的压缩数据点,包括:
设置压缩标记码,所述压缩标记码包括1字节,所述压缩标记码中包括第一位组、第二位组和第三位组,所述第一位组包括3位存储位,所述第二位组包括1位存储位,所述第三位组包括1位存储位;
获取与所述压缩时间标签相对应的存储字节数,所述存储字节数小于或等于8,将所述存储字节数对应的二进制编码写入所述第一位组中的存储位;
判断所述压缩质量码中是否包括有存储位,如果是,将所述第二位组中的存储位置1,否则,将所述第二位组中的存储位置0;
判断所述压缩浮点值是否包括有存储位,如果是,将所述第三位组的存储位置1,否则,将所述第三位组的存储位置0;
将所述压缩标记码、所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次进行按位连接,将连接生成的数据作为所述当前数据点的压缩数据点。
上述方法,优选的,所述依据所述待存储位数计算浮点标记码,包括:
设置浮点标记码,所述浮点标记码包括5位存储位;
将所述待存储位数减去1得到中间变量;
将所述中间变量的二进制编码按位写入所述浮点标记码中。
本申请还提供了一种工业实时数据压缩装置,应用于工业控制***,所述装置包括:
数据点确定单元,用于确定所述工业控制***中待存储的当前数据点,并获取所述工业控制***中已经存储的数据点中最近存储的数据点作为目标数据点;
第一压缩单元,用于依据所述目标数据点中的目标时间标签及所述当前数据点中的当前时间标签,确定所述当前数据点的压缩时间标签;
第二压缩单元,用于依据所述目标数据点中的目标质量码及所述当前数据点中的当前质量码,确定所述当前数据点的压缩质量码;
第三压缩单元,用于依据所述目标数据点中的目标浮点值及所述当前数据点中的当前浮点值,确定所述当前数据点的压缩浮点值;
压缩整合单元,用于整合所述压缩时间标签、所述压缩质量码和所述压缩浮点值,得到所述当前数据点的压缩数据点。
上述装置,优选的,所述第一压缩单元包括:
差值计算子单元,用于计算所述当前数据点的当前时间标签与所述目标数据点的目标时间标签的差值;
标签确定子单元,用于将所述差值作为所述当前数据点的压缩时间标签。
上述装置,优选的,所述第二压缩单元包括:
质量码对比子单元,用于将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,得到对比结果;
质量码确定子单元,用于判断所述对比结果是否表明所述当前质量码与所述目标质量码相同,如果是,设置所述当前数据点的压缩质量码为空,否则,将所述当前数据点的当前质量码作为所述当前数据点的质量压缩码。
上述装置,优选的,所述第三压缩单元包括:
差异位获取子单元,用于将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,得到所述当前浮点值与所述目标浮点值的首个差异位;
位数计算子单元,用于依据所述首个差异位,计算所述当前浮点值的待存储位数;
浮点值确定子单元,用于判断所述待存储位数是否为0,如果是,设置所述当前数据点的压缩浮点值为空,否则,依据所述待存储位数计算浮点标记码,所述浮点标记码包括5位存储位,将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值。
上述装置,优选的,所述压缩整合单元包括:
压缩标记码设置子单元,用于设置压缩标记码,所述压缩标记码包括1字节,所述压缩标记码中包括第一位组、第二位组和第三位组,所述第一位组包括3位存储位,所述第二位组包括1位存储位,所述第三位组包括1位存储位;
第一位组设置子单元,用于获取与所述压缩时间标签相对应的存储字节数,所述存储字节数小于或等于8,将所述存储字节数对应的二进制编码写入所述第一位组的存储位;
第二位组设置子单元,用于判断所述压缩质量码中是否包括有存储位,如果是,将所述第二位组中的存储位置1,否则,将所述第二位组中的存储位置0;
第三位组设置子单元,用于判断所述压缩浮点值是否包括存储位,如果是,将所述第三位组中的存储位置1,否则,将所述第三位组中的存储位置0;
连接组合子单元,用于将所述压缩标记码、所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次进行按位连接,将连接生成的数据作为所述当前数据点的压缩数据点。
上述装置,优选的,所述浮点值确定子单元包括逻辑判断模块、空设置模块、标记码计算模块和浮点值确定模块,其中:
所述逻辑判断模块,用于判断所述待存储位数是否为0,如果是,触发空设置模块,否则,触发所述标记码计算模块;
所述空设置模块,用于设置所述当前数据点的压缩浮点值为空;
所述标记码计算模块,用于设置浮点标记码,所述浮点标记码包括5位存储位,将所述待存储位数减去1得到中间变量,将所述中间变量的二进制编码按位写入所述浮点标记码中,触发所述浮点值确定模块;
所述浮点值确定模块,用于将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值。
由上述方案可知,本申请提供的一种工业实时数据压缩方法及装置,应用于工业控制***,通过对该工业工作***中待存储的当前数据点,将该工业控制***中最近存储的目标数据点中的各部分如时间标签、质量码和浮点值作为依据,分别确定所述当前数据点中的压缩时间标签、压缩质量码和压缩浮点值,再对所述压缩时间标签、所述压缩质量码和所述压缩浮点值进行整合,得到所述当前数据点的压缩数据点。本申请在实现数据点压缩时,不仅具有无损性,保证了工业控制***中的数据精度,同时,各个数据点之间的关联度较低,实施方便,提高了数据的压缩率及解压性能,可以保证每秒钟至少25万点的数据吞吐量,大很大程度上提升了工业控制***的数据处理性能。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
工业控制***中的历史数据存储***对工业控制***中的实时数据进行存储,以备后续的工艺分析、故障追溯以及控制方案改进等用途。随着工业控制***的大型化,***内的信号数量成倍增加,导致历史数量急剧增加。为了保证工业控制***的数据容量及运行效率,需要对这些历史实时数据进行压缩存储。
而上述实时数据在历史数据存储***中的存储形式为数据点,每个数据点由时间标签、质量码和数值组成。
其中,所述时间标签为该数据点的被采集时间值,以毫秒为单元,采用8字节存储;
质量码描述该数据点对应的实际信号的质量状态,采用4字节整形数据存储,一般0表示工作状态正常,非零则表示信号数据可疑或已出现异常;
数值为其所属数据点的值,其采用4字节的低精度浮点表示,也称为浮点值,其在计算机中的编码规则较为特殊,其二进制编码以字节为单位是无规律可循的,这也导致了对它的无损压缩较为困难。以下为浮点值的编码规则,如图1所示,浮点值在计算机中存储时,均是换算为符号位+阶码(exponent)+尾码(mantissa)来存储,浮点值=(1+mantissa)×2exponent。其中,从高到低的第1位是符号位,该位为0表示浮点值为正数,1表示该浮点值为负数;第2~9位为阶码,计算机存储的阶码中的0~255对应着真实阶码的-127~128,阶码的这种编码规则使得浮点值能够表征的数据范围非常大,同时它也可以精确表示很小的小数;第10~32位为尾码,尾码的第一位表示2-1、第二位表示2-2,以此类推,共计23位的尾码使浮点值能够精确到2-23的精度,即6~7位有效数字。
举例说明,假设浮点值为2.5,在计算机中存储时,将首先被换算为如下的类似科学计数法方式表示:1.25×21,换算时需遵循如下规则:
前面的小数表示的部分,必须是在区间[1,2)之间的小数,如例子中的1.25。计算机在存储时,将小数部分减1,作为尾码的数值(0.25),再将此数值采用二进制来表示(01000000000000000000000);
后面的幂表示的部分必须换算成2的幂,其中幂的值即是阶码(1),转换为计算机存储的阶码为128(二进制码10000000);
根据数据的正负可以知道符号位的值,例子中为正数,因此符号位为0。
综上,浮点值2.5采用16进制表示为0x40200000。
目前,在工业控制***中应用较多的压缩算法包括以下两种:
第一种为基于变化率的矢量压缩算法,该算法的原理是通过查看当前数据点与前一个被保留的数据点所构成的压缩偏移覆盖区来决定数据的取舍:若压缩偏移覆盖区可以覆盖两者之间的所有数据点,则不保留该当前数据点,若有数据点落在压缩偏移覆盖区之外,则保留当前数据点的前一个数据点,并以最新保留的数据点作为新的起点。该方案的本职是在相连的时间区域内过滤重复的数据点,这个区域越大,数据的压缩率越高,但随之而来的是压缩损伤严重,将导致数据的认为不连续性,而且该算法是通过减少保留的数据点的个数来实现压缩的,针对工业实时数据的压缩的比例有限,如果遇到抖动比较频繁的数据,将无法压缩。因此这类压缩算法将导致数据严重失真,不适合用于精度要求较高的工业控制***中。
第二种为基于字典模型的无损压缩算法,该算法是一种无损的数据压缩算法,可以满足工业控制***中对于数据精度的要求,但由于该算法是基于字典模型的压缩,若要取得较好的压缩率,必须针对每一段数据进行压缩,由此增加了历史数据文件的复杂性,且由于字典模型的压缩算法会设计较多的字典索引建立及查询匹配操作,使得压缩和解压的效率存在瓶颈。
而通过上述数据点的各部分编码存储规则可以看出,数据点中的浮点值具有较好的连续性,且会存在微幅抖动现象,即相邻两点之间的小幅度波动比较普遍,大幅度波动或突变不常见,这类数据的整体相关性不强,波动没有显著特性,具有较大的随机性。
因此,本申请提供了一种新型的工业实时数据压缩方法及装置,涉及工业实时数据压缩算法,该算法是根据最近存储的一个数据点为依据基础,即可实现对当前待存储的数据点的压缩,不仅具有无损性,保证了工业控制***中的数据精度,同时该算法原理简单,数据关联度较低,实施方便,提供了非常高的压缩和解压性能,可以保证每秒钟至少25万点的数据吞吐量,大很大程度上提升了工业控制***的数据处理性能。
以下对本申请进行说明:
参考图2,其示出了本申请提供的一种工业实时数据压缩方法实施例一的流程图,所述方法应用于工业控制***,所述方法可以包括以下步骤:
步骤201:确定所述工业控制***中待存储的当前数据点,并获取所述工业控制***中已经存储的数据点中最近存储的数据点作为目标数据点。
需要说明的是,所述工业控制***中已经存储的数据点为所述工业控制***的历史数据存储***中存储的数据点。在所述历史数据存储***中的数据点是以先后顺序进行存储的,在本申请中,所述历史数据存储***中存储的每个数据点可以是以本申请提供的工业实时数据压缩算法进行压缩之后的形式进行存储,还可以是以未被压缩的形式或其他压缩算法压缩之后的形式进行存储。
而所述当前数据点即为即将存储入所述历史数据存储***的数据点,所述目标数据点为所述历史数据存储***中最近存储的数据点,在本申请中提及的目标数据点为所述历史数据存储***中最近存储的数据点解压之后的数据点,即为原始目标数据点。
步骤202:依据所述目标数据点中的目标时间标签及所述当前数据点中的当前时间标签,确定所述当前数据点的压缩时间标签。
其中,所述目标时间标签及所述当前时间标签的值均为时间值,表示其各自对应的数据点在所述工业控制***中被采集的时间点值,该时间点值可以进行对应的计算,如减法计算等。而所述当前时间标签所占用的存储位包括8字节,以毫秒为单位。所述当前数据点的压缩时间标签为所述目标时间标签与所述当前时间标签进行对比之后得到,该压缩时间标签所占存储位小于或等于8字节。
步骤203:依据所述目标数据点中的目标质量码及所述当前数据点中的当前质量码,确定所述当前数据点的压缩质量码。
步骤204:依据所述目标数据点中的目标浮点值及所述当前数据点中的当前浮点值,确定所述当前数据点中的压缩浮点值。
由前文中可知,每个数据点中的浮点值中,若数据处于小幅波动的状态,则在很大的几率下,其符号位和阶码都是不变的,变化的仅仅是尾码,且根据数据波动的幅度不同,尾码变化的起始位置也不同,若数据变化幅度非常小,可能只有尾码的最后4~5位出现差异。因此,所述步骤204可以通过以下方式实现:
以所述目标数据点的目标浮点值为基础,获取所述当前浮点值中不同于所述目标浮点值的差异位,依据该差异位确定所述当前数据点的压缩浮点值。
需要说明的是,所述步骤202至所述步骤204的执行顺序可以调换,还可以同时执行,调换后得到的方案与本申请是同一发明思想,属于本申请的保护范围。
步骤205:整合所述压缩时间标签、所述压缩质量码和所述压缩浮点值,得到所述当前数据点的压缩数据点。
其中,所述步骤205可以通过以下方式实现:
将所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次按位进行连接,将连接后生成的数据作为所述当前数据点的压缩数据点。
由上述方案可知,本申请提供的一种工业实时数据压缩方法实施例一,应用于工业控制***,通过对该工业工作***中待存储的当前数据点,将该工业控制***中最近存储的目标数据点中的各部分如时间标签、质量码和浮点值作为依据,分别确定所述当前数据点中的压缩时间标签、压缩质量码和压缩浮点值,再对所述压缩时间标签、所述压缩质量码和所述压缩浮点值进行整合,得到所述当前数据点的压缩数据点。通过本申请实施例实现数据点的压缩时,不仅具有无损性,保证了工业控制***中的数据精度,同时,各个数据点之间的关联度较低,实施方便,提高了数据的压缩率及解压性能,可以保证每秒钟至少25万点的数据吞吐量,大很大程度上提升了工业控制***的数据处理性能。
参考图3,其示出了本申请提供的一种工业实时数据压缩方法实施例二的部分流程图,其中,所述步骤202可以通过以下步骤实现:
步骤301:计算所述当前数据点的当前时间标签与所述目标数据点的目标时间标签的差值。
其中,所述差值的存储字节小于或等于8字节。
在实际应用中,所述差值的存储位数可以采用下述方式得到:
判断所述差值的数值大小,依据所述差值的数值大小确定所述差值的存储位数;
若所述差值在0x00~0xFF之间,所述差值的存储位数为1字节;
若所述差值在0x100~0xFFFF之间,所述差值的存储位数为2字节;
若所述差值在0x10000~0xFFFFFF之间,所述差值的存储位数为3字节;
若所述差值在0x1000000~0xFFFFFFFF之间,所述差值的存储位数为4字节;
若所述差值在0x100000000~0xFFFFFFFFFF之间,所述差值的存储位数为5字节;
若所述差值在0x10000000000~0xFFFFFFFFFFFF之间,所述差值的存储位数为6字节;
若所述差值大于0xFFFFFFFFFFFF,所述差值的存储位数为8字节。
步骤302:将所述差值作为所述当前数据点的压缩时间标签。
其中,所述压缩时间标签的存储位数与所述差值的存储位数相同。
参考图4,其示出了本申请提供的一种工业实时数据压缩方法实施例三的部分流程图,其中,所述步骤203可以包括以下步骤:
步骤401:将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,得到对比结果。
需要说明的是,所述质量码的数据特点为定值分段连续,因此,所述当前质量码与所述目标质量码的对比结果包括两种情况:第一种为所述当前质量码与所述目标质量码相同,均为0或均为非0;第二种为所述当前质量码与所述目标质量码不同,一个为0另一个非0。
步骤402:判断所述对比结果是否表明所述当前质量码与所述目标质量码相同,如果是,执行步骤403,否则,执行步骤404。
步骤403:设置所述当前数据点的压缩质量码为空。
其中,在所述当前质量码与所述目标质量码相同时,所述当前数据点的压缩质量码为空,在解压时,可以直接采用其所在数据点的前一个数据点的质量码作为其自身的质量码,由此在进行压缩存储时,减少质量码的存储位数,提高压缩率的同时保证无损性。
步骤404:将所述当前数据点的当前质量码作为所述当前数据点的压缩质量码。
参考图5,其示出了本申请提供的一种工业实时数据压缩方法实施例四的部分流程图,其中,所述步骤204可以通过以下各个步骤具体实现:
步骤501:将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,得到所述当前浮点值与所述目标浮点值的首个差异位。
在前文中的描述可知,若数据点的浮点值数据处于小幅波动的状态时,则在很大概率下,其符号位和阶码都是不变的,变化的仅为为嘛,且根据波动幅度不同,尾码变化的起始位置也不同,若数据变化幅度非常小,可能只有尾码的最后4~5位出现差异。
步骤502:依据所述首个差异位,计算所述当前浮点值的待存储位数。
在本申请中,由于每个数据点的浮点值数据的波动体现在阶码和尾码上,此时,只需存储所述当前浮点值中差异于所述目标浮点值的存储位中的数据即可,进一步的,存储有高位到低位中首个差异位及其后续存储位中的数据。因此,在本申请实施例的实际实现中,所述步骤502可以通过以下方式实现:
计算所述当前浮点值中最低位与所述首个差异位之间的位数作为所述待存储位数,所述待存储位数包括所述首个差异位。
由于所述当前数据点与所述目标数据点之间的波动幅值较小,极有可能不发生变化,因此,所述待存储位数可能为0,还可能非0。
步骤503:判断所述待存储位数是否为0,如果是,执行步骤504,否则,执行步骤505;
步骤504:设置所述当前数据点的压缩浮点值为空。
其中,若所述待存储位数为0,则说明所述当前浮点值与所述目标浮点值相同,此时,无需重新存储所述当前数据点的当前浮点值,而在解压时,只需直接获取该数据点的前一个数据点的浮点值即可作为自身的浮点值,节省存储位。
步骤505:依据所述待存储位数计算浮点标记码,所述浮点标记码包括5为存储位,执行步骤506。
其中,所述浮点标记码中存储的数据表示所述待存储位数的值,为所述当前浮点值中需存储的总位数,该总位数从所述当前浮点值的最低位算起,而所述待存储位数的范围值为1~32,为节省存储位,设置所述浮点标记码的存储位为5位,其能够标识的范围值为0~31,由此,所述浮点标记码的值为所述待存储位数减去1,因此,所述步骤505可以通过以下方式实现:
设置浮点标记码,所述浮点标记码包括5位存储位,将所述待存储位数减去1得到中间变量,将所述中间变量的二进制编码按位写入所述浮点标记码中。
步骤506:将所述浮点标记码及与所述待存储位数相对应的数据依次按位相连,将连接生成的数据作为所述当前数据点的压缩浮点值。
其中,由所述步骤506得到的所述压缩浮点值中,由所述浮点标记码及所述待存储位数对应的数据组成,由于所述当前浮点值的波动幅度较小的特性,所述压缩浮点值的存储位数明显少于所述当前浮点值的存储位数,保证无损压缩的同时,提高数据的压缩率。
为保证工业实时数据在实现压缩后能够正确解压,需要在每个数据点中设置包头数据,在本申请中,可以通过在每个数据点的高位设置压缩标记码,所述压缩标记码记录有所述压缩时间标签、所述压缩质量码及所述压缩浮点值的关键信息,如是否存储、存储位数或其他基础关键信息。参考图6,其示出了本申请通过的一种工业实时数据压缩方法实施例五的部分流程图,其中,所述步骤205可以包括以下步骤:
步骤601:设置压缩标记码,所述压缩标记码包括1字节,所述压缩标记码中包括第一位组、第二位组和第三位组,所述第一位组包括3位存储位,所述第二位组包括1位存储位,所述第三位组包括1位存储位。
如图7所示,所述压缩标记码中包括8位存储位,所述第一位组、所述第二位组和所述第三位组的存储位可以自定义设置,例如:所述第一位组包括3位存储位,且为连续的存储位,如第3、第4和第5存储位,所述第二位组包括1位存储位,如第7存储位,第三位组包括1位存储位,如第8存储位。
步骤602:获取与所述压缩时间标签相对应的存储字节数,所述存储字节数小于或等于8,将所述存储字节数对应的二进制编码写入所述第一位组的存储位。
由本文前文中可知,所述压缩时间标签的长度不定,其长度最大值为8字节,为保证在解压或读取该数据点时的正确性,采用所述第一位组标识出所述压缩时间标签的长度,由于所述压缩时间标签的长度最大值为8字节,由此所述第一位组中只需设置3位存储位即可。
步骤603:判断所述压缩质量码中是否包括有存储位,如果是,将所述第二位组的存储位置1,否则,将所述第二位组中的存储位置0。
其中,所述第二位组中的值标识出所述压缩质量码是否存在或是否非空,在所述压缩质量码非空时,所述第二位组的存储位为1,所述压缩质量码为空时,所述第二位组的存储位为0。
步骤604:判断所述压缩浮点值是否包括有存储位,如果是,将所述第三位组的存储位置1,否则,将所述第三位组的存储位置0。
其中,所述第三位组中的值标识出所述压缩浮点值是否存在或是否非空,在所述压缩浮点值非空时,所述第三位组的存储位为1,所述压缩浮点值为空时,所述第三位组的存储位为0。
需要说明的是,所述步骤602至所述步骤604的执行顺序可以调换,还可以同时执行,调换后得到的方案与本申请属于同一发明思想,在本申请的保护范围内。
步骤605:将所述压缩标记码、所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次进行按位连接,将连接生成的数据作为所述当前数据点的压缩数据点。
需要说明的是,所述压缩标记码中的第1和第二存储位中在实际实现时均置1,表明该压缩标记码后续中存在合法的压缩数据点。例如,所述压缩标记码的每一位的含义如表1所示:
表1压缩标记码的每一位含义
含义 |
二进制 |
备注 |
时间用8个字节存储 |
11111000 |
|
时间用6个字节存储 |
11110000 |
|
时间用5个字节存储 |
11101000 |
|
时间用4个字节存储 |
11100000 |
|
时间用3个字节存储 |
11011000 |
|
时间用2个字节存储 |
11010000 |
|
时间用1个字节存储 |
11001000 |
|
存储质量码 |
11000010 |
11000000表示不存储质量码 |
存储浮点值 |
11000001 |
11000000表示不存储浮点值 |
在本申请中最终获得的压缩数据点的结构为:压缩标记码(1字节)+压缩时间标签(1~8字节)+压缩质量码(0或4字节)+压缩浮点值(0或1~32位存储位)。
由上述方案中可知,本申请提供的一种工业实时数据压缩方法实施例五中,压缩得到的数据点的压缩标记码中标记有其所属数据点是否合法、时间标签的存储字节数、质量码是否存储、浮点值是否存储的信息,在进行数据点读取,用于数据点解压或后续数据点压缩时,能够准确的读取出数据点的压缩时间标签、压缩质量码和压缩浮点值,再依据该数据点之前的目标数据点实现该数据点的原始数据点的准确获取。
参考图8,其示出了本申请提供的一种工业实时数据压缩方法实施例六的流程图,所述方法可以包括以下步骤:
步骤801:确定所述工业控制***中待存储的当前数据点,及所述工业控制***中已经存储的数据点中最近存储的数据点作为目标数据点,并设置压缩标记码。
其中,所述压缩标记码包括1字节,所述压缩标记码中包括第一位组、第二位组和第三位组,所述第一位组包括3位存储位,所述第二位组包括1位存储位,所述第三位组包括1位存储位。
步骤802:计算所述当前数据点的当前时间标签与所述目标数据点的目标时间标签的差值,将所述差值作为所述当前数据点的压缩时间标签,将所述压缩时间标签对应的存储字节数的二进制编码写入所述第一位组的存储位。
步骤803:将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,依据对比结果设置所述当前数据点的压缩质量码,依据所述压缩质量码设置所述第二位组的存储位。
其中,所述步骤803具体可以通过以下方式实现:
将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,判断对比结果是否表明所述当前质量码与所述目标质量码相同,如果是,设置所述当前数据点的压缩质量码为空,将所述第二位组的存储位置0,否则,将所述当前数据点的当前质量码作为所述当前数据点的压缩质量码,将所述第二位组的存储位置1。
步骤804:将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,依据比较结果设置所述当前数据点的压缩浮点值,依据所述压缩浮点值设置所述第三位组的存储位。
其中,所述步骤804可以通过以下各个步骤具体实现:
将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,得到所述当前浮点值与所述目标浮点值的首个差异位;
依据所述首个差异位,计算所述当前浮点值的待存储位数;
判断所述待存储位数是否为0,如果是,设置所述当前数据点的压缩浮点值为空,将所述第三位组的存储位置0,否则,依据所述待存储位数计算浮点标记码,所述浮点标记码包括5位存储位,将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值,将所述第三位组的存储位置1。
步骤805:将所述压缩标记码、所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次进行按位连接,将连接生成的数据作为所述当前数据点的压缩数据点。
在本申请中最终获得的压缩数据点的结构为:压缩标记码(1字节)+压缩时间标签(1~8字节)+压缩质量码(0或4字节)+浮点值标记码(0或5位存储位)+浮点值(0或1~32位存储位)。
由上述可知,本申请提供的一种工业实时数据压缩方法实施例六,通过所述工业控制***中最近存储的一个数据点为基础,分别对待存储的数据点的各部分如时间标签、质量码和浮点值进行压缩,如记录所述目标时间标签与所述当前时间标签的差值作为所述压缩时间标签进行存储,其存储位小于或等于所述当前时间标签的存储位,再如判断所述当前质量码是否与所述目标质量码相同,相同时无需在所述当前数据点中对质量码进行存储,明显减少存储位,又如对所述当前浮点值中差异于所述目标浮点值的存储位进行存储,并记录存储位数,进一步明显节省存储位,同时对所述当前数据点具有无损性,既而实现进行数据点压缩时,保证无损压缩的前期下,提高压缩率。
参考图9,其示出了本申请提供的一种工业实时数据压缩装置实施例七的结构示意图,所述装置应用于工业控制***,所述装置包括:
数据点确定单元901,用于确定所述工业控制***中待存储的当前数据点,并获取所述工业控制***中已经存储的数据点中最近存储的数据点作为目标数据点。
需要说明的是,所述工业控制***中已经存储的数据点为所述工业控制***的历史数据存储***中存储的数据点。在所述历史数据存储***中的数据点是以先后顺序进行存储的,在本申请中,所述历史数据存储***中存储的每个数据点可以是以本申请提供的工业实时数据压缩算法进行压缩之后的形式进行存储,还可以是以未被压缩的形式或其他压缩算法压缩之后的形式进行存储。
而所述当前数据点即为即将存储入所述历史数据存储***的数据点,所述目标数据点为所述历史数据存储***中最近存储的数据点,在本申请中提及的目标数据点为所述历史数据存储***中最近存储的数据点解压之后的数据点,即为原始目标数据点。
第一压缩单元902,用于依据所述目标数据点中的目标时间标签及所述当前数据点中的当前时间标签,确定所述当前数据点的压缩时间标签。
需要说明的是,所述第一压缩单元902与所述数据点确定单元901相连接。
其中,所述目标时间标签及所述当前时间标签的值均为时间值,表示其各自对应的数据点在所述工业控制***中被采集的时间点值,该时间点值可以进行对应的计算,如减法计算等。而所述当前时间标签所占用的存储位包括8字节,以毫秒为单位。所述当前数据点的压缩时间标签为所述目标时间标签与所述当前时间标签进行对比之后得到,该压缩时间标签所占存储位小于或等于8字节。
第二压缩单元903,用于依据所述目标数据点中的目标质量码及所述当前数据点中的当前质量码,确定所述当前数据点的压缩质量码。
需要说明的是,所述第二压缩单元903与所述数据点确定单元901相连接。
第三压缩单元904,用于依据所述目标数据点中的目标浮点值及所述当前数据点中的当前浮点值,确定所述当前数据点的压缩浮点值。
需要说明的是,所述第三压缩单元904与所述数据点确定单元901相连接。
由前文中可知,每个数据点中的浮点值中,若数据处于小幅波动的状态,则在很大的几率下,其符号位和阶码都是不变的,变化的仅仅是尾码,且根据数据波动的幅度不同,尾码变化的起始位置也不同,若数据变化幅度非常小,可能只有尾码的最后4~5位出现差异。因此,所述第三压缩单元904可以通过以下方式实现:
以所述目标数据点的目标浮点值为基础,获取所述当前浮点值中不同于所述目标浮点值的差异位,依据该差异位确定所述当前数据点的压缩浮点值。
需要说明的是,所述第一压缩单元902、所述第二压缩单元903和所述第三压缩单元904的运行顺序可以调换,还可以同时运行,调换后得到的方案与本申请是同一发明思想,属于本申请的保护范围。
压缩整合单元905,用于整合所述压缩时间标签、所述压缩质量码和所述压缩浮点值,得到所述当前数据点的压缩数据点。
需要说明的是,所述压缩整合单元905分别与所述第一压缩单元902、所述第二压缩单元903和所述第三压缩单元904相连接。
其中,所述压缩整合单元905可以通过以下方式实现:
将所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次按位进行连接,将连接后生成的数据作为所述当前数据点的压缩数据点。
由上述方案可知,本申请提供的一种工业实时数据压缩装置实施例七,应用于工业控制***,通过对该工业工作***中待存储的当前数据点,将该工业控制***中最近存储的目标数据点中的各部分如时间标签、质量码和浮点值作为依据,分别确定所述当前数据点中的压缩时间标签、压缩质量码和压缩浮点值,再对所述压缩时间标签、所述压缩质量码和所述压缩浮点值进行整合,得到所述当前数据点的压缩数据点。通过本申请实施例实现数据点的压缩时,不仅具有无损性,保证了工业控制***中的数据精度,同时,各个数据点之间的关联度较低,实施方便,提高了数据的压缩率及解压性能,可以保证每秒钟至少25万点的数据吞吐量,大很大程度上提升了工业控制***的数据处理性能。
参考图10,其示出了本申请提供的一种工业实时数据压缩装置实施例八的部分结构示意图,其中,所述第一压缩单元902包括:
差值计算子单元921,用于计算所述当前数据点的当前时间标签与所述目标数据点的目标时间标签的差值。
其中,所述差值的存储字节小于或等于8字节。
在实际应用中,所述差值的存储位数可以采用下述方式得到:
判断所述差值的数值大小,依据所述差值的数值大小确定所述差值的存储位数;
若所述差值在0x00~0xFF之间,所述差值的存储位数为1字节;
若所述差值在0x100~0xFFFF之间,所述差值的存储位数为2字节;
若所述差值在0x10000~0xFFFFFF之间,所述差值的存储位数为3字节;
若所述差值在0x1000000~0xFFFFFFFF之间,所述差值的存储位数为4字节;
若所述差值在0x100000000~0xFFFFFFFFFF之间,所述差值的存储位数为5字节;
若所述差值在0x10000000000~0xFFFFFFFFFFFF之间,所述差值的存储位数为6字节;
若所述差值大于0xFFFFFFFFFFFF,所述差值的存储位数为8字节。
标签确定子单元922,用于将所述差值作为所述当前数据点的压缩时间标签。
需要说明的是,所述标签确定子单元922与所述差值计算子单元921相连接。
其中,所述压缩时间标签的存储位数与所述差值的存储位数相同。
参考图11,其示出了本申请提供的一种工业实时数据压缩装置实施例九的部分结构示意图,其中,所述第二压缩单元903包括:
质量码对比子单元931,用于将所述当前数据点的当前质量码与所述目标数据点的目标质量码进行对比,得到对比结果。
需要说明的是,所述质量码的数据特点为定值分段连续,因此,所述当前质量码与所述目标质量码的对比结果包括两种情况:第一种为所述当前质量码与所述目标质量码相同,均为0或均为非0;第二种为所述当前质量码与所述目标质量码不同,一个为0另一个非0。
质量码确定子单元932,用于判断所述对比结果是否表明所述当前质量码与所述目标质量码相同,如果是,设置所述当前数据点的压缩质量码为空,否则,将所述当前数据点的当前质量码作为所述当前数据点的质量压缩码。
需要说明的是,所述质量码确定子单元932与所述质量码对比子单元931相连接。
其中,在所述当前质量码与所述目标质量码相同时,所述当前数据点的压缩质量码为空,在解压时,可以直接采用其所在数据点的前一个数据点的质量码作为其自身的质量码,由此在进行压缩存储时,减少质量码的存储位数,提高压缩率的同时保证无损性。
参考图12,其示出了本申请提供的一种工业实时数据压缩装置实施例十的部分结构示意图,其中,所述第三压缩单元904包括:
差异位获取子单元941,用于将所述当前数据点的当前浮点值与所述目标数据点的目标浮点值按照由高位到低位的顺序进行按位比较,得到所述当前浮点值与所述目标浮点值的首个差异位。
在前文中的描述可知,若数据点的浮点值数据处于小幅波动的状态时,则在很大概率下,其符号位和阶码都是不变的,变化的仅为为嘛,且根据波动幅度不同,尾码变化的起始位置也不同,若数据变化幅度非常小,可能只有尾码的最后4~5位出现差异。
位数计算子单元942,用于依据所述首个差异位,计算所述当前浮点值的待存储位数。
需要说明的是,所述位数计算子单元942与所述差异位获取子单元941相连接。
在本申请中,由于每个数据点的浮点值数据的波动体现在阶码和尾码上,此时,只需存储所述当前浮点值中差异于所述目标浮点值的存储位中的数据即可,进一步的,存储有高位到低位中首个差异位及其后续存储位中的数据。因此,在本申请实施例的实际实现中,所述位数计算子单元942可以通过以下方式实现:
计算所述当前浮点值中最低位与所述首个差异位之间的位数作为所述待存储位数,所述待存储位数包括所述首个差异位。
由于所述当前数据点与所述目标数据点之间的波动幅值较小,极有可能不发生变化,因此,所述待存储位数可能为0,还可能非0。
浮点值确定子单元943,用于判断所述待存储位数是否为0,如果是,设置所述当前数据点的压缩浮点值为空,否则,依据所述待存储位数计算浮点标记码,所述浮点标记码包括5位存储位,将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值。
需要说明的是,所述浮点值确定子单元943与所述位数计算子单元942相连接。
其中,若所述待存储位数为0,则说明所述当前浮点值与所述目标浮点值相同,此时,无需重新存储所述当前数据点的当前浮点值,而在解压时,只需直接获取该数据点的前一个数据点的浮点值即可作为自身的浮点值,节省存储位。
其中,所述浮点标记码中存储的数据表示所述待存储位数的值,为所述当前浮点值中需存储的总位数,该总位数从所述当前浮点值的最低位算起,而所述待存储位数的范围值为1~32,为节省存储位,设置所述浮点标记码的存储位为5位,其能够标识的范围值为0~31,由此,所述浮点标记码的值为所述待存储位数减去1,因此,参考图13,为本申请实施例的另一部分结构示意图,其中,所述浮点值确定子单元943包括:逻辑判断模块9431、空设置模块9432、标记码计算模块9433和浮点值确定模块9434,其中:
所述逻辑判断模块9431,用于判断所述待存储位数是否为0,如果是,触发所述空设置模块9432,否则,触发所述标记码计算模块9433;
所述空设置模块9432,用于设置所述当前数据点的压缩浮点值为空;
所述标记码计算模块9433,用于设置浮点标记码,所述浮点标记码包括5位存储位,将所述待存储位数减去1得到中间变量,将所述中间变量的二进制编码按位写入所述浮点标记码中,触发所述浮点值确定模块9434;
所述浮点值确定模块9434,用于将所述浮点标记码及与所述待存储位数相对应的数据依次按位连接,将连接生成的数据作为所述当前数据点的压缩浮点值。
其中,由所述浮点值确定子单元943得到的所述压缩浮点值中,由所述浮点标记码及所述待存储位数对应的数据组成,由于所述当前浮点值的波动幅度较小的特性,所述压缩浮点值的存储位数明显少于所述当前浮点值的存储位数,保证无损压缩的同时,提高数据的压缩率。
为保证工业实时数据在实现压缩后能够正确解压,需要在每个数据点中设置包头数据,在本申请中,可以通过在每个数据点的高位设置压缩标记码,所述压缩标记码记录有所述压缩时间标签、所述压缩质量码及所述压缩浮点值的关键信息,如是否存储、存储位数或其他基础关键信息。参考图14,其示出了本申请提供的一种工业实时数据压缩装置实施例十一的部分结构示意图,其中,所述压缩整合单元905包括:
压缩标记码设置子单元951,用于设置压缩标记码,所述压缩标记码包括1字节,所述压缩标记码中包括第一位组、第二位组和第三位组,所述第一位组包括3位存储位,所述第二位组包括1位存储位,所述第三位组包括1位存储位。
如图7所示,所述压缩标记码中包括8位存储位,所述第一位组、所述第二位组和所述第三位组的存储位可以自定义设置,例如:所述第一位组包括3位存储位,且为连续的存储位,如第3、第4和第5存储位,所述第二位组包括1位存储位,如第7存储位,第三位组包括1位存储位,如第8存储位。
第一位组设置子单元952,用于获取与所述压缩时间标签相对应的存储字节数,所述存储字节数小于或等于8,将所述存储字节数对应的二进制编码写入所述第一位组的存储位。
需要说明的是,所述第一位组设置子单元952与所述压缩标记码设置子单元951相连接。
由本文前文中可知,所述压缩时间标签的长度不定,其长度最大值为8字节,为保证在解压或读取该数据点时的正确性,采用所述第一位组标识出所述压缩时间标签的长度,由于所述压缩时间标签的长度最大值为8字节,由此所述第一位组中只需设置3位存储位即可。
第二位组设置子单元953,用于判断所述压缩质量码中是否包括有存储位,如果是,将所述第二位组中的存储位置1,否则,将所述第二位组中的存储位置0;
需要说明的是,所述第二位组设置子单元953与所述压缩标记码设置子单元951相连接。
其中,所述第二位组中的值标识出所述压缩质量码是否存在或是否非空,在所述压缩质量码非空时,所述第二位组的存储位为1,所述压缩质量码为空时,所述第二位组的存储位为0。
第三位组设置子单元954,用于判断所述压缩浮点值是否包括存储位,如果是,将所述第三位组中的存储位置1,否则,将所述第三位组中的存储位置0;
需要说明的是,所述第三位组设置子单元954与所述压缩标记码设置子单元951相连接。
其中,所述第三位组中的值标识出所述压缩浮点值是否存在或是否非空,在所述压缩浮点值非空时,所述第三位组的存储位为1,所述压缩浮点值为空时,所述第三位组的存储位为0。
需要说明的是,所述第一位组设置子单元952、所述第二位组设置子单元953和所述第三位组设置子单元954的运行顺序可以调换,还可以同时运行,调换后得到的方案与本申请属于同一发明思想,在本申请的保护范围内。
连接组合子单元955,用于将所述压缩标记码、所述压缩时间标签、所述压缩质量码和所述压缩浮点值依次进行按位连接,将连接生成的数据作为所述当前数据点的压缩数据点。
需要说明的是,所述连接组合子单元955分别与所述第一位组设置子单元952、所述第二位组设置子单元953和所述第三位组设置子单元954相连接。
需要说明的是,所述压缩标记码中的第1和第二存储位中在实际实现时均置1,表明该压缩标记码后续中存在合法的压缩数据点。
由上述方案中可知,本申请提供的一种工业实时数据压缩方法实施例五中,压缩得到的数据点的压缩标记码中标记有其所属数据点是否合法、时间标签的存储字节数、质量码是否存储、浮点值是否存储的信息,在进行数据点读取,用于数据点解压或后续数据点压缩时,能够准确的读取出数据点的压缩时间标签、压缩质量码和压缩浮点值,再依据该数据点之前的目标数据点实现该数据点的原始数据点的准确获取。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种工业实时数据压缩方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。