0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现PADS导出区分顶层和底层元器件的BOM

jf_iZR6mdqV 来源:PCB和原理图设计与共享 2023-09-23 09:24 次阅读

导出BOM是硬件工程师在设计PCB时必备的一项任务。通常情况下,导出的BOM中并没有区分顶层和底层的元器件,但是有时候我们需要对这两者进行分开,以便更好地进行统计和管理。

f81f0276-59a8-11ee-939d-92fbcf53809c.jpg

f82979cc-59a8-11ee-939d-92fbcf53809c.jpg

本文将介绍如何通过编写PADS的BOM的导出脚本代码实现这个功能。

首先,我们需要了解脚本中的原理。在PADS导出BOM的脚本中,一般会读取元器件的相关信息,如元器件编号、名称、数量等。我们需要在脚本中增加元器件层信息的读取,以及在整理元器件时对层信息进行判断,从而实现元器件分顶层和底层的归类统计。

编写以下代码:

f82ecf9e-59a8-11ee-939d-92fbcf53809c.jpg

f83456da-59a8-11ee-939d-92fbcf53809c.jpg

代参考代码:

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 & " emp.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_tempAs 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 & " emp.txt"

Open tempFileFor Input As #1

L = LOF(1)

AllData$ = Input$(L,1)

Close #1

'Copy whole data to clipboard

Clipboard AllData$

Kill tempFile

StatusBarText = ""

End Sub

通过以上代码,我们成功实现了在PADS导出BOM时区分顶层和底层元器件的功能。使用这个区分顶层和底层的BOM,工程师可以更好地进行设计分析、成本估算以及供应链管理,提高工作效率和准确性。

f83c0650-59a8-11ee-939d-92fbcf53809c.jpg

f845802c-59a8-11ee-939d-92fbcf53809c.jpg

总结起来,本文介绍了如何通过修改PADS导出BOM的脚本,实现区分顶层和底层元器件的功能。通过这样的改进,我们可以更好地对电路板中的元器件进行分类和统计,提高设计过程的可视性和管理效果。希望这篇文章对您在设计PCB时的工作有所帮助。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 元器件
    +关注

    关注

    111

    文章

    4525

    浏览量

    88698
  • PADS
    +关注

    关注

    76

    文章

    805

    浏览量

    106914
  • BOM
    BOM
    +关注

    关注

    5

    文章

    239

    浏览量

    39702

原文标题:如何实现PADS导出区分顶层和底层元器件的BOM

文章出处:【微信号:电子设计联盟,微信公众号:电子设计联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用PADS导出带坐标的PCB BOM表?

    将左侧“Part Properties”中需要的条目“Add”到右侧的“Table Columns”中,右侧的条目就是导出BOM后Excel表格中显示的条目。
    的头像 发表于 08-30 10:25 1.5w次阅读
    如何使用<b class='flag-5'>PADS</b><b class='flag-5'>导出</b>带坐标的PCB <b class='flag-5'>BOM</b>表?

    pads layout导出BOM出错

    请教各位大侠,在pads layout 环境中使用脚本文件导出BOM,提示excel内存不足怎么解决?
    发表于 04-24 11:46

    PADS LAYOUT中用模板脚本导出漂亮的BOM表!

    PADS LAYOUT中用模板脚本导出漂亮的BOM表!
    发表于 06-22 22:55

    PROTEL和***器件顶层底层的问题!!

    请问各位大神,如图这两颗器件明明在底层,但是双击显示的确是顶层。当我把他改成底层后,又显示在顶层了。请问怎么回事?怎么改?
    发表于 08-31 20:11

    PADS vx.2导出BOM

    PADS vx.2导出BOM,请各位大师指教
    发表于 03-10 11:52

    请问怎么高亮显示顶层底层器件

    在AD布线的时候,怎么让顶层或者底层元器件高亮显示?
    发表于 06-10 03:53

    电路板设计中底层器件快速切换到顶层方式

    电路板设计中底层器件如何快速切换到顶层元器件实现快速的顶底切换,能更加方便高效让我们去进行布局。单个
    发表于 07-10 08:26

    AD中怎么删除顶层或者底层

    AD中怎么删除顶层或者底层,只保留底层或者顶层的丝印。导出PDF便于焊接元器件
    发表于 09-30 16:20

    华秋DFM可视化BOM交互焊接工具——SMT工厂、PCB工程师的福音来了!

    透明背景,当导出图片模糊看不清可设置图片大小。04元件清单统计元器件清单统计,分别统计顶层元件、底层元件以及元件的种类。焊盘数分别统计贴片焊盘与插件焊盘,当已焊接的元件和空贴、不焊的元
    发表于 12-23 10:59

    华秋DFM推出可视化BOM交互焊接工具,助力SMT工厂提升效率

    透明背景,当导出图片模糊看不清可设置图片大小。04元件清单统计元器件清单统计,分别统计顶层元件、底层元件以及元件的种类。焊盘数分别统计贴片焊盘与插件焊盘,当已焊接的元件和空贴、不焊的元
    发表于 12-23 11:16

    如何从PADS-LAYOUT中导出BOM清单方法

    如何从PADS-LAYOUT中导出BOM清单方法最近很多朋友问我关于如何如何从PADS-LAYOUT中出BOM清单。今把方法写下来好让有需要
    发表于 09-19 08:18 0次下载

    常用元器件封装汇总

    直插式元器件封装的焊盘一般贯穿整个电路板,从顶层穿下,在底层进行元器件的引脚焊接。
    的头像 发表于 04-24 11:34 3.6w次阅读
    常用<b class='flag-5'>元器件</b>封装汇总

    pcb顶层底层互换

    本文主要详细介绍了pcb顶层底层互换,把PCB切换到顶层,然后Edit/select/allonlayer选择顶层
    发表于 04-26 15:47 1.5w次阅读
    pcb<b class='flag-5'>顶层</b>和<b class='flag-5'>底层</b>互换

    PADS导出坐标和BOM脚本文件资料免费下载

    本文档的主要内容详细介绍的是PADS导出坐标和BOM脚本文件资料免费下载。
    发表于 08-23 08:00 0次下载
    <b class='flag-5'>PADS</b><b class='flag-5'>导出</b>坐标和<b class='flag-5'>BOM</b>脚本文件资料免费下载

    电子元器件芯片的型号如何区分

    一般来说完整的芯片器件型号都是由三部分组成的,分别是主体型号、前缀、后缀。那么电子元器件芯片的型号如何区分呢? 1、区分有铅和无铅。 2、可区分
    的头像 发表于 01-02 15:39 1.2w次阅读