当前位置:首页 > EDA > 电子设计自动化
[导读]从原理图到 Gerber,传统流程是:画完原理图→手动导出网表→开 PCB→导网表→布局→布线→手动跑 DRC→手动点“输出 Gerber”→填钻孔文件参数→点确定。每次改一版,重复点十几下鼠标,不仅慢而且容易漏层。下面以 KiCad 8 为例,展示如何用一套 Python 脚本把“原理图 → 网表 → PCB 导入 → DRC → Gerber + 钻孔”串成一条命令。Allegro / Altium 也有类似方案,原理相通。

从原理图到 Gerber,传统流程是:画完原理图→手动导出网表→开 PCB→导网表→布局→布线→手动跑 DRC→手动点“输出 Gerber”→填钻孔文件参数→点确定。每次改一版,重复点十几下鼠标,不仅慢而且容易漏层。下面以 KiCad 8 为例,展示如何用一套 Python 脚本把“原理图 → 网表 → PCB 导入 → DRC → Gerber + 钻孔”串成一条命令。Allegro / Altium 也有类似方案,原理相通。

一、KiCad 8 的 CLI 武器:kicad-cli

KiCad 8 将大部分 GUI 操作暴露给了命令行工具 kicad-cli,无需打开图形界面即可完成:

# 从原理图导出网表(用于 PCB 导入)

kicad-cli sch export netlist --format kicad_sexp project.kicad_sch -o project.net

# 更新 PCB 中的网表(需先有 .kicad_pcb 文件)

kicad-cli pcb update board project.kicad_pcb -n project.net

# 运行 DRC

kicad-cli pcb drc project.kicad_pcb --output drc.rpt

# 导出 Gerber(全部层,含 edge cuts)

kicad-cli pcb export gerbers project.kicad_pcb --layers F.Cu,B.Cu,F.SilkS,B.SilkS,F.Mask,B.Mask,Edge.Cuts --output gerber/

# 导出钻孔文件(Excellon 格式)

kicad-cli pcb export drill project.kicad_pcb --format excellon --output gerber/

二、Python 串联:一键流水线

上面的命令一条条敲仍然繁琐,用 Python 的 subprocess 包装成一个函数,再配上参数和日志:

import subprocess, sys, os

def run_kicad_cli(cmd_args, desc=""):

   print(f"[{desc}] Running: {' '.join(cmd_args)}")

   result = subprocess.run(cmd_args, capture_output=True, text=True)

   if result.returncode != 0:

       print(f"ERROR: {result.stderr}")

       sys.exit(1)

   return result.stdout

def build_all(sch_file, pcb_file, output_dir="gerber"):

   # 1. 导出网表

   net_file = "project.net"

   run_kicad_cli(["kicad-cli", "sch", "export", "netlist",

                  "--format", "kicad_sexp", sch_file, "-o", net_file],

                 desc="Export netlist")

   # 2. 更新 PCB 网表(如果 PCB 已存在)

   if os.path.exists(pcb_file):

       run_kicad_cli(["kicad-cli", "pcb", "update", "board",

                      pcb_file, "-n", net_file],

                     desc="Update PCB netlist")

   # 3. DRC 检查

   drc_report = run_kicad_cli(["kicad-cli", "pcb", "drc",

                               pcb_file, "--output", "drc.rpt"],

                              desc="Run DRC")

   # 如果 DRC 有错误则中止

   if "errors: 0" not in open("drc.rpt").read():

       print("DRC errors found! Check drc.rpt")

       sys.exit(1)

   # 4. 创建输出目录

   os.makedirs(output_dir, exist_ok=True)

   # 5. 导出 Gerber(指定常用层)

   layers = "F.Cu,B.Cu,F.SilkS,B.SilkS,F.Mask,B.Mask,Edge.Cuts"

   run_kicad_cli(["kicad-cli", "pcb", "export", "gerbers",

                  pcb_file, "--layers", layers,

                  "--output", output_dir],

                 desc="Export Gerbers")

   # 6. 导出钻孔文件

   run_kicad_cli(["kicad-cli", "pcb", "export", "drill",

                  pcb_file, "--format", "excellon",

                  "--output", output_dir],

                 desc="Export drills")

   print(f"\n✅ All done! Gerber files in '{output_dir}'")

if __name__ == "__main__":

   build_all("project.kicad_sch", "project.kicad_pcb")

三、进阶:集成 BOM 与 PDF 原理图

除了 Gerber,生产还需要 BOM 和原理图 PDF,顺手加入:

# 导出 BOM(CSV 格式,含参考位号和值)

run_kicad_cli(["kicad-cli", "sch", "export", "bom",

              sch_file, "--output", "bom.csv"])

# 导出原理图 PDF

run_kicad_cli(["kicad-cli", "sch", "export", "pdf",

              sch_file, "--output", "schematic.pdf"])

四、注意事项

• KiCad 版本:kicad-cli 从 KiCad 7 开始提供,8 增加了更多选项。旧版本只能用 Python API(pcbnew 模块)或手动调用插件。

• 路径处理:脚本中所有路径建议用绝对路径或相对于项目根目录,避免 kicad-cli 工作目录混淆。

• DRC 严格性:生产级建议在 DRC 后增加人工复核,脚本只拦截明显错误(短路、未连接等)。

• 多板项目:如果有多个 PCB 变体,可以在脚本中加入参数选择不同 .kicad_pcb 文件。

五、效果

把这套脚本加到 Git hooks 或 CI 里,每次提交代码后自动跑一遍:原理图改完 → 提交 → CI 自动生成 Gerber + BOM + DRC 报告,邮件通知结果。从此告别“忘了导出某层”、“钻孔格式不对”的低级失误。

EDA 自动化的核心不是炫技,是把重复性操作交给机器,让工程师专注于设计和审查。KiCad 的 CLI 只是一个起点,Allegro 的 SKILL、Altium 的 DelphiScript 都能实现类似流水线。关键是先搭框架,再逐步完善异常处理,最终让“一键出 Gerber”成为团队习惯。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