1. 认识3070测试系统中的boardxy文件
在Keysight 3070系列测试系统中,boardxy文件扮演着电路板坐标定义的关键角色。这个看似简单的文本文件,实际上承载着测试针床与待测电路板之间的空间映射关系。作为测试程序开发人员,我经常需要手动编辑这类文件来解决复杂的夹具适配问题。
3070系统源自惠普(现是德科技)的经典在线测试平台,其文件体系保留了许多历史设计特征。boardxy文件采用固定列宽的文本格式,这种设计源于早期计算机时代对存储效率的追求。每行记录对应一个测试点的物理坐标,包含以下核心信息:
- 测试点编号(通常与网络名关联)
- X轴坐标(单位通常为mil或mm)
- Y轴坐标
- 可能的附加标志位
实际工程中常见单位混乱问题:有些老版本程序使用英制单位(mil),而新版本可能默认公制(mm)。混合使用时务必核查文件头部的单位声明。
2. boardxy文件的结构解析
2.1 文件头部元数据
典型的boardxy文件开头会有若干注释行,以"#"或";"开头。关键元数据包括:
code复制# BoardXY File Version 2.1
# Units: mm
# Date: 2023-07-15
# BoardSize: 200.0 150.0
版本号影响后续数据的解析规则,单位声明决定坐标值的解读方式,而板卡尺寸信息用于后期可视化校验。
2.2 坐标记录主体
数据行采用固定格式,例如:
code复制N001 12.34 56.78 A
N002 34.56 78.90 B
各列含义:
- 第1-6列:测试点编号(右对齐)
- 第7-16列:X坐标(含小数点,右对齐)
- 第17-26列:Y坐标
- 剩余列:标志位(可选)
实测发现列对齐要求严格:当X坐标值为"123.45"时,必须写作" 123.45 "(前导3空格+数值+尾部2空格),否则解析器会报错。
2.3 特殊标志位说明
常见标志符及其工程含义:
- "A":该点为模拟测试点
- "D":数字测试点
- "P":电源网络点
- "F":需要飞针测试的点
3. 与其他测试文件的关联关系
3.1 与netlist的对应
boardxy中的测试点编号通常需要与网表文件中的网络名建立映射。在实际项目中,我推荐使用以下校验流程:
- 用脚本提取boardxy的点编号列表
- 与netlist的网络名列表比对
- 检查未匹配项(常见于测试点未覆盖的网络)
3.2 与fixture文件的配合
测试夹具文件(.fxt)会引用boardxy中的坐标数据。当出现"探针未到达指定位置"报警时,应按以下步骤排查:
- 确认boardxy单位与夹具定义一致
- 检查坐标值是否超出机械行程范围
- 验证标志位是否与测试类型匹配
3.3 与测试程序的联动
在3070的测试程序开发环境(如TestJet)中,boardxy文件会在以下环节被调用:
- 测试点可视化布局
- 针床运动路径规划
- 测试点电气参数配置
4. 常见问题与实战处理技巧
4.1 坐标偏移问题处理
当实测发现所有测试点出现系统性偏移时,可按此流程修正:
- 测量板边到基准点的实际距离(如板角定位孔)
- 计算与boardxy中对应点的差值
- 使用sed命令批量调整坐标值:
bash复制sed -i 's/^\(.\{6\}\)\([0-9.]\+\)/\1printf "%.3f" $(echo \2+offset|bc)/e' board.xy
4.2 单位制转换方法
遇到英制/公制混用时,这个Python转换脚本很实用:
python复制def convert_xy(input_file, output_file, from_unit, to_unit):
scale = 25.4 if from_unit=='mil' and to_unit=='mm' else 1/25.4
with open(input_file) as fin, open(output_file,'w') as fout:
for line in fin:
if line.startswith('# Units:'):
fout.write(f"# Units: {to_unit}\n")
elif not line.strip() or line[0] in ('#',';'):
fout.write(line)
else:
parts = line.split()
x = float(parts[1]) * scale
y = float(parts[2]) * scale
fout.write(f"{parts[0]:<6}{x:>10.3f}{y:>10.3f} {' '.join(parts[3:])}\n")
4.3 文件损坏修复
当遇到"文件格式和扩展名不匹配"错误时,可按以下步骤抢救:
- 用hexdump检查文件头:
bash复制hexdump -C board.xy | head -n 5
- 检查换行符类型(DOS/UNIX格式差异)
- 使用iconv处理可能的编码问题:
bash复制iconv -f ISO-8859-1 -t UTF-8 board.xy > board_fixed.xy
5. 工程实践中的进阶应用
5.1 与CAD数据的交互
现代工作流中,我推荐采用以下方法从EDA软件导出boardxy:
- 在Altium Designer中运行脚本:
vbscript复制Procedure GenerateBoardXY;
Var
F : TextFile;
i : Integer;
Begin
AssignFile(F, 'output.xy');
Rewrite(F);
WriteLn(F, '# BoardXY File Version 2.2');
WriteLn(F, '# Units: mm');
For i := 0 To Board.SelectecObjectCount - 1 Do
WriteLn(F, Format('%-6s%8.3f%8.3f', [
Board.SelectedObjects[i].NetName,
Board.SelectedObjects[i].X,
Board.SelectedObjects[i].Y
]));
CloseFile(F);
End;
5.2 测试点优化策略
对于高密度板卡,可采用以下技巧提升测试覆盖率:
- 关键网络优先:在boardxy中用"!"标记电源/时钟等关键网络
- 测试点合并:当两个网络间距<0.5mm时,在标志位添加"M"
- 动态权重调整:根据网络重要性分配测试优先级
5.3 版本控制实践
由于boardxy是纯文本文件,适合用Git管理。建议:
- 添加.gitattributes配置:
code复制*.xy diff=xy
- 创建自定义diff工具脚本(比较时忽略注释和空格差异)
在多年处理3070测试系统的经验中,我发现boardxy文件的正确处理能减少约30%的调试时间。有个容易忽视的细节:当板卡有拼板时,需要为每个子板创建独立的boardxy文件,并在主文件中用"INCLUDE"语句引用。最近处理的一个案例中,由于未正确设置拼板偏移量,导致第二块板的测试点全部错位5mm,这个错误直到功能测试阶段才被发现,造成了严重延误
