基于Tkinter和Canvas实现PCB产品的Map分布展示

发布于:2022-11-29 ⋅ 阅读:(192) ⋅ 点赞:(0)

        本文是基于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

G85文件格式

 图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

        

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到