一、Gerber 是什么?
Gerber 文件是 PCB(印刷电路板)制造行业的标准图形文件格式。
它的本质:
🔥 一种"光绘机绘图指令语言"
本质是:一系列绘图命令
它不是矢量图(虽然结果是图形),
而是"如何绘制图形的指令集"。
二、Gerber 标准
目前主流标准:
✅ RS-274X(现代标准)
这是现在 PCB 工厂通用格式。
特点:
- 自包含 aperture 定义
- 支持多种图元
- 支持极性(正片/负片)
- 支持宏
❌ RS-274D(老标准)
需要外部 aperture 表文件
现在基本淘汰
三、Gerber 文件本质结构
Gerber 是:
ASCII 文本文件
例如:
%FSLAX24Y24*%
%MOIN*%
%ADD10C,0.010*%
D10*
X100000Y200000D02*
X150000Y200000D01*
M02*
四、Gerber 的核心组成
从解析角度,Gerber 文件包含 5 大块:
1️⃣ 文件头参数
例如:
%FSLAX24Y24*%
%MOIN*%
FSLAX24Y24
解释:
| 参数 | 含义 |
|---|---|
| FS | Format Spec |
| L | Leading zero suppression |
| A | Absolute |
| X24 | X 坐标 2 整数 4 小数 |
| Y24 | Y 坐标 2 整数 4 小数 |
这意味着:
X123456 => 12.3456
单位
%MOIN*% => inch
%MOMM*% => mm
⚠️ 你后面必须转换单位
2️⃣ Aperture 定义(非常重要)
%ADD10C,0.010*%
%ADD11R,0.050X0.030*%
解释:
| 语法 | 含义 |
|---|---|
| ADD10 | 定义 D10 |
| C | Circle |
| R | Rectangle |
| 0.010 | 直径 |
等价于:
定义一个画笔
3️⃣ 选择 Aperture
D10*
表示:
当前使用 D10 这个画笔
4️⃣ 绘图指令(核心)
Gerber 本质就是这 3 种:
| 指令 | 含义 |
|---|---|
| D01 | draw(画线) |
| D02 | move(移动) |
| D03 | flash(打孔/盖章) |
示例
X100000Y200000D02* // 移动
X150000Y200000D01* // 画线
相当于:
js
moveTo(10,20)
lineTo(15,20)
5️⃣ 文件结束
M02*
五、Gerber 支持的图形
RS-274X 支持:
| 类型 | 说明 |
|---|---|
| 线段 | 直线 |
| 圆弧 | G02 / G03 |
| Flash | 打一个 aperture |
| Polygon | G36 / G37 区域 |
圆弧示例
G02*
X100000Y100000I5000J0D01*
这类似 SVG:
G2 X Y I J
六、Gerber 图层类型
PCB 一块板通常包含多个 Gerber 文件:
| 文件 | 含义 |
|---|---|
| .gtl | top copper |
| .gbl | bottom copper |
| .gto | silkscreen |
| .gts | solder mask |
| .gko | board outline |
| .drl | drill file |
七、Drill 文件(Excellon)
钻孔文件通常是:
T01C0.800
X10000Y20000
它不是 Gerber
而是 Excellon 格式
本质也是坐标指令
八、Gerber 的图形逻辑(重点)
⚠️ Gerber 不是"路径文件"
它是:
用画笔扫出来的结果
例如:
一个 0.1mm 线宽的线段
其实是一个长方形区域
如果你直接转 SVG path,
你必须决定:
- 还原成中心线?
- 还是转成填充区域?
tracespace 默认输出:
👉 填充区域 SVG
九、Gerber 内部如何解析?
如果你要自己写解析器,流程是:
Step 1:预处理
- 删除注释
- 拆分 *
- 解析 %...% 参数块
Step 2:解析 Header
- 单位
- 坐标格式
- 极性
Step 3:构建 Aperture 表
js
{
10: { type: 'circle', diameter: 0.01 },
11: { type: 'rect', w: 0.05, h: 0.03 }
}
Step 4:状态机解析绘图
需要维护:
js
{
currentX,
currentY,
currentAperture,
interpolationMode, // linear / arc
}
Step 5:构建几何图形
你要决定:
- 输出 path
- 输出 polygon
- 输出 boolean union 结果
这就是 tracespace 在做的事情。
十、Gerber 与 SVG 的本质区别
| Gerber | SVG |
|---|---|
| 指令语言 | 结果描述 |
| 基于画笔 | 基于路径 |
| 有单位 | px |
| 有极性 | 没有 |
十一、Gerber 与 GCode 的关系
有趣的是:
Gerber 和 GCode 本质非常像:
| Gerber | GCode |
|---|---|
| D01 | G1 |
| D02 | G0 |
| G02 | G2 |
| G03 | G3 |
但:
Gerber 是绘图
GCode 是刀具路径
十二、你现在要注意的关键问题
你必须思考:
1️⃣ 是否保留线宽?
如果不保留,你会丢失铜箔宽度
2️⃣ Drill 如何处理?
必须转为:
G0 X Y
G81 Z-...
3️⃣ 单位如何统一?
Gerber 可能 inch
SVG 是 px
十三、相同用途的文件格式
PCB 制造常见格式:
| 格式 | 用途 |
|---|---|
| Gerber | 铜层、丝印 |
| Excellon | 钻孔 |
| ODB++ | 整套制造数据 |
| IPC-2581 | 新一代标准 |
| DXF | 有些厂支持 |
十四、如果你要写自己的简化解析器
你可以只支持:
- 线段
- 圆弧
- Flash
- 不支持宏
就能解析 80% Gerber 文件
十五、总结一句话
Gerber 本质是:
用"画笔"扫出来的图形描述语言
而不是:
中心线矢量路径文件