INNOLUX SMT AOI SqlServer TEST1

1.读取AOI供应商扫描每片PCB后在数据库中保存的条码,供应商数据格式是按每月新建一个数据库表储存PCB的条码信息。
2.把月度的数据库表按车间需求读出,并进行格式整理,并规定储存目录方便MES收料系统收录。
3.重点是如何从一大堆数据中获取同一片治具(含8pcs或12pcsPCB)里面的的同一批板的全部条码归档到同一个文件。

#运行结果
在这里插入图片描述
#简单的示例AOI数据结构
AOI示例数据结构

import pymssql 
import xml.dom.minidom
import time

conn = pymssql.connect(host="localhost",user= "sa",password= "123456789", database="1111")  


cursor = conn.cursor() # 获取光标

#查询数据
cursor.execute('SELECT * FROM PCBtest')

PP = []
index = 0
for row in cursor:
    PCBID = row[0]
    liaohao = row[1]
    tiaoma = row[3]
    #print('    PCBID:' + str(PCBID) +     '    liaohao:' + str(liaohao) +      '    tiaoma:' + str(tiaoma))
    #print('PCBID:' + str(PCBID))
    PCBID = str(PCBID)
    P = str(PCBID[11:13])+str(PCBID[14:16])+str(PCBID[17:19])
    z = index,P,liaohao,tiaoma
    PP.append(z)
    index += 1
#print(PP)
    
cnt = []
#print(len(PP))

#for i in range(len(PP)-1):   #历遍PP
#a = len(PP)-i-1  # j 循环每次-1
#print('i-------------',PP[i][1]) 
##print(PP[-a:])
#for j in PP[-a:]:      
#print('j[1]',j[1])
#A = ((int(PP[i][1])-int(j[1]))**2)**0.5
##print('A',A)
#if A <= 2:
#print('这数据需要打包')
#zz = PP[i][0],PP[i][1],PP[i][2],PP[i][3]
#cnt.append(zz)
def catchXML():
    for a in range (len(PP)):  #抓取XML条码
        #print(PP[a][1])   
        zzz = PP[a][1],PP[a][3]  #[1]是日期,[3]是对应的条码
        cnt.append(zzz) 
    return cnt
  
    
cnt1 = []
cnt2 = []
def ArraySort(list):   #阈值为 if 后面的 2
    for q in range(len(list)):
        z = list[q][0]
        zz = list[q][1]
        cnt1.append(z)
        cnt2.append(zz)
    #print(cnt1)
    #print(cnt2)
    
    #镜像
    list0 = cnt1.copy()
    list1 = cnt2.copy()
    
    
    l = len(list0)
    result = [] #新建result存放list0的切片
    result1 = [] #新建result1存放list1的切片
    
    if l==1:
        result.append(list0[:])#如果只有一个元素,那就直接添加
        result1.append(list1[:])
        
    else:
        i=0
        j=0
        while(i<len(list0)-1):
            #[1, 2, 3, 4, 50, 51, 52, 53, 100, 101, 102, 103]
            #len = 12
            # i < 11
            if ((abs(int(list0[i + 1]) - int(list0[i])) <= 2) and i+1 !=len(list0)-1):
                i += 1
            #如果遍历的过程中发现下标i的值还没有到达倒数第二个下标那就继续前进
            elif((abs(int(list0[i + 1])-int(list0[i])) <= 2) and i+1==len(list0)):
                #print(list0[j:i + 1])
                result.append(list0[j:i + 1])
                result1.append(list1[j:i + 1])
            #如果发现下标i到达了倒数第二个下标了,为了避免程序执行              
            #循环条件终止而下标自动失效,不去记忆了,因为循环结束 了,可是之前的下标
            #没有完成切片操作。
            else:
                #print(list0[j:i+1])
                result.append(list0[j:i+1])
                result1.append(list1[j:i+1])
                
                j = i+1
                i += 1
            #用j记下切片初始下标,用i来记录切片终止下标
            #然后i和j自动加1,在满足条件的情况下继续前进
        if (abs(int(list0[-1]) - int(list0[-2])) <= 2):  
            result[-1].append(list0[-1])
            result1[-1].append(list1[-1])
            
        else:
            result.append(list0[-1:])
            result1.append(list1[-1:])
            
            #这个if-else语句是处理最后的一个元素,到底是独立成为一个切片还是并入到最后的切片中,根据条件判断即可
        A = result #B借用A的线程,不能return,否则A return会干扰B结果生成
        #print('\n\nThe sorted list0 is as follows:\n',A)
        
        B = result1
        #print('\n\nThe sorted list1 is as follows:\n',B) 
        return B

cnt = catchXML()
#print('CNT打印',cnt)

B = ArraySort(cnt)   #result 列表输出的是 日期的序列, result1 列表输出的是条形码
print('B',B)

indexX = 100
for e in B: #写入XML文件
    ee = str(e)
    
    print(ee) 
    #result2txt = str(PCBID)          # data是前面运行出的数据,先将其转为字符串才能写入
    #with open('wenben1.txt','a') as file_handle:   # .txt可以不自己新建,代码会自动新建
    #file_handle.write(result2txt)     # 写入
    #file_handle.write('\n')         # 有时放在循环里面需要自动转行,不然会覆盖上一条数据
    #在内存中创建一个空的文档
    doc = xml.dom.minidom.Document() 
    #创建一个根节点Managers对象
    root = doc.createElement('Managers') 
     #设置根节点的属性
    root.setAttribute('PCB', 'InnoluxSMT') 
    
    #将根节点添加到文档对象中
    doc.appendChild(root)
    nodeManager = doc.createElement('Manager')            
    
    #给叶子节点name设置一个文本节点,用于显示文本内容
    nodeAge = doc.createElement("PCBliaohao")
    nodeAge.appendChild(doc.createTextNode(ee))
    
    nodeManager.appendChild(nodeAge)
    
    root.appendChild(nodeManager)
    #开始写xml文档
    #fp = open('C:\\Users\\Jiahui01.Mai\\Desktop\\Manager.xml', 'w')
    indexX += 1
    fp = open("%d PCB.xml" % indexX, "w") 
    doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
    fp.flush()  #打开一个录入再关闭,才能正常保存
 
conn.close()
time.sleep(5)
quit()   #睡觉5秒后退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值