在BOM整理中应用VBA,提高准确度和效率。
我们在产品设计中很多情况下用ORCAD来设计原理图,用PADSLAYLOUT来画PCB。这对后面的BOM整理就带来了一定的麻烦,因为ORCAD中包含了器件的封装,值却没有层的信息。这个时候就需要我们再比照PCB出来的BOM来区别出每个器件的层。通常情况下我们只能人工一个个校对挑捡,不仅效率低,而且很可能出现差错。这个时候我们可以考虑实现一个实现将PCBBOM与ORCADBOM进行比较挑捡的程序,简化BOM的制作。
VisualBasicforApplications(VBA)是一种VisualBasic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是MicrosoftOffice软件。我们这里就是写一个针对EXCEL的的小程序,来实现BOM整理的功能。
设计记录:
1.首先,从ORCAD里导出器件BOM,如下图,
里面包含元件名及元件值
2.再从LAYOUT里导出器件BOM,如下图
里面包括元件名,元件封装及层
3.写一个VBA程序,将这两个表格比对来生成一个新BOM。这个BOM能够按照层、值、封装来分类器件。程序流程如下:
1).因为ORCAD里面值一样的排列在一起,所以流程1从ORCAD里开始,首先判断A(X)行值是否和A(X-1)行的器件值一样,若不一样,另起一行生成元件列表;若一样,进入流程2
华录2).判断元件是否在顶层,是进入流程3
3).判断该元件的封装是否已经在表示封装的字符串数组中,如果有,将该元件名添加到已有封装的那行元件上,如果没有,则另起一行生成有新封装的元件列表生成的BOM如下表
4.程序中可应注意的问题
1)第一个表格需为PCB导出表格,格式为元件名、封装、层;第二个表格为ORCAD导出表格,格式为序
2)果数据不正确程序会报错,比如ORCAD表格里有元件U1而PCB表格里没有,又或者ORCAD表格里有诸如R163D这样的元件名,D属于DESIGNATOR属性
3)报错可以用ONERRORRESUMENEXT这句来屏蔽,但不建议这样错,因为这样会忽略掉某些错误
PRIVATESUBWORKSHEET_BEFOREDOUBLECLICK(BYVALTARGETASRANGE,CANCELASBOOLEAN)
DIMTEMPTEMP=7
DIMFOOTPRINTF(5)ASSTRING'记录封装的数组,最大为5个,能满足要求FORI=1TO5
FOOTPRINTF(I)=\"AA\"NEXT
DIMFPCOUNT'封装数量里的封装数量FPCOUNT=1
华源代码如下:
录号,数量,元件名,值。每个元件单独为一行,去掉不必要的内容如抬头
DIMCOUNTCOUNT=1
DIMNUMBER'生成BOM的行数,按元件参数不同数量依次增加NUMBER=1
WORKSHEET(3).CELL(1,1).VALUE=WORKSHEET(2).CELL(1,4).VALUE'BOOK3第一列是值,第二列是封装,第三列数量,第四列器件名,第五列是层
WORKSHEET(3).CELL(1,4).VALUE=WORKSHEET(2).CELL(1,3).VALUE
ONERRORRESUMENEXT
FORI=2TO800
WITHWORKSHEET(1).RANGE(\"A1:A800\")
IF(WORKSHEET(2).CELL(I,4).VALUE=WORKSHEET(2).CELL(I-1,4).VALUE)THEN
IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+2).VALUE=\"TOP\")THEN
+K-1,4).VALUE+\+WORKSHEET(2).CELL(I,3).VALUE
TEMP=8ENDIFNEXT
华FORK=1TOFPCOUNTIF(TEMP=7)THEN
SETC=.FIND(WORKSHEET(2).CELL(I,3).VALUE,LOOKIN:=XLVALUES)
IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+1).VALUE=FOOTPRINTF(K))THENWORKSHEET(3).CELL(NUMBER+K-1,4).VALUE=WORKSHEET(3).CELL(NUMBER
录FPCOUNT=FPCOUNT+1
FOOTPRINTF(FPCOUNT)=WORKSHEET(1).CELL(C.ROW,C.COLUMN+1)
WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,1).VALUE=WORKSHEET(2).CELL(I,
4).VALUE
WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,2).VALUE=FOOTPRINTF(FPCOUNT)WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,4).VALUE=WORKSHEET(2).CELL(I,
3).VALUE
ENDIFTEMP=7ENDIFELSE
IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+2).VALUE=\"TOP\")THEN
NUMBER=NUMBER+FPCOUNT
FOOTPRINTF(FPCOUNT)=WORKSHEET(1).CELL(C.ROW,C.COLUMN+1)
WORKSHEET(3).CELL(NUMBER,1).VALUE=WORKSHEET(2).CELL(I,4).VALUE
ELSE
略掉两个器件同值不同层的情况
ENDIF
NEXTENDSUB
华WORKSHEET(3).CELL(NUMBER,2).VALUE=FOOTPRINTF(FPCOUNT)
WORKSHEET(3).CELL(NUMBER,4).VALUE=WORKSHEET(2).CELL(I,3).VALUE
WORKSHEET(2).CELL(I,4).VALUE=WORKSHEET(2).CELL(I,4).VALUE+\"@@@\"'防止忽
录FPCOUNT=1
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.cn 版权所有 湘ICP备2023022426号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务