一种数据文件修复的方法与流程

文档序号:16536359发布日期:2019-01-08 19:56阅读:258来源:国知局
一种数据文件修复的方法与流程

本发明属于工控系统领域,涉及一种数据存储技术,具体而言涉及一种数据文件的修复方法。



背景技术:

工控系统稳定性、可靠性及其重要,其运行依赖一系列数据文件,这些数据文件是一个连续存放的字节流,存放在存储器中。但由于种种原因,某些字节有可能发生变化,导致文件错乱、系统瘫痪,后果不堪设想。现有技术中,解决此问题的通常方法是整个文件备份,但是此方法增大了1倍的存储开销,成本偏高。



技术实现要素:

为了解决现有技术存在的问题,本发明旨在提供一种数据文件修复的方法,该方法以很小的存储开销弥补某些数据错乱带来的危害。

为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:

一种数据文件修复的方法,其包括以下步骤:

步骤1)将数据元素排成m行*n列的矩阵,要求m与n大体相等,若原始数据长度不足,可适当补齐,所述数据元素包括字节、字和双字等;

步骤2)选择一种可逆运算f,其逆运算f,满足:

z=f(x,y)……………………………………(1)

x=f(z,y),y=f(z,x)………………………………(2)

上式(1)、(2)中,x,y,z都属于所述数据元素的数据类型,

举例:如果数据元素为8位字节,则可选择无进位字节加法作为运算f,其逆运算f就是无进位字节减法;

步骤3)初始化

对1~m行逐行进行连续f运算,保存到1~m数组,对1~n列进行连续f运算,保存到1~n数组,若数据元素为字节,f运算为无进位字节加法,则连续f运算称之为累加和;

步骤4)检查

在系统运行过程中,上述m行n列矩阵数据、行累加和数组以及列累加和数组都有可能发生错误,需要进行巡回检查;

对每行巡回进行累加和,是否等于初始化时的行累加和,得出错误的行数a,以及错误行号集合x,如果为0,说明矩阵数据与行累加和数组能相互验证,没有错误;

对每列巡回进行累加和,是否等于初始化时的列累加和,得出错误的列数b,以及错误行号集合y,如果为0,说明矩阵数据与列累加和数组能相互验证,没有错误;

步骤5)判断并修复

①如果a=0,b>0,说明初始化的列累加和数组出现错误,重新计算错误的列累加和,并保存;

②如果a>0,b=0,说明初始化的行累加和数组出现错误,重新计算错误的行累加和,并保存;

③如果a=1,b=1,说明只有一个字节出现错误,根据集合x,y可直接得出错误元素所在的位置坐标,利用列或行累加和进行逆运算,可以算出正确的数据;

④如果a=1,b>1,则错误字节出现在一行多列,根据集合x,y可得出错误元素所在的位置坐标,利用列累加和进行逆运算,可以逐一算出正确的数据;

⑤如果a>1,b=1,则错误字节出现在一列多行,根据集合x,y可得出错误元素所在的位置坐标,利用行累加和进行逆运算,可以逐一算出正确的数据;

⑥如果a=2,且b>=2,且y集合的列号连续(从n与1之间也属于连续,n在前,1在后),可假定每列只有一个错误元素,可以利用列累加和数组逐一还原数据,最后重新校验行累加和,如果符合,还原成功,否则还原失败;

⑦如果a>=2,且b=2,且x集合中的行号连续(从m与1之间也属于连续,m在前,1在后),可假定每行只有一个错误元素,可以利用行累加和数组逐一还原数据,最后重新校验列累加和,如果符合,还原成功,否则还原失败;

⑧如果a>2且b>2无法还原。

本发明的有益效果如下:

与现有技术相比,本发明的方法的价值在不增加存储器开销的前提下,极大提升了数据的安全性,在工控领域极大提高控制器、网关等关键设备的可靠性。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中;

图1表示本发明的方法将数据元素排成m行*n列的初始化矩阵示意图。

图2表示本发明的方法当a=0,b>0时的矩阵示意图。

图3表示本发明的方法a=1,b=1时的矩阵示意图。

图4表示本发明的方法a=1,b>1时的矩阵示意图。

图5表示本发明的方法a>2且b>2时的矩阵示意图。

具体实施方式

下面将参考附图并结合实施例,来详细说明本发明。

一种数据文件修复的方法,其包括以下步骤:

步骤1)将数据元素排成m行*n列的矩阵,要求m与n大体相等,若原始数据长度不足,可适当补齐,所述数据元素包括字节、字和双字等;

