线束测试系统的时序一致性设计
多工位并行测试最容易被忽略的问题不是单点精度,而是时序一致性。当 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 窗口内完成采样。做法是用一个主时钟广播触发信号,各工位在收到信号后立即锁存,而不是各自定时。这样即使某个工位处理延迟,采到的仍是同一时刻的物理量。
- 触发信号通过硬件同步线分发,不走网络
- 各工位本地缓存 3 个周期的数据,防止突发丢帧
- 聚合时按硬件时间戳排序,而不是到达顺序
结果聚合的判定
单工位超时不应该直接判失败。我们的策略是:超时工位标记为 RETRY,整批结果延迟 200ms 后二次聚合。实测下来误判率从 1.2% 降到 0.04%。
关键点在于幂等——重试不能产生重复记录,也不能覆盖已确认的结果。用硬件时间戳做唯一键解决了这个问题。