3. 追溯性数据模型设计
在PXI自动化测试系统中,测试数据追溯的核心不是“把数据存下来”,而是让任意一条测试结果都能被唯一、准确、完整地还原到“哪台产品、在哪个工位、由哪套系统、按什么程序、在什么时间、处于哪个批次”这一组确定的事实上。要做到这一点,必须在数据产生的那一刻,就把追溯字段作为测试记录的一部分同步写入,而不是事后靠日志拼接或人工补录。本节围绕追溯性数据模型的关键字段展开,说明每个字段的定义方式、取值来源、约束条件以及它们之间的关联关系。
一、追溯字段的总体结构
一条完整的PXI测试追溯记录,通常由三层字段构成:产品身份层(产品序列号、批次号、物料批次)、测试执行层(工位编号、测试程序版本、测试系统标识、操作员/班次)、时间与结果层(测试开始时间、结束时间、时间戳、测试项结果、判定结论)。这三层字段共同构成一条可追溯记录的最小集合。缺少任何一层,追溯链都会断裂:只有序列号没有工位,无法定位是哪台设备测的;只有时间没有程序版本,无法判断结果是否受测试逻辑变更影响。
设计时建议采用“主键 + 业务键 + 上下文键”的组织方式。主键用于数据库内部唯一索引,业务键用于跨系统查询,上下文键用于还原测试现场。下面这张图展示了各字段之间的归属关系与数据流向。
二、唯一标识的设计
唯一标识是追溯模型的锚点。PXI测试数据中至少需要两个层面的唯一标识:记录级唯一标识和产品级唯一标识。记录级唯一标识通常采用数据库自增主键或分布式ID(如雪花算法生成的64位整数),用于在存储层快速定位单条记录。产品级唯一标识即产品序列号(SN),它必须满足全局唯一、不可复用、不可篡改三个条件。SN的生成规则建议包含产线代码、日期码和流水号,例如“L3-20250612-000871”,其中L3表示3号产线,20250612为生产日期,000871为当日流水号。这种结构化SN不仅唯一,还能在人工排查时快速读出生产时间和产线信息。
需要注意的是,SN的唯一性约束应在数据库层面通过唯一索引强制保证,而不是仅靠程序逻辑判断。当同一SN在短时间内重复写入时,数据库应拒绝插入并触发告警,这往往意味着扫码枪重复触发或产品回流未清账。
三、时间戳的精度与一致性
时间戳字段最容易出现的问题不是“没有”,而是“不一致”。PXI测试系统中,测试程序运行在控制器上,数据写入可能经过中间件或数据库服务器,如果各环节使用本地时钟,就会出现时间偏差。建议统一采用UTC时间存储,精度到毫秒,并在记录中同时保留测试开始时间(T_start)和结束时间(T_end)。T_start应在测试程序加载完成后、第一个测试项执行前写入;T_end应在最后一个测试项判定完成后写入。两者之差即为单件测试节拍,可用于产能分析。
时间戳的另一个关键点是“写入时刻”与“测试时刻”的区分。记录时间戳(Timestamp)表示数据落库时间,而T_start/T_end表示测试实际发生时间。在追溯查询中,应以T_start为准进行时间范围过滤,避免因网络延迟或批量写入导致的时间错位。
四、批次、工位与产品序列号的关联
批次号(Lot)用于将同一生产周期内的产品归组,通常由MES系统在工单下发时生成。PXI测试程序在启动时通过接口获取当前工单的Lot号,并写入每条测试记录。工位编号(StationID)应使用固定编码而非IP地址或计算机名,例如“ST-07”表示7号测试工位。固定编码的好处是当工位硬件更换或网络重配时,追溯记录仍然稳定可查。
产品序列号与批次、工位的关系是“多对一”和“多对多”的混合:一个批次包含多个SN,一个SN可能经过多个工位(如初测、复测、终检),每个工位产生一条或多条测试记录。因此,数据模型上应允许同一SN在不同StationID下存在多条记录,但同一SN在同一StationID下的同一测试阶段应保持唯一。下面给出一个可参考的建表字段定义示例。
CREATE TABLE trace_record (
record_id BIGINT PRIMARY KEY AUTO_INCREMENT,
sn VARCHAR(32) NOT NULL,
lot VARCHAR(24) NOT NULL,
station_id VARCHAR(16) NOT NULL,
test_program VARCHAR(32) NOT NULL,
sys_id VARCHAR(24) NOT NULL,
operator_id VARCHAR(16),
t_start DATETIME(3) NOT NULL,
t_end DATETIME(3) NOT NULL,
result TINYINT NOT NULL, -- 0:Fail 1:Pass
timestamp DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE KEY uk_sn_station_stage (sn, station_id, test_program, t_start),
KEY idx_sn (sn),
KEY idx_lot (lot),
KEY idx_t_start (t_start)
);
该示例中,联合唯一键uk_sn_station_stage确保同一产品在同一工位、同一测试程序、同一开始时间下不会重复写入;idx_sn和idx_lot分别支撑按序列号和批次号的快速检索;idx_t_start支撑按时间范围的质量趋势查询。字段result使用TINYINT存储0/1,便于统计直通率。
五、字段约束与数据完整性
追溯字段的设计必须配套约束规则,否则数据模型只是“建议”而非“强制”。建议至少落实以下约束:SN非空且符合正则表达式(如^[A-Z0-9]{2}-\d{8}-\d{6}$);T_start不得晚于T_end;StationID必须存在于工位主数据表中;Lot号必须与当前工单匹配。这些约束可以在数据库层用CHECK约束或触发器实现,也可以在测试程序写入前做校验。对于PXI测试场景,更推荐在测试程序侧做第一道校验,因为此时可以立即弹出提示并暂停测试,避免不良品继续流转。
六、从字段到查询:追溯链的还原
当上述字段完整写入后,追溯查询就变成一组确定的关联操作。例如,要还原某件产品在2025年6月12日全部测试过程,可以按SN查询所有记录并按T_start排序;要分析某批次在7号工位的直通率,可以按Lot和StationID过滤后统计result字段;要排查某时间段内测试程序版本变更对结果的影响,可以按TPV分组对比。字段设计的质量,直接决定了这些查询能否在秒级完成,以及结果是否可信。
实际落地时,建议先用一张宽表承载核心追溯字段,待数据量增长后再按时间或批次分区。无论采用何种存储方案,唯一标识、时间戳、批次、工位、产品序列号这五类字段都必须作为不可省略的必填项,并在数据产生源头完成采集与校验。