排查过数据问题的人都有体会:有些"数据错乱"根子不在采集逻辑,而在时钟。两台设备对同一事件记录差了几分钟,报表按时间一合并,因果关系全乱;更隐蔽的是某台设备时钟慢了几个月,曲线数据跑到奇怪的时间段。这篇文章专门讲多设备时钟同步的工程做法。
先看时钟不一致会造成什么
时钟问题在三种场景下最致命:跨设备追溯时,同一件产品在 A 设备的加工时间比 B 设备还晚,时序逻辑自相矛盾;断网缓存补传时,数据按设备自己的时间戳排队,时钟差几分钟,补回来的历史数据位置就是错的;证书和通信安全直接对时间敏感,设备时间偏差过大会导致 OPC UA 证书判定过期、连接失败。
很多项目系统上线后才发现时钟问题,那时历史数据已经脏了。所以时钟同步要在调试第一步就做,而不是等数据对不上再回头。
NTP 原理一句话讲清
NTP(网络时间协议)做的事就是客户端向时间服务器发一个带时间戳的请求,服务器返回自己的时间,客户端用四个时间戳算出两件事:网络延迟和双方时钟偏差,然后把本地时钟按偏差校正。单次测量有误差,NTP 会多次采样过滤掉抖动大的结果,逐级分层(Stratum 层级)同步,越靠近权威时钟源层级越高。
对工业现场,毫秒级精度完全够用,没必要追求复杂配置。内网里有一台可靠的 NTP 服务器,所有设备统一指向它,比每台设备各自去公网对时稳定得多——公网对时依赖外网链路,而工控网往往根本不允许出外网。
现场对时具体怎么配
典型做法是分两级:车间/机房放一台本地 NTP 服务器(可以用域控、专用对时装置,或一台配置好的服务器),它自己通过 GPS 模块或受控的公网源校准;车间里的上位机、网关、HMI、PLC 全部指向这台本地服务器。
- Windows:改 W32Time 的 NTPServer 列表和同步模式,服务设自动,域环境会自动按域层级对时;
- PLC/触摸屏:主流品牌都有 NTP 客户端功能,在网络配置里填服务器地址和同步间隔即可,老设备没有 NTP 的,由上位机或网关定时用协议写入时钟;
- 边缘网关:网关做 NTP 客户端的同时,给下挂的老设备当"对时中继",一条指令批量校时。
注意对时方式的选择:设备运行中一次性把时钟跳变几分钟,可能造成正在记录的曲线出现时间倒流或空洞。对时频率高、偏差小,时钟被缓慢修正(slew 模式渐进调整)比直接跳变好;老旧设备只能硬写时钟的,安排在换班无生产时做首次对时。
时间戳到底以谁为准
即使做了对时,工程上仍要定一条规矩:入库时间戳统一在一个地方生成,不混用多设备时钟。推荐两种成熟口径:
- 以采集服务器/网关时间为准:数据采上来的瞬间由网关打时间戳,设备时钟只用于设备自身逻辑。优点是时钟源单一、不会各说各话,适合大多数监控;
- 以设备源时间戳为准再校验:高频曲线、事件顺序记录(SOE)需要设备真实发生时刻,用设备时间戳,但网关对其做合理性校验——与网关时间偏差超过阈值(比如 5 秒)就标记该数据可疑并报警。
断网缓存补传尤其依赖这条:缓存数据必须带设备产生时刻和网关接收时刻两个时间,补传时按产生时刻归位,用接收时刻判断链路状态。
时钟漂移监测和异常时间戳识别
对时不是配一次就一劳永逸。设备晶体会漂移,断电重启后时钟可能复位,NTP 服务本身也可能挂。建议加一层持续监测:
- 网关每次通信顺带比对设备时钟与自身偏差,偏差超阈值记录并报警,趋势上升说明电池没电或晶振老化;
- 入库前校验时间戳合理性:不能晚于当前时间太多(未来时间)、不能早于系统上线时间、相邻数据时间不能倒流,命中规则的数据单独标记,不直接混进报表;
- 服务器和 NTP 源的对时状态纳入日常巡检,同步失败要有提示;
- 带掉电保持时钟的设备,定期更换主板电池,时钟每次上电归零是典型的电池失效信号。
落地建议
- 设备进场联网的第一件事就是统一对时,再开始采集调试,顺序别反;
- 内网自建 NTP 源,所有设备指向同一个,不要各自出公网;
- 时间戳生成口径写进系统设计文档,现场所有人执行同一套;
- 历史数据迁移、服务器更换后,第一件事核对新机器时区和时间——时区错(用了 UTC 或别的时区)和时钟不准是两类不同故障,都要查。
总结一句:时钟问题的特点是平时无感、出事难查,前期半小时的配置能省掉后期几天的数据清洗。需要内网 NTP 搭建或异常时间数据清洗的参考脚本,可以找赢式科技,电话 15001875806、邮箱 ys_soft@163.com。
