导出BOM区分顶层和底层元器件
电子玩家 2021-05-06

之前设计的PADS导出BOM脚本是没有区别顶层和底层元器件的。如下所示。

现在有一个要求,就是让导出的BOM帮我们分开顶层和底层的元器件,并整理统计好显示出来。实现这个功能,可以在原来的脚本上做一些修改,就可以导出区分顶层和底层元器件的BOM。具体方法如下。

如上图所示,代码里增加了元器件层信息的读取和整理元器件的时候层信息的判断,最后就可以实现了元器件分顶层和底层的归类统计。

参考代码如下:

Const Columns = Array("Item","Description","Value","PCB Decal","Ref","OPTION","Quantity","layer") 'Array of column alignment: 0 - Align Left, 1 - Align Right, 2 - Align Center. Const Align = Array( 0, 0, 0, 0, 0, 0, 0) Dim fname As String   Sub Main fname = ActiveDocument If fname = "" Then fname = "Untitled" End If tempFile = DefaultFilePath & "\temp.txt" Open tempFile For Output As #1   StatusBarText = "Generating report..." 'Output table header For i = 0 To UBound(Columns) OutCell Columns(i) Next Print #1 Dim part_Count As Integer part_Count = 0 For Each part In ActiveDocument.Components If part.Pins.Count > 1 Then part_Count = part_Count + 1  End If Next part ReDim Parts(part_Count, 14) As String For Each part In ActiveDocument.Components If part.Pins.Count > 1 Then For intJ = 1 To 8 Parts(intI,1) = "" Parts(intI,2) = AttrVal(part, "Description") Parts(intI,3) = AttrVal(part, "Value") Parts(intI,4) = part.Decal  Parts(intI,5) = part.Name Parts(intI,6) = AttrVal(part, "Option") Parts(intI,7) = "" Parts(intI,8) =ActiveDocument.LayerName(part.layer) Next intJ intI = intI + 1 End If Next part Dim comp_counter As Integer Dim Species As Integer Const flag As Integer = 10   Dim Component As String Dim Component_temp As String Dim label As String   comp_counter = 0  Species = 0    For i = 1 To UBound(Parts, 1)   If Parts(i, flag) = "" Then   Component = Parts(i, 2) &Parts(i, 6)  label = Parts(i, 5)    comp_counter = 1   For j = i + 1 To UBound(Parts, 1)   Component_temp =Parts(j, 2) &Parts(j, 6)  If Component = Component_temp Then   comp_counter = comp_counter + 1   label = label & ", " & Parts(j, 5)   Parts(j, flag) = "0"     End If   Next j    Parts(i, 5) = label  Parts(i, 7) = Str(comp_counter)  Species = Species + 1  End If  Next i    Dim NO_ As Integer    ReDim SpeciesArray1(Species, 8)  ReDim SpeciesArray2(Species, 8)    NO_ = 1  For i = 1 To UBound(Parts, 1)  If Parts(i, flag) = "" And Parts(i, 8)="TOP" Then   SpeciesArray1(NO_, 1) = Parts(i, 1)   SpeciesArray1(NO_, 2) = Parts(i, 2)   SpeciesArray1(NO_, 3) = Parts(i, 3)   SpeciesArray1(NO_, 4) = Parts(i, 4)   SpeciesArray1(NO_, 5) = Parts(i, 5)   SpeciesArray1(NO_, 6) = Parts(i, 6)   SpeciesArray1(NO_, 7) = Parts(i, 7)  SpeciesArray1(NO_, 8) = Parts(i, 8)  NO_ = NO_ + 1   ElseIf Parts(i, flag) = "" And Parts(i, 8)="BOT" Then  SpeciesArray2(NO_, 1) = Parts(i, 1)   SpeciesArray2(NO_, 2) = Parts(i, 2)   SpeciesArray2(NO_, 3) = Parts(i, 3)   SpeciesArray2(NO_, 4) = Parts(i, 4)   SpeciesArray2(NO_, 5) = Parts(i, 5)   SpeciesArray2(NO_, 6) = Parts(i, 6)   SpeciesArray2(NO_, 7) = Parts(i, 7)  SpeciesArray2(NO_, 8) = Parts(i, 8)  NO_ = NO_ + 1  End If  Next i  OutCell "TOP"  Print #1 For i = 1 To UBound(SpeciesArray1, 1)  If SpeciesArray1(i, 8)="TOP" Then For j =1 To 8 OutCell SpeciesArray1(i,j) Next j Print #1  End If Next i OutCell "BOT" Print #1 For i = 1 To UBound(SpeciesArray2, 1)  If SpeciesArray2(i, 8)="BOT" Then For j =1 To 8 OutCell SpeciesArray2(i,j) Next j Print #1  End If Next i   Close #1 ExportToExcel   End Sub Function AttrVal (obj As Object, nm As String) AttrVal = IIf(obj.Attributes(nm) Is Nothing, "", obj.Attributes(nm)) End Function   Sub ExportToExcel FillClipboard Dim xl As Object On Error Resume Next Set xl = GetObject(,"Excel.Application") On Error GoTo ExcelError ' Enable error trapping. If xl Is Nothing Then Set xl = CreateObject("Excel.Application") End If xl.Visible = True xl.Workbooks.Add xl.ActiveSheet.Paste xl.Range("A1:H1").Font.Bold = True xl.Range("A1:H1").NumberFormat = "@" xl.Range("A1:H1").AutoFilter For i = 0 To UBound(Align) xl.Columns(i + 1).HorizontalAlignment = Choose(Align(i)+1, -4131, -4152, -4108) Next xl.ActiveSheet.UsedRange.Columns.AutoFit 'Output Report Header xl.Rows(1).Insert xl.Rows(1).Cells(1) = Space(1) & "Part Report for " & fname & " on " & Now xl.Rows(2).Insert xl.Rows(1).Font.bold = True 'Output Design Totals lastRow = xl.ActiveSheet.UsedRange.Rows.Count + 1 xl.Rows(lastRow + 1).Font.bold = True xl.Rows(lastRow + 1).Cells(1) = Space(1) & "Design Part count: " & ActiveDocument.Components.Count xl.Range("A1").Select On Error GoTo 0 ' Disable error trapping. Exit Sub    ExcelError: MsgBox Err.Description, vbExclamation, "Error Running Excel" On Error GoTo 0 ' Disable error trapping.  Exit Sub End Sub Sub OutCell (txt As String) Print #1, txt; vbTab; End Sub Sub FillClipboard StatusBarText = "Export Data To Clipboard..." ' Load whole file to string variable  tempFile = DefaultFilePath & "\temp.txt" Open tempFile For Input As #1 L = LOF(1) AllData$ = Input$(L,1) Close #1 'Copy whole data to clipboard Clipboard AllData$ Kill tempFile StatusBarText = "" End Sub
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
热门推荐
  • 相关技术文库
  • PCB
  • pads
  • protel
  • Altium
  • 一个可靠电路板的6条设计指南

    在开始新设计时,因为将大部分时间都花在了电路设计和元件的选择上,在PCB布局布线阶段往往会因为经验不足,考虑不够周全。 如果没有为PCB布局布线阶段的设计提供充足的时间和精力,可能会导致设计从数字领域转化为物理现实的时候,在制造阶段出现问题,或者

    05-10
  • 多层PCB电路板的设计工艺解读

    硬件工程师刚接触多层PCB的时候,很容易看晕。动辄十层八层的,线路像蜘蛛网一样。 今天画了几张多层PCB电路板内部结构图,用立体图形展示各种叠层结构的PCB图内部架构。 觉得好的,点个赞吧! 高密度互联板(HDI)的核心,在过孔 多层PCB的线路加工,和单层

    05-08
  • 宅在家里做电路板,来动手试试呗~

    图文并茂,在家制作属于你的高质量双面PCB板 激光打印碳粉转印方法 对家庭制作者来说,激光打印碳粉转印方法是至今最容易也是可以获得最高质量的一种方法,甚至比预涂感光板的紫外光照射法还好。个中的原因需要做些解释。PCB制造商使用光致抗蚀剂紫外光照射方

    05-07
  • 必看的6个PCB设计指南

    在开始新设计时,因为将大部分时间都花在了电路设计和元件的选择上,在PCB布局布线阶段往往会因为经验不足,考虑不够周全。 如果没有为PCB布局布线阶段的设计提供充足的时间和精力,可能会导致设计从数字领域转化为物理现实的时候,在制造阶段出现问题,或者

    04-26
  • 为什么选择沉金板,不选择镀金板?

    今天就和大家讲讲pcb线路板沉金和镀金的区别,沉金板与镀金板是PCB电路板经常使用的工艺,许多客户都无法正确区分两者的不同,甚至有一些客户认为两者不存在差别,这是非常错误的观点,必须及时更正。那么这两种“金板”究竟对电路板会造成何等的影响呢?下面

    04-22
  • PCB设计中的安全间距问题

    注 | 文末留言有福利 我们在平常的PCB设计中会遇到各种各样的安全间距的问题,比如像过孔跟焊盘的间距,走线跟走线之间的间距等等都是我们应该要考虑到的地方。 那么我们今天就把这些间距要求分为两类,一类是电气安全间距,另一类为非电气安全间距。 0 1 电

    04-22
  • PCB设计中的3W与20H原则以及信号线和地

    20H 原则是指电源层相对地层内缩 20H 的距离,H 表示电源层与地层的距离,当然也是为抑制边缘辐射效应。 在板的边缘会向外辐射电磁干扰 —— 将电源层内缩,使得电场只在接地层的范围内传导,有效的提高了 EMC。若内缩 20H 则可以将 70%的电场限制在接地边沿内

    04-19
  • 滤波电容配置、高速信号屏蔽等PCB设计原则

    1. 控制走线长度 控制走线长度,顾名思义,即短线规则,在进行PCB设计时应该控制布线长度尽量短,以免因走线过长引入不必要的干扰,特别是一些重要信号线,如时钟信号走线,务必将其振荡器放在离器件很近的地方。对驱动多个器件的情况,应根据具体情况决定采

    04-16
  • PCB设计覆铜实操要点和规范

    1、覆铜覆盖焊盘时,要完全覆盖,shape 和焊盘不能形成锐角的夹角。 2、尽量用覆铜替代粗线。当使用粗线时,过孔通常为非通常走线过孔,增大过孔的孔径和焊盘。 修改后: 3、尽量用覆铜替换覆铜+走线的模式,后者常常产生一些小尖角和直角使用覆铜替换走线:

    04-15
  • 升压型DC/DC转换器的PCB“接地”

    本文将探讨升压型DC/DC转换器的PCB布局中“接地”相关的内容。经常听到“接地很重要”、“需要加强接地设计”等说法。实际上,在升压型DC/DC转换器的PCB布局中,没有充分考虑接地、背离基本规则的接地设计是产生问题的根源。请认识到需要严格遵守以下注意事项

    04-13
  • PCB工艺制造方面的规则设置

    线路 对于设计师来说,我们在设计的过程中不能只考虑设计出来的精度以及完美要求,还有很大一个制约条件就是生产工艺的问题。很可能设计出来的产品是“林志玲”生产的就是“罗玉凤”了,板厂不是美帝,不可能为了一个优秀的产品的诞生,重新打造一条生产线。

    04-12
  • PCB Layout 注意事项细节问题

    注 | 文末留言有福利 PCB Layout是一个比较细致的工作,其中不仅有规则的约束,还有很多大大小小的注意事项需要工程师去考虑,本文整理了一些在Layou中需要注意的细节问题,来对照下你是否都知道吧! 0 1 特殊元器件的布局 发热元件应放置在有利于散热的位置

    04-09
下载排行榜
更多
广告
X
广告