本文是基于SEMI的G85文件(文件格式类型为XML),和Python的Tkinter和Canvas模块实现PCB/SUB(芯片基板)类型的产品的检测缺陷的Map分布展示,第一部分主要对程序的页面进行展示
1、Lot_Map叠合的页面
主要分为两个页面图,通过点击获取文件按钮(获取的文件格式为固定的G85文件,示例如图2),获取指定格式路径下的文件后,左边页面:点击获取MergeMap明细,可获取到所有文件名称,选择对应的文件名称,可将该G85文件展示如左边的阵列Map图,用于显示产品的缺陷分布;右边页面:通过点击叠合LotMap图按钮,可将获取到的所有的G85文件进行叠合起来,如果同一个位置有多个缺陷,程序将会对数量进行加和,并将数量显示到对应的位置上,用于分析整个批次板件的缺陷热点分布;
实现的核心代码段如下:
# 通过获取点击tk中listbox中的文件名称,展示对应文件的map图;
def getlisboxvalue(event):
var1.set(list1.get(list1.curselection())) # 获取list中文件名称
# 以下三行代码是避免切换文件时还是原来的数据,以及清除canvas画布;
getunitlist(filepath=entry1.get() + "/%s" % str(lable15.cget("text")) + ".xml").clear()
getclorelist(filepath=entry1.get() + "/%s" % str(lable15.cget("text")) + ".xml").clear()
canvas25.delete(ALL)
unitlist1 = getunitlist(filepath=entry1.get() + "/%s" % str(lable15.cget("text")) + ".xml")
clorelist1 = getclorelist(filepath=entry1.get() + "/%s" % str(lable15.cget("text")) + ".xml")
for i in range(28, (getmaplen(entry1.get())+1)*28, 28): # 通过两个for循环并结合canvas画出Map图;
for j in range(0, getmaplen(entry1.get())):
canvas25.create_rectangle((j + 1) * 28, i, (j + 1) * 28 - 26, i - 26, fill="%s" % clorelist1[(i - 28) // 28][j]) # 通过canvas的create_rectangle方法画出每一个矩形并赋予颜色;
canvas25.create_text((j + 1) * 28 - 12, i - 12, text="%s" % unitlist1[(i - 28) // 28][j], font=("微软雅黑", 6)) # 通过canvas的create_text方法给每一个矩形赋值;
图1
图2
2、Lot_Map分布页面
第二个页面,同样是通过获取指定文件路径格式下的G85文件,通过对G85文件进行解析,并通过Canvas将文件有缺陷的NG点位通过红色的方块进行展示,OK点位则通过绿色方块进行展示,这样可以在一个页面方便的展示和分析PCB/SUB板件批次的缺陷分布热点图;程序支持展示24个Map图块,分别通过文件序号进行编排,无该文件需要则显示为灰色;
核心代码段如下:
# 这里只展示一段,因为无法实现循环将所有Map图块一次性画出来,代码比较长,主要核心代码如下:
for i in range(8, 184, 8):
for j in range(0, 22):
canvas1.create_rectangle((j + 1) * 8, i, (j + 1) * 8 - 6, i - 6,fill="%s" % newpnlclorelist[(i // 8 - 1)][j])
图3
3、T/B面Map叠合
在PCB/SUB(芯片基板)的工艺上有每一片PCB/SUB板件都有两个面,行业上分别称为T/B面或者S/C面,故在对Map进行分析时会有两个面次的Map图和两个面次叠合的Map图分析,所以第3个页面是分别对T、B、T+B面进行分布展示,文件通过一定的路径放置在共享盘中或者本地文件夹中,然后通过4个筛选条件进行筛选,这样做的目的是为了与MES系统、检验设备的程序进行融合配套;其中在程序上的区分是在第四个筛选条件,默认为T+B,选择T则为Top面Map、选择B则为Button面Map;
实现的核心代码与页面1完全一致,只是获取和处理有所差别,如果T/B面次需要结合展示,在业务上需要将B面进行镜像后才能与T面叠合在一起;
图4
4、T/B面_Map分布
同页面2,这里整体逻辑是一致的,只是获取文件的方式不,以及同页面3这里是针对T、B、T+B对PCB/SUB(芯片基板)的缺陷Map分布进行展示;
核心代码与页面2一致,逻辑与页面3一致;
图5