常州金坛一家锂电厂的分容车间,8 台分容柜共 512 个通道,化成+分容工序连续跑 48 小时以上。上位机要干的事听起来简单——把每个通道的电压、电流、容量持续记下来——但算一下数据量就知道这不是普通的采集项目:每秒 5000+ 条记录、单工单数据量上亿条、中途断电不能丢也不能重。这篇讲我们在这套系统里的四个关键设计:数据量规划、分组采集、攒批入库、断点续采。
一、先算账:数据量决定一切架构选择
算完账,几个架构结论直接出来了:
- 逐条 INSERT 必死。SQLite 单条插入每条都要走一遍事务提交,5000 条/秒根本写不进去,必须攒批 + 事务;
- 明细数据按工单分表。一张大表堆几亿条,查询和备份都会失控;按"工单号_柜号"分表,工单结束即归档;
- 曲线回放要降采样。48 小时 10Hz 的原始曲线直接画是 170 万点,回放查询时按时间桶取最值降采样(这个手法在趋势曲线那篇里详细讲过);
- 磁盘按天估容。每条记录压缩存储前约 40 字节,全车间每天原始数据约 17GB,工控机配 1TB 固态 + 工单结束转存 NAS。
二、采集侧:通道分组轮询,别让一条总线挤 512 个通道
分容柜内部是 CAN/RS485 总线挂 64 块通道板,上位机轮询读取。如果按"每块板一次全读"串行轮询,64 块板轮一圈 2 秒,单通道实际刷新率只有 0.5Hz,远达不到 10Hz 要求。我们的做法:
- 板内批量读:一条报文读一块板的 64 通道电压 + 64 通道电流(连续寄存器区,一次读 256 字),把每板每轮的报文数从 128 条压到 2 条;
- 柜内双通道并发:每柜的总线拆成两段,两段并行轮询,单柜轮询周期压到 100ms;
- 快慢分离:电压电流按 100ms 周期进实时库;温度、SOC、工步状态按 1 秒周期进慢速表——不是所有数据都值得最高频率;
- 超时隔离:某块板连续 3 次超时,从轮询表摘除并报警,不拖累整条总线的节拍,恢复后自动加回。
三、入库侧:攒批 + 事务,SQLite 也能扛住 5000 条/秒
采集线程把记录丢进有界队列(容量 10 万条,水位超 70% 报警),入库线程每 200ms 或攒满 2000 条触发一次批量写入:
using var tx = conn.BeginTransaction(); using var cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO detail_@tbl(ts,ch,volt,curr,cap) VALUES($t,$c,$v,$i,$q)"; var pTs = cmd.CreateParameter(); pTs.ParameterName = "$t"; cmd.Parameters.Add(pTs); // ...其余参数同理,复用参数对象避免重复创建 foreach (var r in batch) { pTs.Value = r.Time; pCh.Value = r.Channel; pV.Value = r.Volt; pI.Value = r.Curr; pQ.Value = r.Cap; cmd.ExecuteNonQuery(); } tx.Commit(); // 一批一次提交,这是吞吐量的命门
配合三个 SQLite 参数:journal_mode=WAL(读写不互斥)、synchronous=NORMAL(WAL 模式下安全且快)、temp_store=MEMORY。实测这套组合在工控机(i5 + SATA SSD)上稳定写入 8000 条/秒,留了 60% 余量。
四、断点续采:掉电后不丢不重,靠工单状态机对账
化成柜掉电是锂电车间的常态事件(跳闸、检修、UPS 切换),恢复后最怕两件事:丢一段数据、或者重复一段数据导致容量算错。我们的对账机制:
| 机制 | 实现 | 作用 |
|---|---|---|
| 工单状态机 | 待开始/运行中/暂停/断电恢复/已完成,状态变更全部落库 | 上电后知道每个工单该不该续跑 |
| 通道级断点 | 每通道记录最后入库时间戳与累计容量 | 续采从断点时间继续,不重复累计 |
| 柜侧缓存回补 | 分容柜自带缓存,断电期间数据存柜内,恢复后上位机主动回读 | 断电窗口(<10分钟)数据可回补 |
| 上电对账 | 逐柜比对"柜内工步进度"与"库内最后记录",差异生成对账报告 | 不自动猜,差异交工艺员确认 |
五、数据之上的两件事:容量判定与曲线异常
数据攒齐之后,分容的业务价值才刚开始:容量判定按工单配方算实际容量与标称容量的比值,自动分档(A/B/C/降级);曲线异常检测盯三类典型缺陷——电压平台异常(微短路前兆,表现为恒流段电压持续低于同批中位数)、容量跳水(单周期容量增量突变)、温度尖峰(通道板接触不良)。这三类异常在数据里都有明确特征,规则引擎就能抓,检出即锁定通道并通知工艺员复判。
这套系统上线后,分容车间的数据完整率从人工抄表时代的"说不清"变成了 99.97%(缺失全部来自断电窗口且带标记),容量分档争议归零。高频采集项目的经验浓缩成一句话:先算数据量,再定存储粒度,入库靠攒批,断电靠对账。
