CN104637181B - 基于数据纵横存储及校验处理方法的三相费控智能电能表 - Google Patents
基于数据纵横存储及校验处理方法的三相费控智能电能表 Download PDFInfo
- Publication number
- CN104637181B CN104637181B CN201510069834.2A CN201510069834A CN104637181B CN 104637181 B CN104637181 B CN 104637181B CN 201510069834 A CN201510069834 A CN 201510069834A CN 104637181 B CN104637181 B CN 104637181B
- Authority
- CN
- China
- Prior art keywords
- data
- array
- check
- travsverse
- check array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)
Abstract
一种基于数据纵横存储及校验处理方法的三相费控智能电能表,涉及电器仪表技术领域,其包括将待存储的数据划分为至少一块数据块;将各数据块按字节分成m行横行及n列纵列;为各数据块分别建立一个用于存放横向校验数据的横向校验数组;为各数据块分别建立一个用于存放纵向校验数据的纵向校验数组;对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组;将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组;将各数据块、横向校验数组、纵向校验数组写入到存储器中。
Description
技术领域
本发明涉及电器仪表技术领域,具体来讲是一种基于数据纵横存储及校验处理方法的三相费控智能电能表。
背景技术
三相费控智能电能表运行过程中,由于要实时的从存储器中读取或写入电量等数据。这些数据对于三相费控智能电能表能够正常计量起着至关重要的作用,一定要保证这些数据存储过程中和读写过程中可靠。在存储的过程中存储器本身受到外界的干扰或本身的性能出现问题导致部分存储区域失效,这时存储的数据可靠性就不能得到保证。在读写数据的信号在物理信道中传输时,线路本身电器特性造成的随机噪声、信号幅度的衰减、频率和相位的畸变、电器信号在线路上产生反射造成的回音效应、相邻线路间的串扰以及各种外界因素(如大气中的闪电、开关的跳火、外界强电流磁场的变化、电源的波动等)都会造成信号的失真。将会使单片机收到的二进制数位和存储器实际发送的二进制数位不一致,从而造成由“0”变成“1”或由“1”变成“0”的差错。解决这两个问题目前最常用的方法是在数据存储的时,按照某种关系附加上一定的冗余码,把数据和冗余码一起存储到存储器中。目前常用冗余码计算方法是进行累加和校验和循环冗余码校验。
累加和校验是通过把要校验的数据进行简单的相加,取累加和的低字节(1个或2个)高位舍弃。这种方法计算简单但是漏检率比较高,例如其中如有两个字节对掉就无法检出。
循环冗余码校验,目前常采用的是循环冗余校验(CRC-16或CRC-32),这种方法可以有效的降低漏检率,但存在一个问题计算量比较大,特别是到要校验的数据比较长时或数据比较短但是要频繁的读写时,处理速度明显减慢。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于数据纵横存储及校验处理方法的三相费控智能电能表,本发明降低了漏检率,提高了三相费控智能电能表中电量数据在存储过程中可靠性;降低了单片机的运算和存储负担,提高了处理速度。
为达到以上目的,本发明采取的技术方案是:一种基于数据纵横存储方法的三相费控智能电能表,包括以下步骤:步骤S11.根据存储器的缓冲区长度,将待存储的数据划分为至少一块数据块;步骤S12.根据数据类型,将各数据块按字节分成m行横行及n列纵列,其中m≥1,n≥1;步骤S13.为各数据块分别建立一个用于存放横向校验数据的横向校验数组,其长度为m个字节;为各数据块分别建立一个用于存放纵向校验数据的纵向校验数组,其长度为n+1个字节;步骤S14.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果作为校验数据存入横向校验数组;步骤S15.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组;步骤S16.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组;步骤S17.将各数据块、横向校验数组、纵向校验数组写入到存储器中。
在上述技术方案的基础上,步骤S11中,所述存储器包括随机存取存储器和带电可擦写可编程只读存储器。
在上述技术方案的基础上,步骤S11中,每一块数据块不大于存储器的缓冲区长度。
在上述技术方案的基础上,步骤S12中,若最后一行横行数据不足,则补零。
在上述技术方案的基础上,步骤S14中,所述取模运算具体是把累加运算后的结果对256取模。
在上述技术方案的基础上,步骤S16中,将结果作为校验数据存入纵向校验数组中第n+1个字节对应的位置。
本发明还提供一种基于上述数据纵横存储方法的基于数据校验处理方法的三相费控智能电能表,包括以下步骤:步骤S21.校验处理前,先判断数据更新类型,若是对其中某一行数据进行更新,则进入步骤S22;若是对全部数据进行更新,则进入步骤S23;步骤S22.在存储器中更新对应数据块中的一行数据及其在横向校验数组、纵向校验数组中对应的校验数据,进入步骤S24;步骤S23.计算更新后的各数据块的横向校验数组、纵向校验数组,然后将各数据块、横向校验数组、纵向校验数组写入到存储器中,进入步骤S24;步骤S24.读取各数据块、横向校验数组、纵向校验数组,计算读取的各数据块的横向校验数组、纵向校验数组,并将其分别与读取的横向校验数组、纵向校验数组进行比较,校验成功后取读出的各数据块,否则再次读出并校验。
在上述技术方案的基础上,步骤S22中,对其中某一行数据进行更新时,所述更新具体包括:步骤S221.对更新后的目标行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;步骤S221.对纵向校验数组进行求反运算,将求反后的结果与更新前的目标行数据进行异或运算;步骤S223.对步骤S222中异或后的结果与更新后的目标行数据进行异或运算,将再次异或后的结果进行求反运算,存入纵向校验数组中。
在上述技术方案的基础上,步骤S23中,全部数据进行更新时,所述计算具体包括:步骤S231.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;步骤S232.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组;步骤S233.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组。
在上述技术方案的基础上,步骤S24中,将计算后的横向校验数组、纵向校验数组分别与读取的横向校验数组、纵向校验数组进行比较,若两者比较均成功,则校验成功;若任意一组比较失败,则校验失败。
本发明的有益效果在于:
1.本发明通过纵横存储方法将数据及其校验码一同存储到存储器中,在进行横向校验的同时也进行纵向校验,从而降低了漏检率,提高了三相费控智能电能表中电量数据在存储过程中可靠性。
2.本发明能够对数据块中的其中某一行数据单独进行校验,降低了单片机的运算和存储负担,提高了处理速度。
3.本发明将待存储的数据按照其类别划分为各数据块,并将各数据块按字节类别分成m行横行及n列纵列进行存储,因此较传统的存储方法更加方便,提高了处理速度。
附图说明
图1为本发明中基于数据纵横存储方法的三相费控智能电能表的流程图;
图2为本发明中基于数据校验处理方法的三相费控智能电能表的流程图;
图3为图2中步骤S22的具体步骤流程图;
图4为图2中步骤S23的具体步骤流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
表1:数据块的纵横存储方法示意表
参见表1及图1所示,一种基于数据纵横存储方法的三相费控智能电能表,包括以下步骤:
步骤S11.根据存储器的缓冲区长度,将待存储的数据划分为至少一块数据块;所述存储器包括随机存取存储器(RAM)和带电可擦写可编程只读存储器(E2PROM)。RAM主要存放变量和经常使用的参数等数据,这些数据掉电时会丢失,上电时从E2PROM读出。RAM存储器可以被反复檫写,无檫写次数限制。E2PROM主要存放电量、参数等数据,这些数据掉电时不丢失。E2PROM存储器也可以被反复檫写,但有檫写次数限制。针对纵横校存储校验法,主要是用在RAM、E2PROM的数据存储中。RAM中的数据在采用纵横校存储校验法时,由于读取RAM中的数据比较方便可以只更新一行数据,也可以更新全部数据。E2PROM中的数据在采用纵横校存储校验法时只使用更新全部数据方式。其中,每一块数据块不大于存储器的缓冲区长度。
步骤S12.根据数据类型,将各数据块按字节分成m行横行及n列纵列,其中m≥1,n≥1;若最后一行横行数据不足,则补零。
步骤S13.为各数据块分别建立一个用于存放横向校验数据的横向校验数组,设为checkH[m],其长度为m个字节;为各数据块分别建立一个用于存放纵向校验数据的纵向校验数组,设为checkZ[n+1],其长度为n+1个字节;
步骤S14.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果作为校验数据存入横向校验数组;其中,所述取模运算具体是把累加运算后的结果对256取模。
步骤S15.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组;
步骤S16.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组,具体的,将结果作为校验数据存入纵向校验数组中第n+1个字节对应的位置。
步骤S17.将各数据块、横向校验数组、纵向校验数组写入到存储器中。
参见图2所示,基于上述数据纵横存储方法的基于数据校验处理方法的三相费控智能电能表,包括以下步骤:
步骤S21.校验处理前,先判断数据更新类型,若是对其中某一行数据进行更新,则进入步骤S22;若是对全部数据进行更新,则进入步骤S23;
步骤S22.在存储器中更新对应数据块中的一行数据及其在横向校验数组、纵向校验数组中对应的校验数据,进入步骤S24;
步骤S23.计算更新后的各数据块的横向校验数组、纵向校验数组,然后将各数据块、横向校验数组、纵向校验数组写入到存储器中,进入步骤S24;
步骤S24.读取各数据块、横向校验数组、纵向校验数组,计算读取的各数据块的横向校验数组、纵向校验数组,并将其分别与读取的横向校验数组、纵向校验数组进行比较,校验成功后取读出的各数据块,否则再次读出并校验。具体的,将计算后的横向校验数组、纵向校验数组分别与读取的横向校验数组、纵向校验数组进行比较,若两者比较均成功,则校验成功;若任意一组比较失败,则校验失败。
参见图3所示,步骤S22中,对其中某一行数据进行更新时,所述计算具体包括:
步骤S221.对更新后的目标行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;
步骤S221.对纵向校验数组进行求反运算,将求反后的结果与更新前的目标行数据进行异或运算;
步骤S223.对步骤S222中异或后的结果与更新后的目标行数据进行异或运算,将再次异或后的结果进行求反运算,存入纵向校验数组中。
参见图4所示,步骤S23中,全部数据进行更新时,所述更新具体包括:
步骤S231.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;
步骤S232.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组;
步骤S233.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组。
对于三相费控智能电能表来说它的主要功能是用来电量计量的,因此三相费控智能电能表内存储的电量对于三相费控智能电能表来说是至关重要的数据。对于三相费控智能电能表来说其内部存储的电量有以下几类:组合有功总、尖、峰、平、谷电能,正向有功总、尖、峰、平、谷电能,反向有功总、尖、峰、平、谷电能,组合无功1、2总、尖、峰、平、谷电能,第1-4象限无功总、尖、峰、平、谷电能,正向视在总、尖、峰、平、谷电能,反向视在总、尖、峰、平、谷电能,以及分相的以上几类电能,共有85类数据。由于这些数据平时要频繁读写,因此要在单片机内部RAM中进行存储。同时这些数据在电表掉电时要进行保存,因此要在单片机外部的E2PROM中进行存储。现就这些电能数据在三相费控智能电能表中单片机内部RAM和单片机外部的E2PROM中的存储方法进行举例说明:
1.由于这些电能数据每一类的长度为4个字节,为了便于对某一类数据的存储,因此在对数据分组时把每一行的长度定为4个字节。如:当正向有功总电能需要存储时,只需更新这一行的数据就可以了,不用把其它数据都更新,这样可以提高效率,避免对元器件的频繁读写,延长了元器件的寿命。由于单片机内部RAM的连续空间比较大,因此在RAM中把数据分成85行4列。对于单片机外部的E2PROM,在对其进行读写时,使用的缓冲区为256个字节。由于85类电量数据共320个字节,超过缓冲区长度,因此在要把数据分成两大块,一个为块A有50行4列数据,另一个为块B有35行4列数据。
2.对于存放在RAM中的85类电量数据,建立一个长度为85的数组RAM_checkH[85]存放横向校验数据。
对于存放在E2PROM中块A中的50类电量数据,建立一个长度为50的数组E2A_checkH[50]存放横向校验数据。对于存放在E2PROM中块B中的35类电量数据,建立一个长度为35的数组E2B_checkH[35]存放横向校验数据。
3.对于存放在RAM中的85类电量数据,建立一个长度为5的数组RAM_checkZ[5]存放纵向校验数据。
对于存放在E2PROM中块A中的50类电量数据,建立一个长度为5的数组E2A_checkZ[5]存放纵向校验数据。对于存放在E2PROM中块B中的35类电量数据,建立一个长度为5的数组E2B_checkZ[5]存放纵向校验数据。
4.在RAM中每类电量的定义为RAM_XXXXXXXX[4],在E2PROM中两块数据中的每类电量的分别定义为E2A_XXXXXXXX[4]和E2B_XXXXXXXX[4]。依次对每一行的4个字节数据累加后取256的模并存入各自横向校验数组中对应的位置。
对于存放在RAM中的85类电量数据的横向校验数组RAM_checkH[85]中的值计算如下:
RAM_checkH[1]=(RAM_X1X1X1X1X1X1X1X1[1]+RAM_X1X1X1X1X1X1X1X1[2]+RAM_X1X1X1X1X1X1X1X1[3]+RAM_X1X1X1X1X1X1X1X1[4])mod 256
RAM_checkH[2]=(RAM_X2X2X2X2X2X2X2X2[1]+RAM_X2X2X2X2X2X2X2X2[2]+RAM_X2X2X2X2X2X2X2X2[3]+RAM_X2X2X2X2X2X2X2X2[4])mod 256
…………………………………………
RAM_checkH[84]=(RAM_X84X84X84X84X84X84X84X84[1]+RAM_X84X84X84X84X84X84X84X84[2]+RAM_X84X84X84X84X84X84X84X84[3]+RAM_X84X84X84X84X84X84X84X84[4])mod 256
RAM_checkH[85]=(RAM_X85X85X85X85X85X85X85X85[1]+RAM_X85X85X85X85X85X85X85X85[2]+RAM_X85X85X85X85X85X85X85X85[3]+RAM_X85X85X85X85X85X85X85X85[4])mod 256
对于存放在E2PROM中块A中的50类电量数据的横向校验数组E2A_checkH[50]中的值计算如下:
E2A_checkH[1]=(E2A_X1X1X1X1X1X1X1X1[1]+E2A_X1X1X1X1X1X1X1X1[2]+E2A_X1X1X1X1X1X1X1X1[3]+E2A_X1X1X1X1X1X1X1X1[4])mod 256
E2A_checkH[2]=(E2A_X2X2X2X2X2X2X2X2[1]+E2A_X2X2X2X2X2X2X2X2[2]+E2A_X2X2X2X2X2X2X2X2[3]+E2A_X2X2X2X2X2X2X2X2[4])mod 256
…………………………………………
E2A_checkH[49]=(E2A_X49X49X49X49X49X49X49X49[1]+E2A_X49X49X49X49X49X49X49X49[2]+E2A_X49X49X49X49X49X49X49X49[3]+E2A_X49X49X49X49X49X49X49X49[4])mod 256
E2A_checkH[50]=(E2A_X50X50X50X50X50X50X50X50[1]+E2A_X50X50X50X50X50X50X50X50[2]+E2A_X50X50X50X50X50X50X50X50[3]+E2A_X50X50X50X50X50X50X50X50[4])mod 256
对于存放在E2PROM中块B中的35类电量数据的横向校验数组E2B_checkH[35]中的值计算如下:
E2B_checkH[1]=(E2B_X1X1X1X1X1X1X1X1[1]+E2B_X1X1X1X1X1X1X1X1[2]+E2B_X1X1X1X1X1X1X1X1[3]+E2B_X1X1X1X1X1X1X1X1[4])mod 256
E2B_checkH[2]=(E2B_X2X2X2X2X2X2X2X2[1]+E2B_X2X2X2X2X2X2X2X2[2]+E2B_X2X2X2X2X2X2X2X2[3]+E2B_X2X2X2X2X2X2X2X2[4])mod 256
…………………………………………
E2B_checkH[34]=(E2B_X34X34X34X34X34X34X34X34[1]+E2B_X34X34X34X34X34X34X34X34[2]+E2B_X34X34X34X34X34X34X34X34[3]+E2B_X34X34X34X34X34X34X34X34[4])mod 256
E2B_checkH[35]=(E2B_X35X35X35X35X35X35X35X35[1]+E2B_X35X35X35X35X35X35X35X35[2]+E2B_X35X35X35X35X35X35X35X35[3]+E2B_X35X35X35X35X35X35X35X35[4])mod 256
5.依次对每一列的m个字节相异或后求反存入各自的纵向校验数组中。
对于存放在RAM中的85类电量数据的纵向校验数组RAM_checkZ[5]中的值计算如下:
RAM_checkZ[1]=~(RAM_X1X1X1X1X1X1X1X1[1]⊕RAM_X2X2X2X2X2X2X2X2[1]⊕……⊕RAM_X85X85X85X85X85X85X85X85[1])
RAM_checkZ[2]=~(RAM_X1X1X1X1X1X1X1X1[2]⊕RAM_X2X2X2X2X2X2X2X2[2]⊕……⊕RAM_X85X85X85X85X85X85X85X85[2])
RAM_checkZ[3]=~(RAM_X1X1X1X1X1X1X1X1[3]⊕RAM_X2X2X2X2X2X2X2X2[3]⊕……⊕RAM_X85X85X85X85X85X85X85X85[3])
RAM_checkZ[4]=~(RAM_X1X1X1X1X1X1X1X1[4]⊕RAM_X2X2X2X2X2X2X2X2[4]⊕……⊕RAM_X85X85X85X85X85X85X85X85[4])
对于存放在E2PROM中块A中的50类电量数据的纵向校验数组E2A_checkZ[5]中的值计算如下:
E2A_checkZ[1]=~(E2A_X1X1X1X1X1X1X1X1[1]⊕E2A_X2X2X2X2X2X2X2X2[1]⊕……⊕E2A_X50X50X50X50X50X50X50X50[1])
E2A_checkZ[2]=~(E2A_X1X1X1X1X1X1X1X1[2]⊕E2A_X2X2X2X2X2X2X2X2[2]⊕……⊕E2A_X50X50X50X50X50X50X50X50[2])
E2A_checkZ[3]=~(E2A_X1X1X1X1X1X1X1X1[3]⊕E2A_X2X2X2X2X2X2X2X2[3]⊕……⊕E2A_X50X50X50X50X50X50X50X50[3]
E2A_checkZ[4]=~(E2A_X1X1X1X1X1X1X1X1[4]⊕E2A_X2X2X2X2X2X2X2X2[4]⊕……⊕E2A_X50X50X50X50X50X50X50X50[4])
对于存放在E2PROM中块B中的35类电量数据的纵向校验数组E2B_checkZ[5]中的值计算如下:
E2B_checkZ[1]=~(E2B_X1X1X1X1X1X1X1X1[1]⊕E2B_X2X2X2X2X2X2X2X2[1]⊕……⊕E2B_X35X35X35X35X35X35X35X35[1])
E2B_checkZ[2]=~(E2B_X1X1X1X1X1X1X1X1[2]⊕E2B_X2X2X2X2X2X2X2X2[2]⊕……⊕E2B_X35X35X35X35X35X35X35X35[2])
E2B_checkZ[3]=~(E2B_X1X1X1X1X1X1X1X1[3]⊕E2B_X2X2X2X2X2X2X2X2[3]⊕……⊕E2B_X35X35X35X35X35X35X35X35[3]
E2B_checkZ[4]=~(E2B_X1X1X1X1X1X1X1X1[4]⊕E2B_X2X2X2X2X2X2X2X2[4]⊕……⊕E2B_X35X35X35X35X35X35X35X35[4])
6.对每一行的横向校验值相异或后求反存入纵向校验数组中。
对于存放在RAM中的85类电量数据的每行的横向校验值的纵向校验RAM_checkZ[5]中的值计算如下:
RAM_checkZ[5]=~(RAM_checkH[1]⊕RAM_checkH[2]⊕……⊕RAM_checkH[85])
对于存放在E2PROM中块A中的50类电量数据的每行的横向校验值在纵向校验E2A_checkZ[5]中的值计算如下:
E2A_checkZ[5]=~(E2A_checkH[1]⊕E2A_checkH[2]⊕……⊕E2A_checkH[50])
对于存放在E2PROM中块B中的35类电量数据的每行的横向校验值在纵向校验E2B_checkZ[5]中的值计算如下:
E2B_checkZ[5]=~(E2B_checkH[1]⊕E2B_checkH[2]⊕……⊕E2B_checkH[35])
7.在三相费控智能电能表首次上电时会对单片机内的RAM和E2PROM中的电量数据初始化,初始化后的值为全零。
电量数据在E2PROM中存储时采用备份方式,即在对E2PROM写入电量数据时要同时写入主存储区和备份存储区。
RAM中的85类电量数据的横向校验数组RAM_checkH[85]中的值按照以上计算方法可知,其值为全零。
RAM中的85类电量数据的纵向校验数组RAM_checkZ[5]中的值按照以上计算方法可知,其值为FFH。
放在E2PROM中块A中的50类电量数据的横向校验数组E2A_checkH[50]中的值按照以上计算方法可知,其值为全零。
放在E2PROM中块A中的50类电量数据的纵向校验数组E2A_checkZ[5]中的值按照以上计算方法可知,其值为FFH。
存放在E2PROM中块B中的35类电量数据的横向校验数组E2B_checkH[35]中的值按照以上计算方法可知,其值为全零。
存放在E2PROM中块B中的35类电量数据的纵向校验数组E2B_checkZ[5]中的值按照以上计算方法可知,其值为FFH。
在E2PROM中对块A数据进行存储时,把块A中的50类电量数据、它的横向校验数组E2A_checkH[50]、它的纵向校验数组E2A_checkZ[5]共255个字节一起写入到E2PROM中。在E2PROM的其它区域定义一个块A数据的主存储区和备份区,在保存块A的上述255个字节数据时,要同时写入主存储区和备份区。
在E2PROM中对块B数据进行存储时,把块B中的35类电量数据、它的横向校验数组E2B_checkH[35]、它的纵向校验数组E2B_checkZ[5]共180个字节一起写入到E2PROM中。在E2PROM的其它区域定义块B数据的主存储区和备份区,在保存块B的上述180个字节数据时,要同时写入主存储区和备份区。
8.当电表在运行过程中85类电量数据中某一类累计到0.01度时,存在RAM中的这类电量就需要进行加0.01度的操作。在进行这类电量加0.01度的操作前,要对RAM中存储的85类电量数据进行校验操作。按照(4)(5)(6)中的计算方法分别重新计算出这85类数据的横向校验数组、纵向校验数组放到临时缓冲区。把计算得到的横向校验数组和RAM_checkH[85]比较,把计算得到的纵向校验数组和RAM_checkZ[5]中的值比较,如果有一个比较不相等,就从E2PROM中重新读出电量数据用于更新RAM中的电量数据。如果两者都相等,就把此类电量在RAM中的数据进行加0.01操作,并更新其在RAM中对应的横向校验数组RAM_checkH[85]中的值。对纵向校验数组RAM_checkZ[5]进行求反操作,把此类电量更新前的数据及其校验和共5个字节与求反后的纵向校验数组RAM_checkZ[5]相异或,再把纵向校验数组RAM_checkZ[5]与此类电量更新后的数据及其校验和相异或,结果存入纵向校验数组RAM_checkZ[5],再次对纵向校验数组RAM_checkZ[5]进行求反操作。这样就完成了这类电量的累计更新处理。
当电表在运行过程中85类电量数据中某一类累计到1度时,对这类电量就需要进行写入E2PROM的操作。如果这类电量在E2PROM中存储在块A数据区,把块A中的50类电量数据、它的横向校验数组E2A_checkH[50]、它的纵向校验数组E2A_checkZ[5]共255个字节一起放入到缓冲区后写入到E2PROM中块A数据的主存储区和备份区。如果这类电量在E2PROM中存储在块B数据区,把块B中的35类电量数据、它的横向校验数组E2B_checkH[35]、它的纵向校验数组E2B_checkZ[5]共180个字节一起放入到缓冲区后写入到E2PROM中块B数据的主存储区和备份区。
9.当三相费控智能电能表需要清零时,此时对电量的校验计算和存储方法同(7)中描述的方法。
10.在上电时从E2PROM中读出85类电量数据,并存放到RAM中。
当对E2PROMA块中的电量数据读取时,一次性读出50类电量数据、横向校验数组、纵向校验数组共255个字节数据到缓冲区中。根据(4)(5)(6)中的方法计算这50类电量数据的横向校验数据存放到横向校验数组E2A_checkH[50]中,纵向校验数据存放到纵向校验数组E2A_checkZ[5]中。把缓冲区中存放的横向校验数组和E2A_checkH[50]进行比较,把缓冲区中存放的纵向校验数组和E2A_checkZ[5]进行比较。如果两者比较均成功,用缓冲区中的50类电量数据更新RAM中数据及校验值。如果有一个比较不成功,则按照同样的方法从备份区中再次读取50类电量数据。
当对E2PROMB块中的电量数据读取时,一次性读出35类电量数据、横向校验数组、纵向校验数组共180个字节数据到缓冲区中。根据(4)(5)(6)中的方法计算这35类电量数据的横向校验数据存放到横向校验数组E2B_checkH[35]中,纵向校验数据存放到纵向校验数组E2B_checkZ[5]中。把缓冲区中存放的横向校验数组和E2B_checkH[35]进行比较,把缓冲区中存放的纵向校验数组和E2B_checkZ[5]进行比较。如果两者比较均成功,用缓冲区中的35类电量数据更新RAM中数据及校验值。如果有一个比较不成功,则按照同样的方法从备份区中再次读取35类电量数据。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (10)
1.一种基于数据纵横存储方法的三相费控智能电能表,其特征在于,包括以下步骤:
步骤S11.根据存储器的缓冲区长度,将待存储的数据划分为至少一块数据块;
步骤S12.根据数据类型,将各数据块按字节分成m行横行及n列纵列,其中m≥1,n≥1;
步骤S13.为各数据块分别建立一个用于存放横向校验数据的横向校验数组,其长度为m个字节;为各数据块分别建立一个用于存放纵向校验数据的纵向校验数组,其长度为n+1个字节;
步骤S14.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果作为校验数据存入横向校验数组;
步骤S15.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组;
步骤S16.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果作为校验数据存入纵向校验数组;
步骤S17.将各数据块、横向校验数组、纵向校验数组写入到存储器中。
2.如权利要求1所述的基于数据纵横存储方法的三相费控智能电能表,其特征在于:步骤S11中,所述存储器包括随机存取存储器和带电可擦写可编程只读存储器。
3.如权利要求1所述的基于数据纵横存储方法的三相费控智能电能表,其特征在于:步骤S11中,每一块数据块不大于存储器的缓冲区长度。
4.如权利要求1所述的基于数据纵横存储方法的三相费控智能电能表,其特征在于:步骤S12中,若最后一行横行数据不足,则补零。
5.如权利要求1所述的基于数据纵横存储方法的三相费控智能电能表,其特征在于:步骤S14中,所述取模运算具体是把累加运算后的结果对256取模。
6.如权利要求1所述的基于数据纵横存储方法的三相费控智能电能表,其特征在于:步骤S16中,将结果作为校验数据存入纵向校验数组中第n+1个字节对应的位置。
7.基于权利要求1所述数据纵横存储方法的基于数据校验处理方法的三相费控智能电能表,其特征在于,包括以下步骤:
步骤S21.校验处理前,先判断数据更新类型,若是对其中某一行数据进行更新,则进入步骤S22;若是对全部数据进行更新,则进入步骤S23;
步骤S22.在存储器中更新对应数据块中的一行数据及其在横向校验数组、纵向校验数组中对应的校验数据,进入步骤S24;
步骤S23.计算更新后的各数据块的横向校验数组、纵向校验数组,然后将各数据块、横向校验数组、纵向校验数组写入到存储器中,进入步骤S24;
步骤S24.读取各数据块、横向校验数组、纵向校验数组,计算读取的各数据块的横向校验数组、纵向校验数组,并将其分别与读取的横向校验数组、纵向校验数组进行比较,校验成功后取读出的各数据块,否则再次读出并校验。
8.如权利要求7所述的基于数据校验处理方法的三相费控智能电能表,其特征在于,步骤S22中,对其中某一行数据进行更新时,所述更新具体包括:
步骤S221.对更新后的目标行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;
步骤S221.对纵向校验数组进行求反运算,将求反后的结果与更新前的目标行数据进行异或运算;
步骤S223.对步骤S222中异或后的结果与更新后的目标行数据进行异或运算,将再次异或后的结果进行求反运算,存入纵向校验数组中。
9.如权利要求7所述的基于数据校验处理方法的三相费控智能电能表,其特征在于,步骤S23中,全部数据进行更新时,所述计算具体包括:
步骤S231.对各数据块中每一行的n个字节数据进行累加运算后,再取模运算,并将结果存入横向校验数组;
步骤S232.对各数据块中每一列的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组;
步骤S233.将横向校验数组中的m个字节数据进行异或运算后,再求反运算,并将结果存入纵向校验数组。
10.如权利要求7所述的基于数据校验处理方法的三相费控智能电能表,其特征在于,步骤S24中,将计算后的横向校验数组、纵向校验数组分别与读取的横向校验数组、纵向校验数组进行比较,若两者比较均成功,则校验成功;若任意一组比较失败,则校验失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510069834.2A CN104637181B (zh) | 2015-02-10 | 2015-02-10 | 基于数据纵横存储及校验处理方法的三相费控智能电能表 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510069834.2A CN104637181B (zh) | 2015-02-10 | 2015-02-10 | 基于数据纵横存储及校验处理方法的三相费控智能电能表 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104637181A CN104637181A (zh) | 2015-05-20 |
CN104637181B true CN104637181B (zh) | 2017-04-05 |
Family
ID=53215880
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510069834.2A Active CN104637181B (zh) | 2015-02-10 | 2015-02-10 | 基于数据纵横存储及校验处理方法的三相费控智能电能表 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104637181B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105334383B (zh) * | 2015-10-21 | 2018-06-22 | 宁波三星医疗电气股份有限公司 | 一种电能表的电量数据存储方法 |
CN114499757B (zh) * | 2022-01-07 | 2024-06-18 | 锐捷网络股份有限公司 | 一种生成校验和的方法、装置及电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100282623B1 (ko) * | 1998-05-12 | 2001-03-02 | 탁승호 | 가치전송 및 가치저장 방법 및 그를 이용한 가치저장형 전력량계 |
CN101369360A (zh) * | 2008-09-27 | 2009-02-18 | 北京双得利科工贸有限责任公司 | 数码式计量器具的机卡分离方法及其发卡系统 |
RU154072U1 (ru) * | 2011-11-14 | 2015-08-10 | Васко Дэйта Секьюрити Интернэшнл Гмбх | Средство чтения смарт-карты с безопасной функцией журналирования |
CN102881085B (zh) * | 2012-08-23 | 2015-07-22 | 北京京源水仪器仪表有限公司 | 用于智能水表的ic卡模块的安全认证方法 |
-
2015
- 2015-02-10 CN CN201510069834.2A patent/CN104637181B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104637181A (zh) | 2015-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106816179A (zh) | 一种闪存纠错方法和装置 | |
CN104142892B (zh) | 一种数据读写方法、装置及系统 | |
CN110113132A (zh) | 一种编译码方法和终端 | |
CN101388674B (zh) | 一种译码的方法、译码器以及Turbo码译码器 | |
CN106341136A (zh) | Ldpc解码方法及其装置 | |
CN107092536A (zh) | 解码方法、存储器存储装置及存储器控制电路单元 | |
CN104637181B (zh) | 基于数据纵横存储及校验处理方法的三相费控智能电能表 | |
CN102356554B (zh) | Turbo码数据交织处理方法和用于交织Turbo码数据的交织器 | |
CN110515542A (zh) | 数据存储方法、装置、计算设备、存储系统及存储介质 | |
CN106502590A (zh) | 一种固态硬盘ssd存储系统及方法 | |
CN108182125A (zh) | 近阈值电压下高速缓存多位硬错误的检测及容错装置与方法 | |
CN104635196A (zh) | 费控智能电能表的实时时钟同步纠错方法 | |
CN107678690A (zh) | 一种固态硬盘及其冗余独立磁盘阵列的实现方法 | |
CN109065092A (zh) | Nvm芯片的读阈值设置方法及其装置 | |
CN104461388A (zh) | 一种存储阵列配置保存及仲裁方法 | |
CN102789370B (zh) | 一种raid阵列同步方法及装置 | |
CN115639961A (zh) | 数据写入方法、存储系统及服务器 | |
CN105161137B (zh) | 一种MLC架构中Nand Flash控制器电路实现装置 | |
CN110233698A (zh) | 极化码的编码及译码方法、发送设备、接收设备、介质 | |
CN104298572B (zh) | 一种纠错方法、纠错装置、主控制器和纠错系统 | |
CN106856406A (zh) | 一种译码方法中校验节点的更新方法及译码器 | |
CN104598169B (zh) | 用于flash存储器的高可靠性数据读取方法 | |
CN104471888B (zh) | 突发数据块中的空闲块idle的处理方法、设备及系统 | |
CN108958667A (zh) | 一种基于分布式存储系统的数据读取方法、系统及装置 | |
CN107193685A (zh) | 基于闪存存储设备的纠删方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |