一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种充电桩控制器电量数据的处理方法与流程

2022-09-03 06:44:42 来源:中国专利 TAG:

1.本发明涉及电动汽车充电技术领域,特别是一种充电桩控制器电量数据的处理方法。


背景技术:

2.随着新能源汽车的发展,基础设施建设和充电桩智能充电技术也在快速发展中。充电桩使用的是国家电力系统标准的家用220v交流电进行供电,但是,国家电网经常遇到各种原因会停电,特别是用电高峰时容易出现电力中断。一旦停电,充电桩就会断电并停止工作(充电动汽车电)。对于公桩,理论情况下,在断电并停止工作前,充电桩的电量会周期性地存到eeprom(带电可擦可编程只读存储器),在电网恢复供电后,充电桩上电后能够及时通过读取eeprom中的数据,并恢复到断电前的电量(或者接近充电前的数据)。但是在极限条件下:比如电磁条件复杂条件下,充电桩遇到异常断电,若此时电路在存储电量数据到eeprom时遭遇电磁干扰,导致存储到eeprom中的数据出错,但是因为断电导致控制器来不及从eeprom回读已经存储的数据进行校验再存储,最终导致存储到eeprom区域的电量数据发生错误或者数据存储不全。在电网恢复供电后,部分数据需要重新读取进行累计,此时由于eeprom数据的异常或者不完全,导致无法恢复到期望数据,会导致充电计费信息丢失或者存在较大差异,严重影响电费收取,给充电桩服务商和充电用户带来不必要的纠纷。因此,亟需研发一种充电桩控制器电量数据的处理方法,来解决以上问题。


技术实现要素:

