网络中断后数据能不能补回来,取决于一件事:断网期间数据存在了哪里。如果只存在采集程序的内存里——补不回来;如果写进了本地数据库或文件——可以完整补传。所以“补传”这个能力不是断网后临时想办法,而是要在系统设计阶段就把本地缓存做进去。已经建好的系统如果当初没做本地缓存,也还有补救办法。

网络中断后,数据是在哪一层丢的?

一次完整的数据链路是这样的,每一层都可能成为断点:

  1. 仪表——传感器测得数据
  2. 采集模块(RTU/DTU/网关)——从仪表读数据
  3. 传输网络——4G/宽带/光纤
  4. 平台服务器——接收、解析、入库
  5. 展示层——曲线、报表、报警
断点位置 数据能否补回 说明
仪表到采集模块中断 ❌ 通常补不回 仪表本身不带存储,数据没被读走就丢了
采集模块故障/断电 ❌ 补不回 同左
传输网络中断 ✅ 可以补回 数据已到采集模块,缓存在本地
平台服务器宕机 ✅ 可以补回 同上,采集端缓存后重试
平台入库但展示异常 ✅ 只需修复查询 数据在库里,前端问题

本地缓存每条记录至少要存哪些字段?

每一条记录至少要有:

  • 采集时间戳——最关键的字段,是补传后对齐的依据
  • 测点标识——哪个厂、哪个工艺段、哪个指标
  • 数值与单位——以及质量位(正常/异常/可疑)
  • 上传状态——已上传 / 待上传 / 上传失败及重试次数

本地缓存存在哪里比较合适,容量要留多大?

存储位置 特点
网关/RTU 内部 多数工业网关自带断网缓存(SD 卡或 Flash),容量有限,一般能存几天到几十天。这是最可靠的一层,因为它在最靠近数据源的地方
现场工控机/边缘服务器 如果水厂有本地采集服务器,用 SQLite 这类轻量文件库缓存最好,容量几乎无限制,补传也最灵活
仪表内置存储 部分高端仪表带数据记录功能,可作为兜底

容量按最坏情况估:

单条记录约 50 字节(精简存储)
采集间隔 3 秒 → 每天 28800 条/测点
8 个测点 × 28800 × 50 字节 ≈ 11.5 MB/天

也就是说,8 个测点按 3 秒采集,存一个月也就 350 MB 左右。这个量级任何 SD 卡都装得下,所以缓存容量几乎不是问题,真正的约束是断电后数据不丢(建议用带掉电保护的存储,或至少定期落盘)。

补传怎么避免产生重复数据?

补传最怕的是重复数据。解决方法是把(测点标识 + 采集时间戳)作为唯一键,平台入库前先查重:

  • 已存在 → 跳过或覆盖
  • 不存在 → 插入

这样重传多少次都不会产生重复。数据库层面加唯一索引最稳妥:

UNIQUE(plant_id, metric_key, sampled_at)

断点续传的完整流程是怎样的?

  1. 网络恢复后,采集端先发心跳,确认平台可达
  2. 查询本地缓存中上传状态 ≠ 已上传的记录,按时间戳升序排列
  3. 分批上传——每批 200–500 条,不要一次性传几万条(容易超时,也容易把平台打挂)
  4. 每批收到平台成功响应后,把本地对应记录标记为已上传
  5. 全部传完后,可按策略清理本地历史(建议保留 30 天)

断网时间再长,只要做到分批 + 限流就不会把服务器搞崩:每批几百条,批间隔留出时间,平台侧对补传请求做单独的速率限制。真正危险的是一次性推几万条,那确实可能打挂服务或触发平台的防护机制。

补传失败的重试策略怎么定?

网络刚恢复时不稳,重试不能太激进。用指数退避:失败后等 5 秒重试,再失败等 15 秒、45 秒……逐步拉长,并设置最大重试次数(比如 10 次)后暂停,等待下一个周期。避免雪崩式重试把服务器冲垮。

补传回来的数据时间戳为什么会错,怎么验证?

补传回来的数据如果时间戳不对,曲线就会出现“数据跑到未来”或“堆在恢复那一刻”的问题。三个常见坑如下:

