一、业务背景
本功能是一个用于分析电动汽车电池组中单体电池 SOC (State of Charge) 一致性的系统。通过计算电池组中各单体电池的 SOC 差异(DeltaSOC),来识别电池组中可能存在的异常单体电池,为电池健康状态评估和故障预警提供数据支持。
1. SOC(荷电状态)概念引入
1.1 概念
定义:SOC(State of Charge)指电池当前剩余电量占额定容量的百分比(0%~100%)。
作用:
是电池管理系统(BMS)的核心参数,用于评估电池续航能力、优化充放电策略。
直接影响设备的使用时间、安全性和寿命。
难点:SOC 无法直接测量,需通过电压、电流、温度等参数间接估算
1.2 计算方法
1.2.1. 安时积分法
原理:该方法依据电流对时间的积分来计算电池电量的变化。在电池充放电时,对电流进行实时积分,再结合电池初始电量,从而得到当前的 SOC。公式为 :SOC_t = SOC_0 \pm \frac{1}{C_n} \int_0^t I(\tau)d\tau,其中 SOC_t 是时刻 t 的 SOC,SOC_0是初始时刻的 SOC, C_n是电池额定容量, I(\tau)是电流。
优点:原理清晰,实现容易,能实时反映电池 SOC 的变化。
缺点:计算结果易受电流测量误差、电池自放电以及电池容量变化的影响,且初始 SOC 的确定存在一定难度。
1.2.2. 开路电压法
原理:电池的开路电压(OCV)和 SOC 之间存在特定的函数关系,通过测量电池的开路电压,再依据预先标定的 OCV - SOC 曲线就能得到对应的 SOC。
优点:测量结果较为准确,特别是在电池处于稳定状态时。
缺点:需要电池处于开路状态较长时间,以保证电压稳定,这在实际应用中较难实现,而且 OCV - SOC 曲线会受到电池温度、老化等因素的影响。
1.2.3. 卡尔曼滤波法
原理:这是一种递归的最优估计算法,通过建立电池的状态空间模型,利用当前的测量值和上一时刻的估计值对当前的 SOC 进行最优估计。在估计过程中,不断地对模型的误差进行修正,以提高估算精度。
优点:能有效处理噪声和不确定性,实时性好,估算精度较高。
缺点:需要建立准确的电池模型,模型参数的确定较为困难,且计算量较大,对硬件的计算能力有一定要求。
1.2.4. 内阻法
原理:电池的内阻与 SOC 有关,通过测量电池的内阻,建立内阻与 SOC 的关系模型,进而估算 SOC。
优点:测量相对简单,能在一定程度上反映电池的状态。
缺点:电池内阻受温度、充放电倍率等多种因素影响,导致内阻与 SOC 的关系不稳定,测量精度有限。
1.2.5. 机器学习法
原理:借助机器学习/神经网络强大的非线性映射能力,以电池的电压、电流、温度等多个参数作为输入,SOC 作为输出,通过大量的实验数据对模型进行训练,使其学习到电池参数与 SOC 之间的复杂关系。
优点:能处理复杂的非线性关系,对不同类型的电池有较好的适应性,估算精度较高。
缺点:需要大量的实验数据进行训练,训练过程耗时较长,且模型的选择及其参数调优需要一定的经验和技巧,模型的可解释性较差。
1.3 SOC_OCV开路电压查表法详解
本次 SOC 计算方法采用开路电压法,基于电池供应商提供的SOC-OCV表进行SOC计算。
SOC_OCV开路电压曲线
OCV是电池在静置足够长时间(内部极化现象基本消失)后,正负极之间的稳定电压值。此时电池无电流流入或流出,反映了电池内部化学物质的平衡状态。SOC与OCV存在特定的函数关系,通过实验记录,可画出SOC_OCV开路电压曲线,不同温度下,曲线不相同:
对该曲线簇离散化,就可以得到SOC_OCV表:
对于每个(温度,电压)数据,通过温度数据定位到对应行,再通过电压数据索引到对应的SOC。
二、算法设计
2.1 计算步骤一览
数据清洗、预处理,获取静置时长 >= 60min 后的行程数据
使用SOC_OCV开路电压法,计算单体电池SOC(核心逻辑)
计算单体电池DeltaSOC(SOC偏移量)
对SOC进行分箱统计,仅符合统计指标的数据视为有效数据
2.2 难点
单体电池温度与电压的数据结构为 Array[Double] ,平均 size 为120+;
温度和电压值往往介于表格中两个相邻温度/电压值之间,需做额外处理;
每行数据会构建一个Array[(Double,Double)],数组 size 在120+ ;使用查表法会导致spark任务运行效率低下,经火焰图统计,任务运行3小时,其中88%的cpu时间都在执行查表函数。
2.3 核心算法详解
2.3.1 前置处理
获取静置时长 >= 60min 后的行程数据,核心是通过充电数据与行程数据时间做差获得。
温度和电压是为数组,需将两数组封装,构成 Array[(Double,Double)]
。
%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%E8%AE%A1%E7%AE%97%E5%8D%95%E4%BD%93%E7%94%B5%E6%B1%A0DeltaSOC%EF%BC%88%26lt%3Bspan%20style%3D%26quot%3Bbackground-color%3A%20transparent%3B%20color%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%26quot%3B%26gt%3BSOC%E5%81%8F%E7%A7%BB%E9%87%8F%EF%BC%89%26lt%3B%2Fspan%26gt%3B%22%20style%3D%22rounded%3D1%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%2225%22%20y%3D%22750%22%20width%3D%22220%22%20height%3D%2260%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
2.3.2 查找算法实现
在SOC-OCV查表法的实现工程中,输入的温度与电压数据往往无法与预设数据表的离散值实现精准匹配。为提升SOC映射的连续性,需采用插值算法进行近似估计。基于开发效率和开发周期的考量,优先采用了线性插值算法来进行SOC的估算。
线性插值算法通用公式:
y = y_0 + \frac{x - x_0}{x_1 - x_0} \cdot (y_1 - y_0)
其中:
x_0和 x_1为已知电压值(对应SOC为 y_0 和 y_1)。
x 是当前输入的电压值。
y 是待计算的SOC值。
首先给出SOC-OCV表结构(为便于理解,文章给出了具体的SOC-OCV表结构,实际项目中,以配置化方式自动生成):
在查表算法的工程实现层面上,项目初期由于工期较紧,技术方案选择了线性遍历策略作为初始实现方案。
2.3.2.1 线性遍历策略
温度查找:线性遍历所有温度行,找到与输入温度最接近的行。
电压查找:线性遍历电压列,找到输入电压所在的区间,并进行插值计算。
复杂度分析:
温度查找(
minBy
)O(N)
电压查找(
for
循环)O(M)
总复杂度
O(N×M)
基于该方案的Spark任务总体运行时间在3小时左右,经火焰图统计,其中88%的cpu时间都在执行该策略。为提高效率,在后续的优化方案中,我们采用了二分查找的方案。
2.3.2.2 二分查找策略
温度查找:使用二分查找快速定位输入温度的相邻温度行(左边界和右边界)。
电压查找:对每个温度行,使用二分查找定位电压区间,并进行插值计算。
双温度插值:若输入温度位于两个温度行之间,按温度比例对两个温度行的 SOC 结果进行线性插值。
复杂度分析:
温度查找(二分查找)
O(logN)
电压查找(二分查找)
O(logM) * 2
总复杂度
O(logN + logM)
经过二分查找策略的优化,Spark任务最终的运行时间由遍历策略的3小时,缩减至30分钟。时间缩短83%,处理速度提升6倍。
2.3.3 SOC偏移量计算
对于输入数组 soc = [x_1,x_2,...,x_n],计算每个元素的偏差值:
ΔSOC = x_i - μ 其中 μ = \frac{1}{n}\sum^{n}_{k=1}{x_k}
需要注意,由于数据量巨大,应经量避免UDF
的使用以减少序列化开销,因此使用Spark内置函数处理:
2.3.4 SOC分箱统计
统计每一帧soc数组元素在指定区间的个数,只有全部soc元素落入至少同一个区间,才视为有效数据。没啥好说,上代码:
总结
本文针对电动汽车电池组 SOC 一致性分析的核心需求,设计并实现了基于开路电压法的 SOC 计算与一致性评估功能。通过构建三维 SOC-OCV 查表模型、引入双温度插值算法、二分查找策略以及利用 Spark 内置函数提升性能,系统实现了从原始数据预处理到 SOC 偏移量计算、分箱统计的全流程高效处理。实测结果表明,系统在保证 SOC 计算精度的同时,将 Spark 任务运行时间从 3 小时缩短至 30 分钟,显著提升了工程实用性。该系统不仅为电池健康管理提供了关键技术支撑,其设计思路还可推广至其他电化学储能系统的状态分析(挖坑),为新能源领域的智能化运维提供了可复用的解决方案。未来可进一步探索与电池阻抗谱(EIS)(挖坑)、循环寿命预测模型的融合(挖坑),构建更全面的电池健康管理体系。