← 返回列表

线束测试系统的时序一致性设计

2026-10-18 · 实时系统

多工位并行测试最容易被忽略的问题不是单点精度,而是时序一致性。当 8 个工位同时采样时,任何一处时钟漂移都会在结果聚合阶段被放大成判定偏差。

时钟源的选择

我们最终放弃了依赖系统 clock() 的方案。Linux 下 CLOCK_MONOTONIC 虽然不受 NTP 调整影响,但在虚拟化环境下仍会出现跳变。改用硬件时间戳后,采样触发到数据入库的抖动从 ±8ms 降到 ±0.3ms。

struct timespec ts;
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
uint64_t ns = ts.tv_sec * 1000000000ULL + ts.tv_nsec;

采样窗口的对齐

测试序列要求所有工位在同一个 2ms 窗口内完成采样。做法是用一个主时钟广播触发信号,各工位在收到信号后立即锁存,而不是各自定时。这样即使某个工位处理延迟,采到的仍是同一时刻的物理量。

结果聚合的判定

单工位超时不应该直接判失败。我们的策略是:超时工位标记为 RETRY,整批结果延迟 200ms 后二次聚合。实测下来误判率从 1.2% 降到 0.04%。

关键点在于幂等——重试不能产生重复记录,也不能覆盖已确认的结果。用硬件时间戳做唯一键解决了这个问题。