步骤2)选择一种可逆运算f,其逆运算f,满足:

z=f(x,y)……………………………………(1)

x=f(z,y),y=f(z,x)………………………………(2)

上式(1)、(2)中,x,y,z都属于所述数据元素的数据类型,

举例:如果数据元素为8位字节,则可选择无进位字节加法作为运算f,其逆运算f就是无进位字节减法;

步骤3)初始化

如图1所示,对1~m行逐行进行连续f运算,保存到1~m数组,对1~n列进行连续f运算,保存到1~n数组,若数据元素为字节,f运算为无进位字节加法,则连续f运算称之为累加和;

步骤4)检查

在系统运行过程中,上述m行n列矩阵数据、行累加和数组以及列累加和数组都有可能发生错误,需要进行巡回检查;

对每行巡回进行累加和,是否等于初始化时的行累加和,得出错误的行数a,以及错误行号集合x,如果为0,说明矩阵数据与行累加和数组能相互验证,没有错误;

对每列巡回进行累加和,是否等于初始化时的列累加和,得出错误的列数b,以及错误行号集合y,如果为0,说明矩阵数据与列累加和数组能相互验证,没有错误;

步骤5)判断并修复

①如果a=0,b>0,说明初始化的列累加和数组出现错误,重新计算错误的列累加和,并保存,如图2所示;

②如果a>0,b=0,说明初始化的行累加和数组出现错误,重新计算错误的行累加和,并保存;

③如果a=1,b=1,说明只有一个字节出现错误,根据集合x,y可直接得出错误元素所在的位置坐标,利用列或行累加和进行逆运算,可以算出正确的数据,如图3所示;

④如果a=1,b>1,则错误字节出现在一行多列,根据集合x,y可得出错误元素所在的位置坐标,利用列累加和进行逆运算,可以逐一算出正确的数据,如图4所示;

⑤如果a>1,b=1,则错误字节出现在一列多行,根据集合x,y可得出错误元素所在的位置坐标,利用行累加和进行逆运算,可以逐一算出正确的数据;

⑥如果a=2,且b>=2,且y集合的列号连续(从n与1之间也属于连续,n在前,1在后),可假定每列只有一个错误元素,可以利用列累加和数组逐一还原数据,最后重新校验行累加和,如果符合,还原成功,否则还原失败;

⑦如果a>=2,且b=2,且x集合中的行号连续(从m与1之间也属于连续,m在前,1在后),可假定每行只有一个错误元素,可以利用行累加和数组逐一还原数据,最后重新校验列累加和,如果符合,还原成功,否则还原失败;

⑧如果a>2且b>2无法还原,如图5所示。

例如:

现有16进制数据文件{0x35,0x79,0x9d,0x48,0x15,0xf3,0x4d,0x30,0x81},f运算采用无进位16进制加法。

首先,排列成3*3的阵列,并计算出行累加和数组{4b,50,fe}和列累加和数组{ca,be,11};

然后,检查过程:巡回检查上述阵列数据的行累加和与列累加和,与前面保存的数组相比较,可能有如下各种情况:

a:完全符合,说明原始数据阵列,行累加和数组,列累加和数组都没有错误。

b:行累加和数组符合,列累加和数组存在不符合,说明列累加和数组出现错误,需要重新计算并保存。依次类推,列累加和数组符合,行累加和数组存在不符合,说明行累加和数组出现错误,需要重新计算并保存。

c:如果出现有1行1列不符合,比如,2行2列为0x33时,必然导致行数组和列数组各有一个不符合,由此得出错误数据的坐标(2,2),并且其数值=0x50-0x48-0xf3=0x15。

d:如果出现有1行多列不符合,比如下表。可以推断坐标为(1,2)和(3,2)数据错误,因为1列与3列只是各有1个错误,因此用列累加和还原

(1,2)=0xca-0x35-0x4d=0x48

(3,2)=0x11-0x9d-0xfe=0xf3

依次类推,1列多行不符合的情况,可用行累加和进行还原。

e:如果出现2行多列不符合,比如下表有2行2列不符合,可以先假定:1)错误的数据是连续存放的相关的,2)每列只错了1行,因此用列累加和还原

(2,3)=0x11-0x9d-0x81=0xf3

(3,1)=0xca-0x35-0x48=0x4d

再用行累加和进行校验,如果正确则说明还原成功。

依次类推,2列多行不符合的情况,也可以用类似的原则假定,还原之后用列累加和作最后的校验。

f:如果出现多于2行多于2列的不符合,无法还原。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1