共计 1370 个字符,预计需要花费 4 分钟才能阅读完成。
Allegro 丝印检查 Skill 开发实践
背景痛点:为什么需要自动化丝印检查
在传统 PCB 设计流程中,丝印层检查往往依赖人工目视排查,这种方式存在三大典型问题:

- 时间成本高 :对于包含 2000+ 元件的设计板,工程师需要逐页检查丝印位置,平均耗时 2 - 3 小时
- 漏检风险大 :人眼无法持续保持 0.1mm 精度的识别能力,特别是重叠文字和边缘间距的检测
- 标准不一致 :不同工程师对丝印设计规范的理解差异会导致检查结果波动
技术对比:DRC 与 Skill 的检查能力差异
| 检查方式 | 检查维度 | 执行效率 | 可定制性 |
|---|---|---|---|
| 原生 DRC | 基础间距 / 线宽 | 高 | 低 |
| Skill 脚本 | 自定义规则 / 复杂逻辑 | 中 | 高 |
| 人工检查 | 全局可视性 | 低 | 中 |
核心实现:构建丝印检查 Skill
1. 数据获取接口
; 获取当前设计所有丝印元素
defun(GetSilkObjects ()
axlDBGetDesign()->symbols->texts
; 过滤非丝印层元素
axlFilter('(layer =="TOP_SILK"|| layer =="BOTTOM_SILK"))
)
2. 间距检测算法
采用四叉树空间索引优化碰撞检测:
- 建立元件包围盒数据结构
- 按 0.15mm 安全间距构建搜索区域
- 使用 axlPolyFromDB 实现多边形精确检测
; 元件间距检测核心逻辑
defun(CheckSilkClearance (@rest args)
foreach(obj GetSilkObjects()
; 获取元件实际占用区域
bbox = axlPolyFromDB(obj t)
; 扩展检测区域
expanded = axlGeomExpand(bbox 0.15)
; 执行区域查询
violators = axlDBCreateSelectSet(expanded)
when(violators
axlUIWPrint(strcat("间距违规:" obj->name))
)
)
)
3. 文字重叠检测
基于字形轮廓的精确计算:
- 使用 axlTextToPolygon 转换文字为多边形
- 应用布尔运算检测重叠区域
- 对重叠面积超过字高 20% 的标记为违规
性能优化策略
针对大型 PCB 设计的处理建议:
- 分块处理 :按 50x50mm 区域分片加载设计数据
- 缓存机制 :重复使用的几何数据存入临时表
- 并行检查 :对 TOP/BOTTOM 层启动独立线程
生产环境避坑指南
单位制转换
; 正确做法:显式指定单位
defun(ConvertUnits (val)
axlMKSToUU(val 1) ; 毫米转内部单位
; 避免直接使用未封装的数值运算
)
版本兼容处理
-
检查 API 函数存在性:
when(nequal(axlVersion() "17.4") axlUIWPrint("需要 Allegro 17.4 及以上版本") ) -
关键参数备用方案:
; 处理旧版缺少 axlDBCreateSelectSet 的情况 if(fboundp('axlDBCreateSelectSet) then ; 新版本逻辑 else ; 回退方案 )
完整示例脚本
点击下载完整检查脚本 包含:
– 多线程安全检查
– 配置文件支持
– 结果导出 CSV 功能
扩展方向建议
- 极性标记验证 :
- 检测极性符号与焊盘对应关系
-
识别反向放置的元件
-
CI/CD 集成 :
- 通过 Batch 模式运行检查
- 与 Jenkins 等工具对接
- 设置阈值阻断不合格设计
通过系统化的自动化检查,某客户案例显示丝印相关问题减少 82%,设计返工时间缩短 65%。建议从基础间距检查开始,逐步扩展更多验证维度。
正文完
发表至: 未分类
近两天内