3.本发明的目的在于,提供一种充电桩控制器电量数据的处理方法。本发明设计了特殊的数据分布结构和数据恢复方法,降低了充电桩控制器在极限条件下因存储错误而造成电量无法恢复的风险。
4.本发明的技术方案:一种充电桩控制器电量数据的处理方法,包括:
5.eeprom的区域划分:从与充电桩控制器配合的eeprom中分出n个字节的第一区域和m个字节的第二区域,所述第一区域n个字节均分为p个块,p为大于2的整数,用来存储电量数据,所述第二区域m个字节均分为q个块,q为正整数,用来存储电量数据通过第一算法计算后得到的校验数据;
6.数据存储:充电电量每增加一个单位,触发1次eeprom存储,每次触发eeprom存储时,第一区域p个块中的某个块进行1次擦写并写入该块的擦写总数,以第一区域p个块的擦写总数作为电量数据,将该电量数据通过第一算法计算得到校验数据并存储于第二区域;随着充电电量的不断增加,第一区域的p个块按顺序逐块循环擦写,更新实时的电量数据,第二区域也同步更新校验数据;
7.数据恢复:当充电桩系统断电后重新上电时,分别读取eeprom中第一区域p个块各自的擦写总数以及第二区域存储的校验数据a,将第一区域p个块各自的擦写总数累加得到电量数据,将该电量数据通过第一算法计算得到校验数据b;
8.若校验数据a=校验数据b,表示eeprom中的所有数据有效,则将所有有效数据写进eeprom,完成恢复;
9.若校验数据a≠校验数据b,表示eeprom中存在错误数据,则跳过校验数据a的有效性判断,直接判断第一区域p个块各自的擦写总数的有效性,将第一区域p个块各自的擦写总数按擦写的先后顺序排列,从数据排列的规律中得出第一区域p个块各自擦写总数的有效值,进而求得第二区域校验数据的有效值,将得到的所有有效值写进eeprom,完成恢复。
10.前述的一种充电桩控制器电量数据的处理方法中,所述数据恢复具体包括以下步骤:
11.步骤1、充电桩系统断电后重新上电,充电桩控制器进入正常工作模式首先读取eeprom中第一区域存储的p个擦写数据,分别赋值给ram的变量energydata1至energydatap,同时eeprom数据读取次数赋值为1,进入步骤2;
12.步骤2、读取eeprom中第二区域存储的校验数据,若校验数据有效,则将该数据赋值给ram的变量checksundata1,进入步骤3;若校验数据无效,则抛弃校验数据,进入步骤6;
13.步骤3、将energydata1至energydatap这p个擦写数据进行累加得到电量数据energydata,将energydata按照crc16算法计算出校验数据checksundata2,将checksundata1与checksundata2进行对比,
14.若checksundata1=checksundata2,则进入步骤4;
15.若checksundata1≠checksundata2,则进入步骤5;
16.步骤4、将energydata1至energydatap这p个擦写数据进行累加,得到电量数据energydata,根据电量数据energydata计算出有效的电能数据总数energy,再进入步骤7;
17.步骤5、重复读取eeprom中第一区域存储的p个擦写数据,每次读取时eeprom数据读取次数赋值 1,再次进行步骤2和步骤3,
18.若满足eeprom数据读取次数≤3,且checksundata1=checksundata2,则进入步骤4;
19.若在eeprom数据读取3次后,还不满足checksundata1=checksundata2,则进入步骤6;
20.步骤6、将第一区域p个块各自的擦写总数energydata1至energydatap按擦写的先后顺序排列,从数据排列的规律中判断p个数据的有效性,若有错误数据,则对错误数据进行更正,并进入步骤4;
21.步骤7、将有效的电能数据总数energy通过计算后写进eeprom,退出数据恢复流程。
22.前述的一种充电桩控制器电量数据的处理方法中,所述步骤6具体包括:
23.步骤6.1、首先确定energydata1的有效性,定义变量value为energydata1与第一区域中其他块中数据的差值,将energydata1与energydata2比较,
24.若energydata1-energydata2≠0且≠1,则进入步骤6.2;
25.若energydata1-energydata2=0或=1,则进入步骤6.3;
26.步骤6.2、将energydata1与energydata3比较,若energydata1-energydata3≠0且≠1,则将energydata2赋值给energydata1;若energydata1-energydata3=0或=1,则将energydata1赋值给energydata2;再进入步骤4;
27.步骤6.3、基于energydata1-energydata2=0或=1,认定数据energydata1、energydata2均有效,将energydata1与energydata3至energydatap逐个比较,定义一个变量flag_change,当差值value=0或1时,value每变化1次,flag_change就加1,
28.若energydata1-energydata2=0,则进入步骤6.3.1;
29.若energydata1-energydata2=1,则进入步骤6.3.2;
30.步骤6.3.1、将energydata1与energydata3至energydatap逐个比较,
31.若value≠0且≠1时,说明该块的数值为无效值,将energydata1减去1后赋值到该块,再进入步骤4;
32.若value为0或1,则进一步判断flag_change,
33.当flag_change≥2,说明该块的数值为无效值,将energydata1减去1后赋值到该块,再进入步骤4;
34.当flag_change<2,继续下一个数据比对,以此类推,直到将所有数据比对完成,若比较完最后一个数据,flag_change始终<2,说明第一区域p个块的数据全部有效,则进入步骤4;
35.步骤6.3.2、将energydata2与energydata3至energydatap逐个比较,若存在某块的数据≠energydata2,则将energydata2赋值给该块,并进入步骤4。
36.前述的一种充电桩控制器电量数据的处理方法中,在所述步骤7之后进行步骤8和步骤9,
37.步骤8、继续等待下一单位电量增量的到来,触发对eeprom的操作,将当前的电能数据总数energy换算成energydata,同时计算出一个校验数据checksundata2,并存入eeprom,进入步骤9;
38.步骤9、每次操作eeprom后,回读写入的数据是否正确,读取存入eeprom的校验数据并赋值给变量checksundata1,再和checksundata2比较,若checksundata1=checksundata2,则进入步骤8;若checksundata1≠checksundata2,则需要重新写一遍,并再次回读,直到回读的数据和变量中的数据一样,然后进入步骤8。
39.前述的一种充电桩控制器电量数据的处理方法中,在所述步骤3中,若累加得到电量数据energydata为0,则认为第一区域p个块中无任何数据,不做任何操作,进入步骤8。
40.前述的一种充电桩控制器电量数据的处理方法中,所述q为大于1的整数,每触发1次eeprom存储,在第二区域的某个块中进行一次擦写,写入最新的校验数据,当第二区域某个块的擦写次数达到x万次时,其中x≥50,就将该块中的校验数据清零,换成另一个块进行存储。
41.前述的一种充电桩控制器电量数据的处理方法中,所述n=40、m=32、p=q=16。
42.前述的一种充电桩控制器电量数据的处理方法中,所述数据存储步骤中以0.1kw
·
h作为一个单位的充电电量。
43.与现有技术相比,本发明的有益效果体现在:本发明通过特殊的数据分布结构和数据恢复方法,使得充电桩控制器能够在掉电并重新恢复后,读取eeprom数据后及时校验,如果遇到非法数据,可以通过多级计算,能够将读取到的非法数据恢复到掉电前的数值(或者接近有效值),降低了电量在极限条件下因存储错误而造成的无法恢复的风险。同时,因为eeprom本身区域划分的结构特殊性,将所需要的数据分为p份并在eeprom第一区域的p个
块中存储,因为每次存储增加1只需要修改其中1个块,如此当控制器断电后重启,既可以通过读取存储在eeprom中的校验数据进行快速恢复,即使校验数据也存在问题,也能通过所存储电能数据的第一区域p个块内本身的数据关系(最多只有1个块存在错误数据),恢复到原始数据,即使在校验扇区数据错误或者不全时,存储到eeprom的充电的电量数据也可以在不依赖存储在eeprom中的校验数据进行数据的恢复,增加了产品的可靠性。
具体实施方式
44.下面结合实施例对本发明作进一步的说明,但并不作为对本发明限制的依据。
45.实施例:一种充电桩控制器电量数据的处理方法,包括:
46.eeprom的区域划分:因为车规级的eeprom同一扇区能够保证最少100万次擦写而不会刷坏扇区。因此对固定的某一个块,该块上的数据理论上至少能够擦写100万次。因此本实施例以100万次擦写为基础,从eeprom分出40个字节的第一区域,用来存储需要存储的电量数据。40个字节平均分为16个块,每个块长度为2.5个字节(20bit),每个块最大可以表示220的数据。如果把每块的数据循环累加,意味着16个块累加后最大能表示16000000(1600万)的数据。按照市面上普遍的产品生命周期内需要满足充电55000个小时的要求,若以22kw功率的充电桩计算,若所有时间都满功率充电,整个生命周期内,需要满足1210000(121万)kw
·
h的电量。即充电数据按照每0.1kw
·
h(常量k)的精度存储1次,每次步长为1,则第一区域可以表示160万kw
·
h,可以满足产品整个生命周期内的需求(121万kw
·
h)。另外从eeprom分出32个字节的第二区域,平均分为16个块(即每各块为2byte的空间),用来存储电量数据通过crc16算法得到的校验数值checksundata1。
47.数据存储:电能数据总数energy存储按照每增长0.1kw
·
h时,触发1次eeprom存储。当需要存储到eeprom的数据energydata(经过energy/0.1算出的数据)为1时,我们在eeprom第一区域的第1个块(energycounter=1)写1,当需要存储到eeprom的数据energydata为2时,我们在第2个块(energycounter=2)写1,当需要存储到eeprom的数据energydata为3时,我们在第3个块(energycounter=3)写1,以此类推
……
当需要存储到eeprom的数据energydata为16时,我们在第16个块(energycounter=16)写1,当需要存储到eeprom的数据energydata为17时,我们在第1个块(energycounter=1)写2,
……
以此循环。同时在eeprom的第一区域每进行1次擦写,就把energydata通过crc16计算的数值存放到eeprom的第二区域中。为了避免第二区域中扇区(16个块)因为频繁擦写导致扇区损坏,需要在第二区域同一个块每擦写1000000(100万)次,就换一个块进行存储,同时将原有块中的校验数据清零。即在第一区域中,当擦写次数达到1000000(100万)后,也即16个块平均每个块擦写6.25万次,就将第二区域中的第1个块中的数据清零,同时将crc16计算的数值存在第二区域的第2个块中;当第一区域中擦写总计次数达到2000000(200万)后,将第二区域中块2中的数据清零,同时将crc16计算的数值存在第二区域的中块3中,以此类推
……
;当第一区域中擦写次数总计达到15000000(1500万)后,将第二区域中块15的数据清零,同时将crc16计算的数值存在第二区域的块16中。
48.综上,充电桩每增加0.1kw
·
h时,触发1次eeprom存储。如此操作,我们在第一区域每次只会擦写16个块中的1个块,如果在存储数据时,遇到异常掉电或者在掉电时遇到其他干扰的情况,我们可以通过电量恢复方法,对破坏的区域进行强制恢复到正常的数据。
49.以下具体介绍电量恢复方法:
50.步骤1、充电桩系统启动后(断电后重新上电),充电桩控制器进入正常工作模式,首先读取eeprom中存储的第一区域中(40个字节的)16个擦写数据(16个擦写数据反应电能数据,因此,以下称擦写数据为电能数据),分别赋给ram的变量energydata1、energydata2、energydata3、energydata4、
……
energydata15、energydata16。同时同时eeprom数据读取次数readertime赋值为1(重复读取eeprom数据次数阈值);继续步骤2。
51.步骤2、读取eeprom中存储的第二区域中的2个字节的crc校验数据。先读取第1个块,若读取到数据为00或ff,则继续读下一个(第2个)块,以此类推,一直读到第16个块
……
若在某一个块读取到的数据不为00或ff,则将该数据赋值给ram的变量checksundata1,进入步骤3;如果一直读到最后一个块(第16个块),仍然为00或ff,则认为第二区域中的16个块中无任何有效的校验数据,则进入步骤6,即抛弃校验数据,转而直接通过第一区域中电量数据自身的规律进行进一步判断。
52.步骤3、将16个数据(energydata1、energydata2、
……
、energydata15、energydata16)进行累加得到energydata。若energydata为0,则认为第一区域中的16个块中无任何数据,不做任何操作,进入步骤8;若energydata不为0,则将energydata按照crc16计算出checksundata2(校验数据),然后将从eeprom读出来的checksundata1和checksundata2进行比对。如果checksundata1和checksundata2相等,说明eeprom中的所有数据有效,进入数据恢复流程,即步骤4。如果checksundata1≠checksundata2,即读取到eeprom的数据校验不通过,则进入步骤5,再进行多次读取,再次尝试通过crc校验核实数据。
53.步骤4、将energydata1、energydata2、
……
、energydata15、energydata16进行累加,得到的值赋给energydata(eeprom存储的电能相关的数据)。即energydata=energydata1 energydata2
……
energydata15 energydata16,电能数据总数energy=energydata*k,其中k=0.1kw
·
h,随后转到步骤7对eeprom进行操作。
54.步骤5、通过校验码判断并恢复电能数据(第一区域与第二区域数据比较判断)
55.为了避免在读取eeprom过程中,数据受到外部环境(如电磁)干扰,导致数据突变的情况。我们在校验eeprom数据时,如果校验不通过,需要进行多次(读取的次数阈值为readertime,初始值为0)读取eeprom并进行判断。如果在3次(包含)以内的某一次校验通过,则认为数据有效,进入步骤4,进行数据恢复。如果3次校验都不通过,则重新读取eeprom数据,并重新进行计算和校验。
56.步骤5.1、在3次(包含)以内校验通过,也即readertime≤3,就再次读取17个eeprom的数据(energydata1、energydata2、
……
、energydata15、energydata16和checksundata1),分别赋值到ram里的变量中,强制替换上一次读取到的变量。同时checksundata2初始化为00或ff,readertime=readertime 1,即readertime赋值次数加1。然后通过重新赋值的16个数据计算出一个新的checksundata2,若checksundata2=checksundata1,则转到步骤4,计算energydata和energy。
57.步骤5.2、若readertime>3,说明eeprom的数据(电量数据或者校验值)中在存储时,出现了突变或异常。此时,我们不得不放弃crc校验的方法,进而通过存储在eeprom中第一区域的电量数据(energydata1、energydata2、
……
、energydata15、energydata16)自身
的规律判断,并强制恢复数据,再进入步骤6。
58.步骤6、判断eeprom中16个电量数据的有效性(从第一区域自身数据规律判断)
59.因为每次存储eeprom时,只会在对第一区域16个块中的1个块进行操作。如果16个数据中没有数据出现异常,则energydata1在16个数据中最大(或者与其他数据相等),energydata16最小(或者与其他数据相等)。以此(16个数据中energydata1最大,只有一个数据存在问题,所有数据中最多只有2种数值,且此2种数值之间差值为1)为依据,通过判断,可以快速将错误的数据找出,并恢复正常。如此再通过16个数据的累加,可将数据恢复到掉电前的数据。
60.步骤6具体包括以下子步骤:
61.步骤6.1、确定energydata1的有效性。定义变量value为energydata1与第一区域中其他块中数据的差值。将energydata1与energydata2比较,如果energydata1-energydata2≠0且≠1,说明energydata1可能无效,进入步骤6.2进一步判断energydata1的有效性;如果energydata1-energydata2=0或=1,则进入步骤6.3进一步判断。
62.步骤6.2、因为energydata1-energydata2≠0且≠1。将energydata1和energydata3比较,如果energydata1-energydata3≠0且≠1,因为错误数据的唯一性,说明energydata1的数据发生错误,则将energydata2赋值给energydata1;如果energydata1-energydata3=0或=1,因为错误数据的唯一性,则说明energydata2发生故障,则将energydata1赋值给energydata2。此时已经将错误数据恢复,进入步骤4。
63.步骤6.3、因为energydata1-energydata2=0或=1,认为数据energydata1、energydata2均有效。将energydata1与energydata3至energydata16逐个比较,定义一个变量flag_change,当差值value=0或1时,value每变化1次,flag_change就加1,当flag_change≥2时,就将说明数据存在异常,需要对异常区域进行恢复;若energydata1-energydata2=0,则进入步骤6.3.1;若energydata1-energydata2=1,说明数据发生变化,则进入步骤6.3.2。
64.步骤6.3.1、因为energydata1-energydata2=0,认为数据energydata1、energydata2均有效。则将energydata1与其他数值(energydata3至energydata16)逐个进行比对。若value≠0且≠1时,说明该块的数值为无效值,将energydata1减去1后赋值到该块,再进入步骤4;
65.若value为0或1,则进一步判断flag_change。若flag_change≥2,说明该块的数值为无效值,将energydata1减去1后赋值到该块,再进入步骤4;若flag_change<2,继续下一个数据比对,以此类推,直到将所有数据比对完成,若比较完最后一个数据后,flag_change始终<2,说明第一区域16个块中无故障数据,则直接进入步骤4。
66.步骤6.3.2、因为energydata1-energydata2=1,说明其他数值(energydata3至energydata16)若为energydata2就算有效。只需将energydata2逐个与剩下数据进行比较,若存在数据≠energydata2,则认为该数据存在问题,需要将energydata2赋值给该块,并进入步骤4。
67.步骤7、基于以上步骤,数据进行了校验或通过有效数据的恢复。最后再把有效数据通过计算后写进eeprom(16个电能数据和2个字节的校验区域),然后退出数据恢复流程。此时,ram中的数据和eeprom中的数据已经恢复正常,控制器可以基于此数值,继续正常运
行;进入步骤8。
68.步骤8、继续等待下一个0.1kw
·
h的电量增量的到来,触发对eeprom的操作。将当前电量数据energy换算成energydata,同时计算出一个校验数据checksundata2,并存入eeprom,进入步骤9。
69.步骤9、每次操作eeprom后,回读写入的数据是否正确。读取存入eeprom的校验数据并赋值给变量checksundata1,再和checksundata2进行比较。如果checksundata1=checksundata2,则进入步骤8;如果checksundata1≠checksundata2,则需要重新写一遍,并再次回读,直到回读的数据和变量中的数据一样,然后进入步骤8。
70.以上仅是本发明的优选实施方式,本发明的保护范围并不仅仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献