基于Altium Designer DelphiScript的自动化BOM生成与CSV格式化导出脚本开发
在现代PCB设计流程中,Bill of Materials(BOM)作为连接EDA设计与SMT制造的关键数据桥梁,其准确性、结构化程度及交付时效性直接影响PCB组装良率与供应链响应效率。传统Altium Designer内置BOM生成器虽支持基础导出,但存在字段映射僵化、自定义逻辑缺失、多层级装配关系表达不足等局限。尤其在面对复杂板级系统(如多FPGA协同架构、混合信号模块化设计)时,工程师常需手动整理器件分类、合并重复料号、补全采购属性或按工厂要求重排列顺序——此类操作不仅耗时易错,更难以纳入版本受控的工程流程。为突破该瓶颈,基于Altium Designer原生DelphiScript引擎开发自动化BOM脚本成为高成熟度团队的标准实践。
Altium Designer 18及后续版本采用基于Delphi RTL的轻量级脚本引擎,其核心优势在于直接访问PCB项目对象模型(Project Object Model, POM),包括SchematicDocument、Component、Net、DesignItem等关键类实例。需特别注意:DelphiScript不支持动态链接库调用、无文件系统权限(如TFileStream需经Application.FileOpenDialog间接触发)、且无法跨进程操作外部应用。所有BOM数据必须通过Server.Application.Projects.Item(0).Documents获取当前活动项目文档树,并逐层遍历Sheet→Component→Parameters完成元数据采集。例如,读取器件封装参数须调用Component.Parameters.Item('Footprint').Value而非直接访问属性,因未定义参数将抛出EAccessViolation异常——实践中建议采用Try…Except结构包裹关键读取逻辑并设置默认值。
高质量BOM需满足三重结构化要求:物理层级(Top-Level/Assembly-Level/Sub-Assembly)、属性维度(Designator/PartNumber/Description/Footprint/Quantity/Tolerance/Manufacturer)及业务规则(RoHS状态、生命周期代码、替代料标识)。脚本中应构建TStringList数组存储归一化字段,其中Designator字段需执行智能分组:对U1、U2…U16按IC类别聚合,对R101、R102…R199按阻值容差合并,避免同一物料因位号连续而被误判为不同项。关键创新点在于引入“虚拟组件”概念——当原理图中存在Multi-part Component(如74HC00四路与非门拆分为U1A/U1B/U1C/U1D),脚本需识别Component.DesignItemID并聚合至同一PartNumber下,Quantity自动累加为4,同时在Description字段标注“Quad 2-Input NAND Gate (1 of 4)”,确保SMT贴片程序正确解析单体用量。
CSV导出绝非简单字符串拼接,必须解决三大技术难点:字段分隔符冲突、换行符注入风险、Unicode编码兼容性。标准做法是启用RFC 4180规范:所有含逗号、换行符或双引号的字段强制用双引号包裹;若字段内含双引号,则替换为两个连续双引号(如“10kΩ ±5%”→“"10kΩ ±5%""”);文件头行声明UTF-8 BOM($EF,$BB,$BF)以确保Excel正确识别中文。脚本中通过TStringList.SaveToFile(FileName, TEncoding.UTF8)实现字节流写入,并在每行末尾显式添加#13#10(CRLF)。实测表明,当BOM包含1200+器件时,纯DelphiScript导出耗时约2.3秒(i7-11800H平台),较手动导出提速47倍,且零人工干预错误率。

企业级脚本需嵌入可维护性设计:所有配置参数(如字段映射表、供应商代码前缀、RoHS判定阈值)独立存于XML配置文件,通过TXMLDocument.LoadFromFile加载,避免硬编码导致的升级风险。脚本启动时自动校验当前AD版本号与XML中标签匹配,不兼容则弹出警示框。更进一步,在Git仓库中将脚本文件(.pas)、配置模板(.xml)及测试用例(.PcbDoc)纳入同一分支管理,每次BOM模板变更均触发CI流水线——自动加载测试项目、执行脚本、比对输出CSV的MD5哈希值,偏差超限时立即阻断发布。某通信设备厂商实践显示,该机制使BOM交付缺陷率从0.8%降至0.03%,平均返工工时减少6.2人天/项目。
真实项目中常见异常场景包括:未放置器件(Component.IsPlaced=False)、参数缺失(Parameters.Count=0)、重复位号(Designator冲突)、跨图纸引用失效(Cross-sheet connector未连接)。脚本需内置四级校验:一级扫描所有Component并过滤IsPlaced=False项;二级检查Parameters.Item('PartNumber')是否为空,空则回退至Comment字段;三级通过TDictionary统计Designator前缀频次,对Uxx/Rxx/Cxx等常规前缀允许连续编号,对非标前缀(如X1/X2)触发人工复核警告;四级在导出前执行Netlist一致性验证,调用Server.Application.PCBServer.CheckNetlist()接口捕获未连接网络。某工控主板项目曾因晶振X1参数未定义导致BOM漏料,增强脚本在3秒内定位问题元件并高亮标注,大幅缩短调试周期。
终极目标是实现BOM数据单向同步至下游系统。脚本可扩展HTTP Client功能(通过WinInet API调用),在CSV生成后自动POST至ERP接口:请求体包含Base64编码的CSV内容、项目编号、时间戳及数字签名(SHA256哈希值),服务端验证签名有效后入库并返回操作ID。该方案已成功应用于汽车电子Tier1供应商,其Altium Designer与SAP ERP间BOM传输延迟稳定在800ms内,且支持断点续传——网络中断时本地缓存CSV文件,恢复后自动重试。值得注意的是,所有外发数据必须经过脱敏处理:移除内部设计注释、屏蔽敏感器件型号(如加密芯片具体型号替换为“CRYPTO_IC_XXX”),严格遵循ISO 27001信息安全管理规范。
微信小程序
浙公网安备 33010502006866号