从光绘图到可编辑PCB:一场不靠原厂资料的“破译”实战
你有没有遇到过这样的场景?
一块服役十年的工业控制板突然停产,厂商拒绝提供设计文件;
某竞品模块性能优异,但原理图和BOM完全黑盒;
或是手头只有一套Gerber压缩包,而项目deadline就在下周——你得改版、仿真、替换国产器件,甚至做EMC整改。
这时候,“把Gerber转成PCB文件”就不是一句技术口号,而是卡在喉咙里的那根刺:它必须能用,且必须快。
但现实很骨感:Gerber不是设计源码,它是给光绘机看的“施工快照”。没有网络、没有元件属性、没有电气约束,甚至连哪一层是顶层铜箔都可能被标错。想把它变回Altium里双击就能改焊盘、拖动就能重布线的.PcbDoc?这中间隔着的不是格式转换器,而是一整套逆向工程逻辑链。
下面我将带你走一遍真正落地的全流程——不讲虚的“AI+CV自动识别”,不堆术语,只讲我们每天在实验室里调参、修bug、推翻重来时踩过的坑、验证过的解法,以及最终能放进量产流程里的那一套方法。
层叠对齐:先让所有图“站在同一张纸上”
很多工程师第一步就想导入Gerber进EDA软件自动识别,结果发现丝印文字歪了0.3mm、阻焊开窗比焊盘小一圈、钻孔中心漂移半格……这不是软件不行,是你还没让它们“对齐”。
Gerber层之间本无坐标系绑定。每层都是独立绘制的二维平面,单位可能是毫米也可能是英寸,极性可能是正片(画啥有啥)也可能是负片(画啥没啥),甚至同一块板上不同层用的D-code宏定义都不一致。
所以真正的起点,是层叠解析——不是读文件,而是“读懂图纸意图”。
关键三步,缺一不可:
语义归类不能只看后缀
board.GTL大概率是顶层铜箔,但有些工厂会把阻焊层误标为.GTO(丝印层)。更稳妥的做法是读取%TF.FileFunction*字段——这是RS-274X标准里明确规定的功能标签,比如%TF.FileFunction,Top,Copper,Regular*才是铁证。如果这个字段缺失?那就结合钻孔层+铜层轮廓交叉验证:阻焊层必然包裹所有焊盘外缘,且开窗区域与铜层焊盘一一对应。单位校准必须精确到微米
MOIN(英寸)和MOMM(毫米)指令决定全局缩放。但更要命的是:有些老Gerber导出时用了INCH单位却漏写MOIN,工具默认按毫米解析,结果整个板子缩小25.4倍。我们在脚本里强制加了一行校验:python if not hasattr(g, 'units') or g.units == 0: # 检查是否存在明显非整数坐标(如1.27, 2.54) if any(abs(p[0] - round(p[0])) > 0.1 for p in sample_points): g.units = 25.4 # 默认按英寸处