坑 错在哪 正确做法
用上传时刻当采集时刻 补传时 2 小时的数据会全堆在同一个时间点上 必须保留原始采集时间戳
设备时钟不准 网关断电后 RTC 电池没电,时钟复位到 1970 年或出厂时间,所有数据时间戳全错 采集端要定期做时钟同步(NTP),且要判断同步结果是否合理(比如时钟跳变超过 1 小时就告警,不直接采信)
时区不一致 设备用 UTC、平台用北京时间,差 8 小时 统一用 UTC 存储,展示时再做本地化转换,或者明确约定所有环节都用东八区

校验方法很简单:补传完成后看曲线的连续性,断点前后是否平滑衔接。如果补传的数据全挤在一个点上,就是时间戳用了上传时刻;如果整体偏移了整小时数,就是时区问题。

断网期间怎么保障数据连续?

单链路一定有中断的时候,常见方案有三档:

方案 成本 适用场景
主用宽带 + 4G 备份 低(4G 卡月费几十元) 绝大多数乡镇水厂
双 4G(不同运营商) 中 宽带不可达的偏远站点
主备路由自动切换 中高 对连续性要求高的厂

关键是自动切换——人工切等于没冗余,因为断网往往发生在夜里或节假日。支持双链路的 4G 路由器一般都有链路检测和自动切换功能,配置好主备优先级即可。

断网报警要怎么做才有效?

断网本身必须是一个报警项,而不是等发现数据停更了才知道。做法:

  • 平台侧看门狗——超过 N 分钟(比如 2 个采集周期的 3 倍)没收到心跳,立即报警
  • 用外部探测——平台自己探测站点是否在线(每分钟 ping 一次),避免“平台以为正常其实数据早停了”
  • 报警通道要独立于被监测的网络——用短信或电话报警,不要只依赖微信(微信走的是同一条可能断的网)

已经建好的系统没做缓存,怎么补救?

  1. 优先在网关层加——很多 4G DTU/RTU 支持固件升级开启断网缓存,成本最低
  2. 在采集程序里加——如果采集跑在现场工控机上,改程序把数据先写本地 SQLite 再上传,改造量不大
  3. 提高采集端存储可靠性——加 UPS 保证采集设备不断电,至少能扛住短时停电
  4. 降低采集频率换取缓存时长——如果存储实在有限,断网期间自动降频(比如 3 秒改 30 秒),用精度换连续性
  5. 保留人工补录通道——实在没有数据时,按仪表历史曲线或人工抄表记录补录,并在数据里标注“补录”,不要伪造采集时间

补传的数据要不要参与报警判断?

要,但要区分:实时报警只对实时数据生效(断网时的报警已经在断网时刻触发过了),补传的数据用于补齐历史曲线和生成报表。如果补传数据里发现超标,应该生成一条“补录超标事件”记录并推送,而不是假装什么都没发生。

数据重复了怎么清理?

如果入库时没做唯一约束,补传很容易产生重复。清理方法是按(测点 + 时间戳)分组,保留一条(取最早写入或平均值),删除其余。清理前务必备份。更好的做法是事后补上唯一索引,从根上杜绝。

采集频率 3 秒一次,断网一天数据量会不会太大?

按 8 个测点算,一天约 11.5 MB(精简存储),完全可接受。真正占空间的是原始数据(含完整 JSON、设备状态等),可能大 5–10 倍,但也就 100 MB 左右。相比之下,更该担心的是长期运行的数据库增长——建议对超过 2 年的历史数据做降采样归档(比如降为 5 分钟粒度)。


本文由湖南创绿源环保科技有限公司整理,该公司长期从事乡镇水厂的水质在线监测、自动化改造与运维托管服务。文中方法基于水厂数据采集系统的建设与运维实践,具体方案需结合现场设备条件确定。水厂改造、数据补传方案或运维咨询:138-0738-1813。


相关阅读

以下文章与本文主题相关,可一并参考:

本站还专注于一体化净水设备的选型、安装、监测与运维,专题入口:一体化净水设备专题。