ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

BMS算法全解析:从SOC估算到均衡控制与机器学习落地

BMS算法全解析:从SOC估算到均衡控制与机器学习落地 做BMS这行久了会发现一个现象你搜“BMS”的时候关联词里除了电池管理系统、BMS原理图、BMS测试、BMS开发这些还会冒出一堆算法名词——冒泡排序、贪心算法、KMP、PID算法、粒子群算法、DBSCAN、深度学习算法。乍一看像是计算机课程目录混进了电池圈但实际干过的人都知道BMS本身就是一套复杂的算法系统只是很多人的注意力被硬件采样、通信协议和结构设计带走了。2026年9月7号这天我正好做完一轮系统性的BMS算法追踪从底层状态估算到控制策略再到机器学习在电池管理里的真实落地情况完整过了一遍。这篇文章就是这轮追踪的记录适合刚接触BMS的软件工程师、想系统化理解电池管理算法的研发人员以及正被SOC估算和均衡策略折磨的同行。1. 先盘家底一个BMS里到底跑着多少种算法很多人以为BMS算法就是算个SOC剩余电量顶多再加个SOH健康状态。真把整车或储能项目的BMS拆开看会发现从电芯数据进来到决策输出每一个环节都跑着算法而且这些算法之间的依赖关系非常明确。1.1 从数据流看BMS的算法分层我习惯把BMS算法体系按数据流方向分成六层每一层干的事完全不同。层次典型任务常见算法/方法感知层电压、电流、温度采样与调理NTC查表、滑动平均滤波、一阶低通、卡尔曼平滑状态估算层SOC、SOH、SOP、SOE估算安时积分、OCV查表、扩展卡尔曼滤波、递推最小二乘决策控制层均衡调度、热管理、预充控制、功率限制排序、贪心、动态规划、PID、滞环控制、模型预测诊断安全层过压、过温、绝缘故障、异常电芯识别阈值检测、残差分析、DBSCAN聚类、LOF异常因子通信与上层CAN报文解析、OTA升级、数据上报协议解析、CRC校验、加密算法、云端机器学习研发支撑测试、标定、数据回放上位机、HIL测试、影子模式、代码版本管理这六层合在一起才是完整的BMS算法链路。做算法的人不能只盯着自己的那一层比如写SOC算法的如果不理解感知层的滤波策略就会把噪声当成真实信号写均衡控制的如果不理解状态估算层的置信度就可能拿一个跳变的SOC去触发均衡最后整个系统来回震荡。1.2 为什么热搜词里会混进排序、KMP和Prim有些算法热词看起来和BMS毫无关系比如冒泡排序、KMP字符串匹配、Prim最小生成树。但实际写BMS代码的时候会发现这些基础算法是底层工具箱隔三差五就会用到。排序算法均衡策略里经常要做一件事从几十节电芯里找电压最高的几节、压差最大的几节这就是在跑排序。充电均衡场景下我还要对所有电芯按SOC排序决定释放哪些能量。工程上不会真去写冒泡排序直接用快速排序或堆排序但思想是同一个。二分查找OCV-SOC关系表通常是一张很长的非线性查表单独用一个线性表存。跑在MCU上如果每个控制周期都线性遍历浪费CPU时间。用二分查找几十个表项只需要几次比较就能定位区间。KMP字符串匹配这个一般不直接出现在BMS主逻辑里但电池包售后诊断、日志系统、故障码解析经常要做关键字匹配比如从CAN原始报文中提取某个模式或者从大数据日志里筛特定故障序列KMP的思想在这里能派上用场。Prim/最小生成树和BMS的直接关系偏弱但在电池包线束拓扑优化、主动均衡网络设计里本质是在一个带权图中找最优连接路径图论算法是这个场景的基础。我刻意把这些基础算法放在一起讲是因为很多刚入行的工程师有个误区觉得算法就是高大上的AI看不上排序和查找。实际上BMS这种对实时性、确定性要求极高的嵌入式系统最常用的恰恰是这些基础算法。它们不花哨但稳定可靠。2. SOC估算为什么难从安时积分到卡尔曼滤波的实战取舍SOC估算是BMS算法里最出名的难题也是争议最大的部分。网上方案一大堆从最简单的安时积分到卡尔曼滤波、粒子滤波再到神经网络但落到量产项目上没有一个方案是银弹。2.1 三种主流SOC估算法的原理与缺陷先看最经典的三种方法理清楚它们各自的原理和局限后面组合策略的时候才有的放矢。安时积分法也叫库仑计数法。核心公式是SOC(t) SOC(0) - (1/Cn) × ∫ η × I dt其中Cn是额定容量η是库仑效率I是电流。原理就是把电流对时间积分算出用了多少电量。这个方法实现简单实时性好但它有两个致命弱点一是电流传感器存在零漂和噪声积分误差会不断累积二是它不知道自己从哪里来如果初始SOC不准后面全都不准。实车上一不小心就跑偏好几个百分点需要靠别的办法随时校正。开路电压法OCV法。原理是电池静置足够长时间后端电压与SOC之间存在近似一一对应的关系查表就能得到SOC。这个方法在实验室里很准但放到车上就尴尬行驶过程中电池端电压包含极化电压和欧姆压降根本不是开路电压而且磷酸铁锂电池的OCV曲线在中段非常平缓一点点电压测量误差就会导致SOC误差放大好几倍。所以OCV法只能做静置校正确认用不能作为动态主算法。模型法以扩展卡尔曼滤波EKF为代表。它的思路是把电池当成一个动态系统用一个等效电路模型描述它然后通过实时测量的电压电流去“估计”内部状态包括SOC。它不像安时积分那样只做累加而是每一拍都在用观测值修正估计值所以对初始误差和传感器噪声都有一定的容忍能力。缺点是算法复杂、计算量大而且非常依赖模型参数准不准。三种方法的对比我整理成了一张表方法原理优点缺点适用场景安时积分电流积分简单、实时、算力要求低误差累积、需定期校正所有BMS的基底算法OCV查表电压-SOC静置关系稳态精度高需要静置、动态工况失效充电结束后、深度静置时EKF/UKF等效电路模型状态估计动态精度高、抗噪性好算力需求高、依赖模型参数动态工况下的主估算2.2 基于模型的方法EKF与模型参数辨识EKF是传统无迹卡尔曼滤波和粒子滤波之间性价比最高的一个方案也是目前量产BMS里最常见的“先进算法”。它的基本状态方程用的是电池的一阶或二阶RC等效电路模型。一阶RC模型的状态量通常是SOC和极化电压观测方程是端电压等于OCV减去欧姆压降再减去极化电压。EKF每次迭代分两步先根据上一拍的状态和电流做预测再用实测端电压做校正。因为电池模型是非线性的EKF的核心操作就是在每一步把非线性函数在当前状态附近做一阶泰勒展开得到一个近似的线性系统再套用标准卡尔曼滤波公式。但这里有个关键前提模型参数必须准。R0、R1、C1这些参数会随温度、SOC、老化程度变化标定不准的话EKF的估计结果反而不如老老实实的安时积分。工程上常见的做法是离线用HPPC混合脉冲功率特性测试标定初始参数再在运行中用递推最小二乘RLS在线更新某些慢变参数比如欧姆内阻。2.3 我实际用的融合策略量产项目上我几乎没见过单靠某一种方法跑SOC的基本都是融合策略。我最近项目里的一套做法可以供参考基础积分器安时积分作为每毫秒都在跑的基底算法保证实时性。静置/充电校正充电完成时强制置为100%深度静置时间足够后用OCV表校正一次SOC。动态校正行驶或充放电工况下用EKF输出的SOC来校正安时积分的漂移校正幅度通过一个置信度系数平滑过渡防止SOC跳变。温度与老化修正不同温度下电池可用容量不同SOC积分器里的额定容量要按温度修正SOH下降时也要同步修正容量基准。这里特别强调一点修正SOC时绝对不能直接把推算值硬切过去否则仪表盘上的SOC会在1秒内跳好几个点用户直接被吓到BMS诊断逻辑也可能误报。要把修正量分配到一段时间内平滑完成比如限制SOC变化率为每秒不超过某个千分值。3. NTC温度传感器算法没那么简单采样、标定与多传感器融合温度算法在很多BMS资料里被一句话带过好像只是“读个ADC转成温度就行”。真调过车的人都知道温度不准会把SOC、SOP、热管理全部带偏是整个系统里最容易被低估的一环。3.1 从NTC阻值到温度的换算链路NTC热敏电阻的阻值随温度升高而降低常用的换算模型有B值方程和Steinhart-Hart方程。B值方程形式简单R(T) R25 × exp( B × (1/T - 1/T25) )其中T是开尔文温度R25是25℃时的标称阻值B是材料常数。但B值方程在中低温区误差较小宽温度范围下精度不足。如果产品要求高精度用Steinhart-Hart三参数方程更靠谱代价是多几次乘除和开方运算。量产BMS里更常见的做法是查表法。因为MCU的浮点运算能力通常有限而且每片传感器还有个体差异直接在量产前把每一路ADC值对应的温度做成一张表代码里用二分查找定位区间再做线性插值。查表法有个细节要注意NTC阻值随温度变化是非线性的低温区变化剧烈表点要加密高温区变化平缓表点可以稀疏。这样既保证精度又不浪费存储空间。3.2 滤波与响应速度的平衡温度信号的带宽很低但实际采集到的原始ADC值一点都不干净。PWM加热电流、继电器吸合瞬间、BMS自身的开关电源噪声都会耦合到温度采样回路上。所以温度算法必须滤波但滤波不能过度否则过温保护的响应就慢了。我常用的滤波组合是“3到5点滑动平均 一阶低通”滑动平均滤掉周期性的开关噪声一阶低通把残余高频抖动压掉。一阶低通的系数α一般取0.1到0.2温度响应时间能控制在秒级。测温周期太长或窗口太大过温保护会慢半拍这对安全是致命的。滤波方法适用场景响应延迟实现复杂度滑动平均3~5点抑制周期性噪声低极低一阶低通平滑高频抖动可控低中值滤波剔除毛刺和野值中等低卡尔曼平滑高精度场景较高高3.3 多传感器融合与故障剔除电池包内温度分布非常不均匀电芯中部和极柱、模组表面、冷却板入口出口温度都不一样。算法上通常做最大温度、最小温度、平均温度、最大温差的统计作为热管理和SOP估算的输入。但这套逻辑有个前提传感器本身得是可信的。实际运行中温度传感器可能接触不良、线束松动、ADC通道漂移甚至完全断线。我处理这类问题用的是残差法计算每个传感器的读数与相邻位置传感器读数的差值如果某个点持续显著偏离就标记为可疑传感器暂时把它从热管理决策中剔除同时上报故障码。更复杂一点可以用聚类的思路把“位置相邻且温度读数相近”的传感器归为一类孤立点大概率就是异常传感器或局部热点。DBSCAN这类聚类算法在云端离线分析时很有用但在MCU上实时跑成本偏高我通常只把残差法放进固件聚类放到大数据平台做售后分析。还有一个特别容易被忽略的坑NTC的自热效应。流过NTC的激励电流会使电阻自身发热读数偏高尤其是在导热设计不良的采样板上。标定的时候必须带着实际线束、实际ADC配置一起标不能只标一颗裸NTC否则装车后温度偏差可能大得离谱。4. 均衡控制里的算法思维排序、贪心、动态规划与那些坑均衡是BMS里最“算法化”的控制模块因为它直接处理一组电芯的差异天然就需要排序、挑选、分配资源这些操作。很多搜“冒泡排序”“贪心算法”的人搜着搜着发现跟均衡联系上了就是这个原因。4.1 被动均衡与主动均衡对算法的约束均衡分两类。被动均衡是给高SOC电芯并联一个电阻把多余的能量以热量形式耗散掉。结构简单、成本低但均衡速度慢而且均衡过程会产生热量需要热管理联动。主动均衡则是用储能元件电感/电容/变压器把能量从高SOC电芯搬到低SOC电芯效率高但硬件复杂、控制难度大。这两类均衡对算法的约束完全不同。被动均衡的约束主要是“功率上限”和“发热量”算法要决定的是对哪几节电芯放电、放多久主动均衡的约束多了“能量转移路径”算法不仅要决定哪些电芯参与还要决定能量从哪里来、到哪里去复杂度立马上升一个量级。4.2 均衡调度怎么用上排序与贪心几乎所有均衡策略的第一步都是找差异。我先对所有电芯的端电压或SOC排序算出最大最小值。如果压差超过阈值比如10mV就进入均衡流程。这里的核心策略是贪心每一轮只处理最极端的那部分电芯。比如被动均衡每轮挑出电压最高的那节或几节电芯放电5分钟结束后重新采样、重新排序、重新挑选。贪心不保证全局最优但它实时性好逻辑简单而且硬件上每一路均衡的独立控制就那么多贪心策略跟这个约束天然匹配。这也是为什么搜“贪心算法”会跟BMS关联的原因——均衡调度本质上就是在有限通道、有限时间内反复选择当前最该处理的电芯。4.3 动态规划优化主动均衡能量转移主动均衡如果规模比较大比如一个模组里几十节电芯都支持双向能量转移贪心策略就不够了。因为能量转移是有损耗的每一次搬移都有成本直接“从最高搬到最低”的路径未必是最优路径。这时候可以把整个模组的均衡建模成一个最优化问题目标是均衡完成后所有电芯SOC都收敛到平均值附近约束是每路均衡通道的功率上限和能量守恒然后求解最优的转移序列。工程上常用动态规划或线性规划来做这个求解。把每一节电芯的SOC偏差看作状态把每次转移量看作决策逐步递推求解总损耗最小的方案。这个思路在实验室仿真里效果非常好但实车上因为电池参数的不确定性、均衡效率的漂移效果会打折扣。我一般建议先做仿真验证确认收益大于复杂度再上车。4.4 均衡算法最容易踩的坑均衡判断到底用电压还是用SOC这是新手最容易搞错的地方。端电压受内阻、极化、温度影响很大同一节电芯在充电中和大电流放电时端电压能差几十毫伏。如果直接用端电压做均衡判断很容易出现“均衡了老半天其实均衡错了对象”的情况。正确做法是尽量在静置状态或小电流充电末期做均衡判断此时极化小端电压更接近OCV才更能反映SOC差异。另一个坑是均衡震荡。阈值设得太小比如1mV就会频繁进出均衡状态每次均衡刚启动又被撤销MOS管反复开关白白损耗寿命。我通常设置一个回滞区间进入均衡的阈值是10mV退出均衡的阈值是5mV并且要求压差持续几个周期才真正切换状态。这样能有效避免震荡。均衡产生的热量也必须纳入考虑。被动均衡时均衡电阻长时间工作会让局部温度上升如果和NTC传感器挨得近会影响温度读数进而影响SOC和SOP。我一般在均衡策略里加一个温度保护联动均衡期间监测该位置的温升超过设定值就暂停均衡等温度回落再继续。5. 热管理与功率控制PID、滞环和模型预测的取舍电池对温度极其敏感冷了充不进电、容量减小热了加速老化、甚至有热失控风险。热管理和功率控制是BMS里控制算法最集中的地方。5.1 为什么纯PID在电池热管理中并不总好用很多人一听到控制就想到PID但在电池热管理上纯PID会遇到两个实际问题执行器大滞后以及积分饱和。电池热管理系统的执行器通常是冷却水泵、风扇、加热膜、压缩机等。从控制器输出到温度真正发生变化中间隔着冷却液管路、冷板、电芯热容滞后能达到几十秒甚至几分钟。对于大滞后系统单纯调PID参数很难同时满足响应速度和稳定性。另一个问题是积分饱和如果长时间温度误差很大PID积分项会累积到很大值等温度接近目标时积分项还在输出导致温度过冲。量产BMS里更常见的做法不是纯PID而是“滞环 分级控制”或者“滞环 PID微调”。简单说温度高于目标值且偏差很大时直接开满冷却接近目标值时切换到PID微调低于目标值一定范围后直接关闭冷却。滞环区间的设计非常关键能避免执行器频繁启停延长水泵和继电器寿命。我在项目里用的是一个二维查表根据温度误差和温升速率查目标功率而不是让PID在线整定。5.2 预充控制与接触器吸合时序预充是BMS里的一个“控制状态机”问题本质是防浪涌。电池包刚接入负载时母线电容完全没电如果不加限制直接闭合主接触器瞬间电流可能达到几千安培直接烧蚀触点、击穿电容。预充电路一般是一条预充电阻 预充接触器算法逻辑是先闭合预充接触器电池通过预充电阻给母线电容充电同时监测母线电压。当母线电压上升到电池电压的90%到95%时说明电容充满程度已经足够此时闭合主接触器断开预充接触器完成切换。如果在这个过程里母线电压上升过慢或者预充时间超过设定上限就说明预充回路可能异常需要断开所有接触器并上报故障。这个流程看起来简单但我在实际项目里踩过坑预充完成阈值设置得太高比如95%在低温下电池极化电压高母线电压可能永远到不了阈值导致预充超时误报。后来我把阈值改成“母线电压与电池电压的压差小于某个绝对值比如5V”同时增加了超时保护才稳定下来。5.3 SOP峰值功率估算与查表法SOPState of Power峰值功率是BMS向整车或储能变流器输出的关键信息告诉上层系统“当前电池允许多大功率充放”。这个值不是想给就给必须同时满足几个约束不能超过电流限制不能导致电芯端电压超出上下限不能让温度继续恶化。工程上的做法是联合查表和实时计算。首先要根据SOC、温度查一张最大持续电流表得到持续时间维度上的电流上限。再根据当前端电压和欧姆内阻计算瞬时峰值功率比如简化的P_max ≈ V_min × (OCV(SOC, T) - V_min) / R0其中V_min是最低允许电压OCV是当前开路电压R0是欧姆内阻。但注意这只是瞬时值如果是持续30秒或10秒的脉冲功率还要加上极化电压的增长所以实际SOP往往是一张“SOP-时间”阶梯表比如10秒峰值、30秒峰值、持续值。所有约束取交集取最小的那个功率输出保证任何一项都不超限。5.4 MPC的入场条件模型预测控制MPC在学术论文里被捧得很高但在量产BMS里引入得非常谨慎。原因是MPC要基于模型预测未来一段时间的系统状态然后滚动优化控制序列计算量远大于PID而且非常依赖热模型的精度。如果模型不准MPC的预测就是空中楼阁。不过在带导航预测的整车热管理系统里MPC确实有发挥空间。比如知道前方10分钟会有一段长上坡或高速路段功率需求会增大发热量也会增大MPC可以提前加大冷却功率把电池温度压在一个更有利的起点上。这种“预知未来”的能力是PID给不了的。前提是热模型标定得足够好并且有足够的算力。我个人的经验是如果项目没有明确的预测性热管理需求先用滞环PID把基础做好收益远高于直接上MPC。MPC是锦上添花不是救火队员。6. 数据驱动的BMS算法机器学习入场但不喧宾夺主到2026年机器学习和大模型概念已经渗透到电池行业但BMS毕竟安全关键度高数据驱动算法落地的节奏比很多人想象中慢得多。6.1 特征工程从电压温度序列到IC/DV曲线很多人以为机器学习落地电池管理就是把电压电流温度直接丢给模型。真做起来会发现特征工程比模型选择重要得多。电压、电流、温度的时间序列当然是最原始的特征但电池专家会在此基础上构造物理意义更强的特征。比如增量容量曲线IC曲线它是dq/dV对V作图用充电数据里的微小电压变化对应的电量增量来反映电极相变过程对老化模式识别非常有效。还有差值容量曲线DV曲线对寿命预测和内阻变化很敏感。把这些曲线特征和传统统计特征均值、方差、偏度组合起来喂给模型效果比直接丢原始时序好一个量级。6.2 异常检测与寿命预测DBSCAN、LOF与回归模型异常电芯识别是数据驱动在BMS里最成熟的落地场景之一。每节电芯的特征向量可以这样构造电压相对平均值的偏差、内阻偏离标称的程度、温度偏离相邻电芯的程度、SOC-OCV一致性指标等。正常电芯的特征在特征空间里会聚成一团异常电芯则离群。DBSCAN聚类就是干这个的。它不需要预先指定簇数量能把密度高的区域自动识别成簇孤立点标记为异常。但DBSCAN的超参数ε邻域半径和MinPts最小样本数对结果影响很大需要在标定数据集上仔细调。LOF和隔离森林也可以作为补充尤其是样本量少、异常形态多样的时候。寿命预测RUL这边回归模型和LSTM/Transformer都被试过。难点不在模型本身而是带标签的数据极其稀缺——你得有一批电芯从出厂跑到退役记录完整生命周期数据。所以落地时先从小目标做起比如用内阻增长或容量衰减做SOH回归比直接预测剩余寿命靠谱得多。6.3 强化学习在热管理策略上的探索PPO这类强化学习算法在电池热管理策略优化上属于前沿探索。思路是把热管理建模成马尔可夫决策过程状态是电池温度、SOC、环境温度、功率需求动作是冷却或加热档位奖励函数是温度惩罚加能耗惩罚通过大量仿真训练出一套策略让智能体学会在满足温度约束的前提下尽量省电。仿真里效果确实不错但实车落地非常谨慎。强化学习策略是黑盒而电池是安全关键部件在线探索性策略一旦出问题就是热失控级别的风险。所以目前的套路是“影子模式”训练好的策略在后台和传统策略并行运行只输出结果不执行动作跑几个月真实数据验证稳定性后再考虑小范围试放。我始终认为强化学习在BMS里的角色是提供策略优化的参考方向而不是直接替代经过安全认证的控制逻辑。6.4 边缘部署与影子模式的现实约束数据驱动模型部署在哪儿也是个问题。车载BMS主控MCU的算力普遍很有限跑大型神经网络不现实。目前更常见的部署位置是车机域控制器或云端车机负责实时推理云端负责离线训练和批量分析。轻量分类网络比如MaxxVITv2-Nano这类视觉分类模型更适合用电池产线质检场景——极片缺陷识别、模组装配异常检测、焊缝质量判断而不是实时BMS控制。这是很多人容易混淆的点视觉AI是电池制造质量的一大助力但它和BMS实时状态估算完全是两条赛道。做BMS算法的人可以关注它但别指望它来解决SOC和均衡问题。7. 算法研发的硬功夫代码管理、上位机调试与回归测试算法写得好不好一半在思路一半在研发流程。BMS算法一旦上线改动的代价非常大所以代码管理和测试验证的成熟度往往决定一个团队能走多远。7.1 算法代码的版本管理与评审流程BMS算法代码必须用Git管理这是底线。分支策略可以用Git Flow主分支保持可发布状态开发分支做功能集成每个算法变更单独开feature分支合并前必须走代码评审。我自己最看重的一点是算法参数和代码强制分离。标定参数放进配置文件由标定工具统一管理不能硬编码在源码里。否则会出现一种很尴尬的情况代码版本没变但行为变了因为有人偷偷改了参数没记录。跑一段时间后出了问题连回退都不知道该回退到哪个参数版本。每次打tag不光要打代码tag还要把配套的参数文件、标定记录、测试报告一起归档。代码评审的重点不是语法风格而是算法变更的边界。评审人必须确认这次改动影响了哪些工况原来的极端情况有没有回归相关诊断有没有联动我在评审里最怕看到“顺手把阈值从10改成8”这种描述没有关联分析没有回归记录这就是在埋雷。7.2 用上位机与开源工具逼近真实信号BMS算法调试离不开CAN工具和上位机。网上能搜到不少“BMS通用上位机”工具包它们在快速查看CAN报文、监控SOC和电压这些常规量时够用但真做算法验证时我更倾向于用自己写的脚本或订制的上位机。原因很简单通用上位机能看到的是“算法结果”看不到“算法内部状态”。我在调试EKF的时候需要同时观测状态协方差、增益矩阵、新息序列这些中间量通常不在CAN报文里必须靠内部变量读取工具才能拿到。开源社区也有一些很有意思的玩法比如用ESP32给BMS做显示器通过多协议解析同时读取CAN、Modbus、I2C数据把单体电压、SOC、温度实时显示出来。这类DIY工具用来快速验证传感器接线、初看算法输出趋势很方便但别拿它做量产参数标定。它的采样同步性、精度、稳定性达不到正式工具的要求更适合做开发阶段的辅助验证。7.3 影子模式与离线回放才是不翻车的保障BMS算法上线最怕什么怕新算法在测试环境里跑得好好的一上路就出幺蛾子。所以我一直坚持两个流程离线回放和影子模式。离线回放是把真实采集的工况数据路谱、充电曲线、环境温度变化记录重新输入到新算法里对比新旧算法的输出差异。这个过程可以反复跑不受实车条件约束能快速暴露问题。影子模式则是在实车上跑新算法和旧算法并行运行新算法只输出结果但不执行控制后台对比两者在SOC、SOP、均衡判断上的偏差。只有影子模式跑了足够里程、偏差统计都在可接受范围内才允许切换新算法上线。每次算法变更我都会要求跑一套“算法体检清单”代码格式检查、编译告警清零、单元测试覆盖率达标、参数文件一致性确认、标定版本tag归档、HIL用例全部通过、离线回放SOC误差在目标范围内、影子模式偏差统计合格。这一套下来才算真正具备发布条件。这次追踪下来我的体会是BMS算法没有银弹传统方法依然是基石数据驱动是工具集不是万能药。真正决定系统质量的是对每一个细节的理解以及对研发流程的敬畏。排序、查表、PID、卡尔曼、聚类这些算法单独拿出来都不神秘但把它们在一个安全关键的系统里有条理地组合起来并且保证每一个环节都可验证、可追溯这才是BMS算法工程师真正的硬功夫。
返回列表