Python自动化PCB检查:批量识别Altium文件中的走线宽度违规项
PCB设计完成后,走线宽度是否符合工艺规则是制板前的硬门槛——电源线要求20mil以上、信号线8mil、差分对5mil,任何一个违规都可能导致短路或断路。人工肉眼检查几十上百条走线既费时又容易漏,而Python配合Altium文件解析库可以一键扫描整个板子,把违规项列成表格。下面以开源库py-altium为例,展示如何批量识别Altium Designer的.PcbDoc文件中的走线宽度违规。
一、环境准备
首先安装py-altium库(支持读取Altium二进制格式):
pip install py-altium
该库能解析走线、过孔、焊盘等元素,并提供几何信息和属性。
二、单文件检查脚本
以下脚本加载一个Altium PCB文件,遍历所有走线(Track),与预设的最小/最大宽度对比,输出违规项。
import altium
from pathlib import Path
# 规则定义:不同网络的宽度要求(单位:mil)
WIDTH_RULES = {
"POWER": {"min": 20, "max": 50},
"SIGNAL": {"min": 8, "max": 15},
"GND": {"min": 20, "max": 100},
"DIFF_PAIR": {"min": 5, "max": 8},
}
def check_width(file_path):
board = altium.load(str(file_path))
violations = []
for track in board.tracks:
net_name = track.net.name if track.net else "UNKNOWN"
rule = None
# 根据网络名前缀匹配规则
for key, limits in WIDTH_RULES.items():
if key in net_name.upper():
rule = limits
break
if rule is None:
continue # 未匹配规则的网络不检查
width_mil = track.width * 1000 # 假设库返回的单位是inch
if width_mil < rule["min"] or width_mil > rule["max"]:
violations.append({
"net": net_name,
"width_mil": round(width_mil, 2),
"layer": track.layer.name,
"location": f"({track.x:.2f}, {track.y:.2f})",
"rule": f"{rule['min']}-{rule['max']}mil"
})
return violations
# 使用示例
violations = check_width("demo.PcbDoc")
print(f"发现 {len(violations)} 处违规:")
for v in violations:
print(f" 网络 {v['net']} 宽度 {v['width_mil']}mil (规则 {v['rule']}) "
f"位于 {v['layer']} {v['location']}")
三、批量处理与报告生成
实际项目中往往有多个PCB文件需要检查,可以遍历文件夹,将所有违规汇总到一个CSV报告中。
import csv, os
def batch_check(folder, output_csv):
all_violations = []
for f in Path(folder).glob("*.PcbDoc"):
try:
viol = check_width(f)
for v in viol:
v["file"] = f.name
all_violations.extend(viol)
except Exception as e:
print(f"处理 {f.name} 失败: {e}")
with open(output_csv, "w", newline="") as csvfile:
fieldnames = ["file", "net", "width_mil", "layer", "location", "rule"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(all_violations)
print(f"违规报告已保存至 {output_csv}")
batch_check("./pcb_files", "width_violations.csv")
四、注意事项
库的兼容性:py-altium目前支持Altium 20–23版本,较旧的格式可能解析失败。建议先将Altium文件另存为最新格式。
规则定义:实际生产中应根据工艺能力和设计要求设定宽度范围,本例仅为演示。
备份文件:脚本只读不写,不会修改原始PCB文件,但建议在副本上运行以防意外。
性能:大型PCB(数千条走线)解析耗时约几秒,批量处理时建议加进度提示。
五、扩展思路
除了走线宽度,还可以检查过孔孔径、间距、铜皮间隙等规则。py-altium还支持读取过孔、焊盘、敷铜等元素,只需扩展相应的检查函数即可。结合Jenkins或GitLab CI,可以将该脚本嵌入到设计流程中,每次提交PCB文件后自动检查并邮件通知违规项。





