共计 1412 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点:为什么需要自动化丝印检查
在 PCB 设计流程中,丝印 (Silkscreen) 的准确性直接影响后续生产环节。传统人工检查方式存在明显缺陷:

- 时间成本高:中等复杂度板卡需 30+ 分钟逐层排查
- 标准执行偏差:不同工程师对丝印间距 / 重叠的判断存在主观差异
- 漏检风险:人工疲劳导致的视觉盲区平均漏检率达 15%
技术选型:SKILL 脚本的天然优势
对比第三方检查工具,SKILL 语言在 Allegro 环境中具备不可替代性:
- 原生集成 :直接访问物理数据库(PDB) 无需格式转换
- 性能无损:避免第三方工具的数据导出 / 导入开销
- 定制灵活:可根据企业规范快速调整检查规则
核心实现:构建检查引擎
1. 设计数据接口调用
; 获取当前设计所有丝印元素
silkscreen = axlDBGetDesign()->figures
|> axlFilter('(?layer"*SILK*") && (?objType"text"|| ?objType"line"))
2. 重叠检测算法
(defun CheckSilkOverlap ()
(let ((violations nil))
; 双重循环比对所有丝印元素
(foreach fig1 silkscreen
(foreach fig2 silkscreen
(when (and (neq fig1 fig2)
(axlGeoOverlap (axlPolyFromDB fig1)
(axlPolyFromDB fig2)))
(violations = cons (list fig1 fig2) violations))))
violations))
3. 边界条件处理
- 排除器件本体范围内的丝印
- 忽略特定豁免区域(如调试标识)
- 处理特殊字符 (μΩ 等) 的包围盒计算
性能优化技巧
-
命令注册 提升交互效率
(axlCmdRegister "silkcheck" '((fn => (axlUIWPrint (CheckSilkOverlap)))) t "Run Silkscreen DRC") -
批处理模式 实现
(axlBatchSet('(foreach design (getDesignList) (axlDesignOpen design) (generateReport (CheckSilkOverlap)))))
五大常见问题解决方案
-
单位不一致:强制转换到设计单位
(setq dist (axlUIValueToFloat distance 'microns)) -
层过滤失效:使用正则表达式匹配
(axlFilter '(?layer"^.*TOP_SILK$")) -
性能瓶颈 :采用空间分区算法优化 O(n²) 复杂度
-
误报处理:建立白名单机制
-
版本兼容:检查 axlVersion 函数返回值
生产环境部署
-
编译脚本为 IL 文件
skill -i script.il -o compiled.ile -
菜单集成示例
(axlMenuInsert "Tools" "Silk Check" "silkcheck" "Run automated silkscreen inspection") -
自动化报告生成
(axlReportCreate "SilkCheck" :columns '("Location""Violation Type") :data violations)
实践效果验证
在某 6 层工业控制板项目中,应用本方案后:
– 检查耗时从 42 分钟缩短至 9 分钟
– 漏检率从 17% 降至 0.3%
– 实现与 CAM350 检查结果的 100% 一致
建议结合企业设计规范持续迭代检查规则库,后续可扩展支持阻焊层检查等衍生功能。
正文完
发表至: 未分类
近两天内
