//Scannklasse
import serial
import threading
import sys
import string
from ScanProzess import Scan_Prozess
import os
import ConfigParser
import time
from qt import *
from printing import Print
from data import data_class
from Errorhandling import Error_handle
class Scanning(threading.Thread):
item=""
Filesize=0
x=0
running=True
Adr_Reader_1=""
Adr_Reader_2=""
Adr_Reader_3=""
Reader_1=""
Reader_2=""
Reader_3=""
def __init__(self):
self.data=data_class("Warehouse/warehouse/")
self.execute_flag=True
threading.Thread.__init__(self)
#Read the Interfacesettings from ini-File "lvs.ini"
self.config = ConfigParser.ConfigParser()
file = open("data/lvs.ini",'r')
self.config.readfp(file)
file.close()
self.Print_Time=self.config.get('PrintMovement','Time')
self.O_print=Print()
self.Error=Error_handle()
self.Adr_Reader_1=self.config.get('Readerconfig','reader_Adr1')
self.Adr_Reader_2=self.config.get('Readerconfig','reader_Adr2')
self.Adr_Reader_3=self.config.get('Readerconfig','reader_Adr3')
self.Reader_1=self.config.get('Readerconfig','reader1')
self.Reader_2=self.config.get('Readerconfig','reader2')
self.Reader_3=self.config.get('Readerconfig','reader3')
if self.config.get('Interface', 'Databits')=="6":
bsize=serial.SIXBITS
elif self.config.get('Interface', 'Databits')=="8":
bsize=serial.EIGHTBITS
elif self.config.get('Interface', 'Databits')=="5":
bsize=serial.FIVEBITS
elif self.config.get('Interface', 'Databits')=="7":
bsize=serial.SEVENBITS
if self.config.get('Interface', 'Parity')=="Even":
bparity=serial.PARITY_EVEN
elif self.config.get('Interface', 'Parity')=="Odd":
bparity=serial.PARITY_ODD
elif self.config.get('Interface', 'Parity')=="None":
bparity=serial.PARITY_NONE
if self.config.get('Interface', 'Stopbits')=="1":
bstopbits=serial.STOPBITS_ONE
elif self.config.get('Interface', 'Stopbits')=="2":
bstopbits=serial.STOPBITS_TWO
if self.config.get('Interface', 'Flowcontrol')=="Xon/Xoff":
bflowcontrol=0
elif self.config.get('Interface', 'Flowcontrol')=="Hardware":
bflowcontrol=1
elif self.config.get('Interface', 'Flowcontrol')=="None":
bflowcontrol=2
self.threadport=threading.Event()
self.serial=serial.Serial(
port=int(self.config.get('Interface', 'Port')),
baudrate=int(self.config.get('Interface', 'Baudrate')),
bytesize=bsize,
parity=bparity,
stopbits=bstopbits,
timeout=1,
xonxoff=bflowcontrol,
rtscts=0
)
#Create the Objects
self.scanner1=Scan_Prozess()
self.scanner2=Scan_Prozess()
self.scanner3=Scan_Prozess()
#write String to serial Interface
def write(self,value):
self.serial.write(value)
#Start the Thread
def scanStart(self):
self.threadport.set()
#Stop the Thread
def scanStop(self):
self.running=False
self.threadport.set()
self.canceled = True
#Read String from Buffer and call the Function "action" from Object Scan_Prozess()
#Parallel print a Report Movement out
def run(self):
try:
while self.running==True:
text = self.serial.read(1)
print ""
print "serial read"
print ""
if text:
n = self.serial.inWaiting()
if n >0:
text =text + self.serial.read(n)
self.laengestr=len(text)
self.item=self.item+text
if ord(text[self.laengestr-1:self.laengestr])==3:
print self.item[6:len(self.item)-1]
self.scanner=self.item[1:5]
if self.scanner==self.Adr_Reader_1 and self.Reader_1=="1":
self.scanner1.action(self.item[6:len(self.item)-1],"1")
elif self.scanner==self.Adr_Reader_2 and self.Reader_2=="1":
self.scanner2.action(self.item[6:len(self.item)-1],"2")
elif self.scanner==self.Adr_Reader_3 and self.Reader_3=="1":
self.scanner3.action(self.item[6:len(self.item)-1],"3")
self.item=""
else:
if ord(self.item[0:1])==1 and ord(self.item[5:6])==2:
print self.item[6:len(self.item)]
self.scanner=self.item[1:5]
if self.scanner==self.Adr_Reader_1 and self.Reader_1=="1":
self.scanner1.action(self.item[6:len(self.item)],"1")
elif self.scanner==self.Adr_Reader_2 and self.Reader_2=="1":
self.scanner2.action(self.item[6:len(self.item)],"2")
elif self.scanner==self.Adr_Reader_3 and self.Reader_3=="1":
self.scanner3.action(self.item[6:len(self.item)],"3")
self.item=""
self.serial.flushInput()
print "flush Buffer"
else:
hour=time.localtime()[3]
min=time.localtime()[4]
if (hour==int(self.Print_Time[0:2]) and min==int(self.Print_Time[3:5]) and self.execute_flag==True):
self.execute_flag=False
self.O_print.titel="Overview Movement"
self.sql="select prod_ort_ID,r3nr,index_Nr,package_ID,palette_ID,einlagerdat,auslagerdat,menge,fauf,ieebatch,datum,stellplatz from protokoll where r3nr<>0 "
self.headerlist=('','R3-Nr.','','','','Incomingdat.','Outgoingdat.','Quantity','Fauf','IEE-Batch','Date','Storelocation')
sql_list=self.data.Erg_Liste(self.sql)
self.Pri_Col_width=(20,60,20,10,20,160,160,60,60,80,200,60)
self.O_print.Ue_ergebnis=sql_list
self.O_print.Ue_Headerlist=self.headerlist
self.O_print.print_Mat_overview("",self.Pri_Col_width,True,"",0)
self.data.SQL_Execute("delete from protokoll")
elif (hour==int(self.Print_Time[0:2]) and min == int(self.Print_Time[3:5])+1) and self.execute_flag==False:
self.execute_flag=True
self.closePort()
except:
self.Error.Errorbox("Error in Func run",True)
////Die Methode Action ich hoffe Ihr kommt klar
def action(self,scancode,scanner):
try:
if scanner=="1":
self.Temp_Tab="temp_stellpl"
elif scanner=="2":
self.Temp_Tab="temp_stellpl_2"
elif scanner=="3":
self.Temp_Tab="temp_stellpl_3"
self.scan_text=scancode
if len(self.scan_text)==8:
if self.Regalpl_1=="":
self.Regalpl_1=self.scan_text[0:2]
self.Spaltepl_1=self.scan_text[3:5]
self.Zeilenpl_1=self.scan_text[6:8]
else:
self.Regalpl_2=self.scan_text[0:2]
self.Spaltepl_2=self.scan_text[3:5]
self.Zeilenpl_2=self.scan_text[6:8]
if self.Regalpl_1==self.Regalpl_2 and self.Spaltepl_1==self.Spaltepl_2 and self.Zeilenpl_1==self.Zeilenpl_2:
self.sql="Select * from regal where regalnr="+str(int(self.Regalpl_2))+" and lagerplatz_ID="+str(int(self.Spaltepl_2))+" and regalzeilen_ID="+str(int(self.Zeilenpl_2))
self.regal_ID_pup=self.data.Erg_Field(self.sql,0)
if self.regal_ID_pup<>"":
if self.Prod_ID<>"69" or not self.Prod_ID<>"20":
self.Datawrite_delete(True,self.regal_ID_pup)
else:
self.Error.Errorbox("Stellplatz ist noch nicht angelegt",False)
self.data.SQL_Execute("delete from "+self.Temp_Tab)
else:
self.Error.Errorbox("Falscher Stellplatz gescannt "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1+" ",False)
self.data.SQL_Execute("delete from "+self.Temp_Tab)
self.Prod_Art=0
self.Prod_ID=""
self.Box_Nr.clear()
self.Regalpl_1=""
self.Spaltepl_1=""
self.Zeilenpl_1=""
else:
if self.Regalpl_1 <> "":
self.Prod_ID=self.scan_text[0:2]
else:
self.Prod_ID=""
self.anz_temp_tab=self.data.Erg_Field("Select count(*) from "+self.Temp_Tab,0)
if self.Prod_ID=="20":
self.sql="Select * from regal where regalnr="+str(int(self.Regalpl_1))+" and lagerplatz_ID="+str(int(self.Spaltepl_1))+" and regalzeilen_ID="+str(int(self.Zeilenpl_1))
self.__regal_ID=self.data.Erg_Field(self.sql,0)
self.Datawrite_delete(False,self.__regal_ID)
elif self.Prod_ID=="30":
print "reserviert"
elif self.Prod_ID=="40":
if self.Prod_Art==4 or self.Prod_Art==0:
self.Rawmaterial(self.scan_text)
self.Prod_Art=4
else:
self.Error.Errorbox("Achtung falsches Paket eingelesen "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1,False)
elif self.Prod_ID=="41":
if self.Prod_Art==5 or self.Prod_Art==0:
self.Semi_Finished(True,self.scan_text)
self.Prod_Art=5
else:
self.Error.Errorbox("Achtung falsches Paket eingelesen "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1,False)
elif self.Prod_ID=="57":
if self.Prod_Art==5 or self.Prod_Art==0:
self.Semi_Finished(False,self.scan_text)
self.Prod_Art=5
else:
self.Error.Errorbox("Achtung falsches Paket eingelesen "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1,False)
elif self.Prod_ID=="69":
self.sql="Select * from regal where regalnr="+str(int(self.Regalpl_1))+" and lagerplatz_ID="+str(int(self.Spaltepl_1))+" and regalzeilen_ID="+str(int(self.Zeilenpl_1))
self.__regal_ID=self.data.Erg_Field(self.sql,0)
if self.Prod_Art==1 or self.Prod_Art==0:
self.Empty_Storeloc(self.__regal_ID)
self.Prod_Art=1
else:
self.Error.Errorbox("Achtung falsches Paket eingelesen "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1,False)
if self.scan_text[0:1]=="7" or self.Prod_ID=="50":
self.laenge=len(self.scan_text)
if self.Prod_Art==7 or self.Prod_Art==0:
self.Prod_Art=7
if self.laenge > 22:
self.Finishedmat(False,self.scan_text)
else:
self.Finishedmat(True,self.scan_text)
else:
self.Error.Errorbox("Achtung falsches Paket eingelesen "+self.Regalpl_1+"-"+self.Spaltepl_1+"-"+self.Zeilenpl_1,False)
except:
self.Error.Errorbox("Error in Func Action",True)