国标有自己的校时流程:平台发请求,设备回时间,把时钟对齐。 校的不是「几分钟的误差」,是「几个月的偏差」——设备断电重启后时间会回到出厂值。
前面九个流程全都要用到时间:检索靠时间段、报警靠时间戳、日志靠排序。 时间一歪,全乱。 所以校时看着最不起眼,实际是所有历史功能的地基。
一、校的是「几个月」不是「几秒」
很多人以为校时是「对一下秒」,实际不是。 设备断电重启后,时钟会回到出厂值,差的往往不是几分钟,是几个月甚至几年。 所以校时的动作不是「微调」,是「重设」:平台把当前时间整个给设备,设备直接设过去。 这也解释了一个现象: 新装的设备,录像检索总是查不到东西—— 因为它的时间和平台差了好几年,你查「今天」,它那儿还是「几年前」。 排查第一步永远是「看设备时间」,不是看录像配置。
二、晶振漂移:慢性的那种
时间设对了还会慢慢歪,因为晶振有偏差。常见的晶振偏差是百万分之一百,也就是 100 ppm。 一天漂八秒多,一年漂五十多分钟。 这个量级听着不多,但足以让「上午十点的录像」偏到九点多。 所以校时必须是定期的,不能只做一次。 周期取多长,取决于你要多准:每天一次是常见水平,偏差约八秒。 要求高的场景(交通违法、金融场所)会把周期缩到小时级, 代价是报文变多——但校时报文只有一两百字节,多几百倍也无所谓。 所以「校时频率」这件事,成本几乎全在实现上,不在带宽上。
三、校时的副作用
时间不是「只能往前」的,所以校时会跳。 往前跳,录像的时间段会重叠;往后跳,会出现空洞。 这两种情况在检索结果里表现得很具体:同一时刻出现两条记录,或者某段时间查不到任何记录。 看到这种现象,先别怀疑设备,先查校时日志——十有八九是刚校过时。 工程上的处理办法是「校时分两步」: 偏差小于阈值就平滑调整(每秒多走一点),偏差大就直接设过去。 这样小漂移不会造成空洞,大偏差才允许跳。
四、动手 Demo:设备时间差了多久,校时校的是什么
拿本机时间当「平台时间」,和一个假设的设备时间比一比,看偏差有多大。 再算 100 ppm 的晶振漂移在不同校时周期下会积多少。
t0 = time.time()
bw = 1700000000 # 假设设备报的时间戳
print("偏差", bw - t0, "秒,约 %.1f 天" % (abs(bw - t0) / 86400.0))
print("一天漂 %.1f 秒" % (86400 * 100 / 1e6))
print("一年漂 %.1f 分钟" % (86400 * 365 * 100 / 1e6 / 60))
实跑输出:
--------------------------------------------------------------------
设备时间差了多久,校时校的是什么
--------------------------------------------------------------------
**国标有自己的校时流程**:**平台发 `TimeSyncReq`,设备回 `TimeSync`,把时间对齐。**
**为什么必须有它**:**录像检索靠时间段、报警靠时间戳、日志靠时间排序**——**时间一歪,全乱。**
平台当前时间戳:1792864444
假设设备报的时间戳:1700000000
偏差:-92864444 秒,约 1074.8 天
**这个偏差量级不是夸张**:
**设备断电重启后时间会回到出厂值,差的往往不是几分钟,是几个月甚至几年。**
**所以「校时」不是「微调」,是「重设」。**
**晶振漂移是另一回事**:
假设晶振偏差 100 ppm(百万分之一百)
一天漂 8.6 秒
一年漂 52.6 分钟
**一天差八秒多,看着不多**——**但一年差五十多分钟,检索「上午十点的录像」就会偏到九点多。**
**所以校时必须是定期的,不能只做一次。**
**定期校时的周期怎么定**:
周期 最大偏差 适用
-------------------------------------------------------
**每小时** **约 0.4 秒** **要求高,报文多**
**每天** **约 8.6 秒** **常用**
**每周** **约 60 秒** **够用但不推荐**
**从不** **无上限** **必然出事**
**第二行「每天一次、偏差约 8.6 秒」是大多数项目的实际水平**,
**这个精度对「按分钟检索录像」够用,对「精确到秒的事件回查」不够。**
**所以做交通违法、金融场所这类项目,会把周期缩到小时级。**
**校时还有个副作用要注意**:**时间往前跳,录像的时间段会出现重叠;时间往后跳,会出现空洞。**
**这两种情况在检索结果里表现为「同一时刻两条记录」或「某段没有记录」**,
**看到别急着怀疑设备,先查校时日志。**
偏差那一行会算出「一千多天」,这不是夸张——设备断电回到出厂值就是这个量级。 所以校时是「重设」,不是「微调」。 「一天八点六秒、一年五十二分钟」是 100 ppm 的账。 这个数说明「一天校一次」刚好够用:最大偏差八秒,比一年不校的五十多分钟好太多。 那张周期表里最有意思的是「每小时」那行: 偏差缩到零点四秒,成本是多发几百个心跳级的报文——几乎等于免费。 所以「要不要更频繁地校时」这个问题,答案通常是「要」。 最后一段的「校时分两步」是工程细节:小偏差平滑调、大偏差直接跳, 这样既不产生录像空洞,也不会让时间永远歪着。
30 秒实验
- 算一下:100 ppm 一天漂多少秒?(8.6 秒)
- 想一下:新装设备查不到录像,第一步查什么?(设备时间)
- 想一下:时间往后跳会在录像里留下什么?(空洞)
常见误区
- 以为「校时只是对秒」。 设备断电后差的是几个月,是重设。
- 以为「校时一次就够」。 晶振会漂,必须定期校。
- 以为「校时没有副作用」。 时间跳会造成录像重叠或空洞。
自测三问(点开对答案)
1. 设备断电重启后时间会怎样? —— **回到出厂值**,可能差几个月甚至几年。 2. 100 ppm 的晶振一天漂多少? —— **约 8.6 秒**;一年约五十二分钟。 3. 校时为什么会造成录像空洞? —— **时间往后跳时,中间那段时刻从来没被经历过**,**录像自然没有覆盖**。下一节讲订阅:一次登记长期推送,但过期了它不告诉你。
- ☐ (本节完,下一节 10.08.11 订阅和通知)