Added Code for Fill Cell, Complete Part State

This commit is contained in:
2017-05-16 09:38:11 +02:00
parent 6f35dcb99c
commit 6d8a845083
2 changed files with 185 additions and 15 deletions

114
DB.py
View File

@@ -108,7 +108,7 @@ class DB:
Get Processdata
"""
try:
cursor = self.executesql ("SELECT dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv FROM bde WHERE dmc = '%s';" % dmc)
cursor = self.executesql ("SELECT dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv, pruefzelle3, gesamtstatus FROM bde WHERE dmc = '%s';" % dmc)
except:
print ("Couldnt read from BDE")
@@ -177,6 +177,9 @@ class DB:
self.updatebde (data['dmc'], 'pruefzelle1', data['bauteilstatus'])
if data['dmc'] == 'n.i.O.':
self.updatebde (data['dmc'], 'endts', data['endts'])
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
else:
self.updatebde (data['dmc'], 'gesamtstatus', 'n.Durchlaufen')
self.updatebde (data['dmc'], 'variante', data['bauteil'] + '-' + data['variante'])
self.updatebde (data['dmc'], 'csv', '')
@@ -222,6 +225,8 @@ class DB:
self.addblindnietvalues (data);
self.updatebde (data['dmc'], 'blindniet', data['bauteilstatus'])
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def addblindnietvalues (self, data):
@@ -285,6 +290,8 @@ class DB:
self.updatebde (data['dmc'], 'putzzelle', data['bauteilstatus'])
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def getputzzelle (self, dmc):
@@ -319,6 +326,8 @@ class DB:
self.updatebde (data['dmc'], 'variante', data['bauteil'] + '-' + data['variante'])
self.log (1,'PD99 - Change variante')
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def getchiron (self, dmc):
@@ -350,6 +359,8 @@ class DB:
self.updatebde (data['dmc'], 'bajonettclip', data['bauteilstatus'])
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def getbajonettclip (self, dmc):
@@ -392,6 +403,8 @@ class DB:
self.updatebde (data['dmc'], 'cclip', data['bauteilstatus'])
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def getcclip (self, dmc):
@@ -434,6 +447,8 @@ class DB:
self.updatebde (data['dmc'], 'masseblech', data['bauteilstatus'])
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
if data['bauteilstatus'] == 'n.i.O.':
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
def getmasseblech (self, dmc):
@@ -477,7 +492,7 @@ class DB:
self.log (1, 'PD09 keine BDE Daten %s abbruch' % data['dmc'])
return 0
#dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv
#dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv, pruefzelle3, gesamtstatus
_states = {'pruefzelle1' : l[6],
'putzzelle' : l[7],
'chiron' : l[8],
@@ -486,7 +501,8 @@ class DB:
'cclip': l[11],
'masseblech' : l[12]
}
_ges = l[17]
_gesio = 1
#'Blindniet'
if _states ['blindniet'] == 'n.Durchlaufen':
self.log (5, 'PD09 Blindniet %s nDurchlaufen do nothing' % data['dmc'])
@@ -524,6 +540,8 @@ class DB:
if io:
self.updatebde (data['dmc'], 'blindniet', 'i.O. NA')
else:
_gesio = 0
#'Bajonettclip'
@@ -540,6 +558,8 @@ class DB:
io = 0
if io:
self.updatebde (data['dmc'], 'bajonettclip', 'i.O. NA')
else:
_gesio = 0
#'CClip'
@@ -556,6 +576,8 @@ class DB:
io = 0
if io:
self.updatebde (data['dmc'], 'cclip', 'i.O. NA')
else:
_gesio = 0
@@ -607,10 +629,12 @@ class DB:
if io:
self.updatebde (data['dmc'], 'masseblech', 'i.O. NA')
else:
_gesio = 0
#if _gesio and _ges == 'i.O.':
#nav = NAV (path = "/srv/navision/", db = self)
#nav.createcsv (data['dmc'])
#try:
@@ -640,11 +664,9 @@ class DB:
self.updatebde (data['dmc'], 'ladungstraeger', data['ladungstraeger'])
self.updatebde (data['dmc'], 'endts', data['endts'])
if data['bauteilstatus'] == 'n.i.O.':
self.log (5, 'PD10 n.i.O updatding part data')
l = self.getbde (data['dmc'])[0]
#dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv
_states = {'pruefzelle1' : l[6],
l = self.getbde (data['dmc'])[0]
#dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv, pruefzelle3, gesamtstatus
_states = {'pruefzelle1' : l[6],
'putzzelle' : l[7],
'chiron' : l[8],
'blindniet': l[9],
@@ -652,7 +674,16 @@ class DB:
'cclip': l[11],
'masseblech' : l[12]
}
if data['bauteilstatus'] == 'i.O.':
self.log (5, 'PD10 .i.O checking part data')
if _states['pruefzelle1'] == 'i.O.' and _states['putzzelle'] == 'i.O.' and _states['chiron'] in ('i.O.','n.Durchlaufen') and _states['blindniet'] == 'i.O.' and _states['putzzelle'] == 'i.O.' and _states['bajonettclip'] == 'i.O.' and _states['cclip'] == 'i.O.' and _states['masseblech'] == 'i.O.':
self.log (5, 'PD10 .i.O All part data i.O. Part is i.O.')
self.updatebde (data['dmc'], 'gesamtstatus', 'i.O.')
elif data['bauteilstatus'] == 'n.i.O.':
self.log (5, 'PD10 n.i.O updatding part data')
self.updatebde (data['dmc'], 'gesamtstatus', 'n.i.O.')
for i in range (1,42):
if data ['pp%02d' % i] == 'n.i.O.':
where, field = pruefpunkte ['pp%02d' % i]
@@ -665,8 +696,13 @@ class DB:
nav = NAV (path = "/srv/navision/", db = self)
if "Error" in data['dmc']:
self.log (5, 'PD10 No Read')
elif '' == data['dmc'] :
self.log (5, 'PD10 No Read')
elif int (data['dmc']) == 0:
self.log (5, 'PD10 0 Read')
else:
nav.createcsv (data['dmc'])
try:
@@ -736,6 +772,64 @@ class DB:
raise Warning
def addpruefzelle3 (self, data):
"""
Add Processdata 20 - pruefzelle 3
and update BDE data
"""
if len (self.getpruefzelle3 (data['dmc'])):
self.errlog ('PD20 for %s already exists - Overwrite and increment' % data['dmc'])
#FixMe
try:
cursor = self.executesql ("INSERT OR REPLACE INTO pruefzelle3 (dmc, endts, anzahl, pp01, pp02, pp03, pp04, pp05, pp06, pp07, pp08, pp09, pp10, pp11, pp12, pp13, pp14, pp15, pp16, pp17, pp18, pp19, pp20, pp21, pp22, pp23, pp24, pp25, pp26, pp27, pp28, pp29, pp30, pp31, pp32, pp33, pp34, pp35, pp36, pp37, pp38, pp39, pp40, pp41, pp42) VALUES ('%(dmc)s', '%(endts)s', '1', '%(pp01)s', '%(pp02)s', '%(pp03)s', '%(pp04)s', '%(pp05)s', '%(pp06)s', '%(pp07)s', '%(pp08)s', '%(pp09)s', '%(pp10)s', '%(pp11)s', '%(pp12)s', '%(pp13)s', '%(pp14)s', '%(pp15)s', '%(pp16)s', '%(pp17)s', '%(pp18)s', '%(pp19)s', '%(pp20)s', '%(pp21)s', '%(pp22)s', '%(pp23)s', '%(pp24)s', '%(pp25)s', '%(pp26)s', '%(pp27)s', '%(pp28)s', '%(pp29)s', '%(pp30)s', '%(pp31)s', '%(pp32)s', '%(pp33)s', '%(pp34)s', '%(pp35)s', '%(pp36)s', '%(pp37)s', '%(pp38)s', '%(pp39)s', '%(pp40)s', '%(pp41)s', '%(pp42)s');" % data)
except:
print ("Couldnt insert PD30 pruefzelle3")
raise Warning
self.updatebde (data['dmc'], 'pruefzelle3', data['bauteilstatus'])
if 0 and data['bauteilstatus'] == 'n.i.O.':
self.log (5, 'PD20 n.i.O updatding part data')
l = self.getbde (data['dmc'])[0]
#dmc, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv
_states = {'pruefzelle1' : l[6],
'putzzelle' : l[7],
'chiron' : l[8],
'blindniet': l[9],
'bajonettclip': l[10],
'cclip': l[11],
'masseblech' : l[12]
}
for i in range (1,42):
if data ['pp%02d' % i] == 'n.i.O.':
where, field = pruefpunkte ['pp%02d' % i]
if _states [where] != 'n.Durchlaufen':
self.log (5, 'PD10 pp%02d n.i.O updating part data and State in bde %s' % (i, where))
self.updateinformation (data['dmc'], where, field, 'n.i.O.')
self.updatebde (data['dmc'], where, 'n.i.O.')
else:
self.log (5, 'PD10 pp%02d %s nDurchlaufen do nothing' % (i, where))
def getpruefzelle3 (self, dmc):
"""
Get Processdata 20 - prufezelle3
"""
try:
cursor = self.executesql ("SELECT dmc, endts, anzahl, pp01, pp02, pp03, pp04, pp05, pp06, pp07, pp08, pp09, pp10, pp11, pp12, pp13, pp14, pp15, pp16, pp17, pp18, pp19, pp20, pp21, pp22, pp23, pp24, pp25, pp26, pp27, pp28, pp29, pp30, pp31, pp32, pp33, pp34, pp35, pp36, pp37, pp38, pp39, pp40, pp41, pp42 FROM pruefzelle3 WHERE dmc = '%s';" % dmc)
except:
print ("Couldnt get PD20 pruefzelle3")
raise Warning
return cursor.fetchall ()
def getactuallimits (self):
"""
Get limits for processvalues

86
bde.py
View File

@@ -162,6 +162,9 @@ class BDEServer ():
if teltype == 'DM01' and self.connections[_channel][(client_id)][3] !='PD01':
print ("Invalid Telegram from this Station")
raise Warning
if teltype == 'DM20' and self.connections[_channel][(client_id)][3] !='PD20':
print ("Invalid Telegram from this Station")
raise Warning
DB_con = self.connections['DB']
@@ -175,7 +178,7 @@ class BDEServer ():
self.errlog (' DT_handler : FixMe repeated Tel %d' % (count))
_quit = 0
elif (count == 0) or (count == (count_old % 32767) + 1) or (count == -1) or self.connections[_channel][(client_id)][3] == 'PD09' :
elif (count == 0) or (count == (count_old % 32767) + 1) or (count == -1) or self.connections[_channel][(client_id)][3] == 'PD09' or self.connections[_channel][(client_id)][3] == 'PD20' :
#Other Telegram received
self.log (3, "DT_handler : Tel Counter valid %d" % (count))
_quit = ret_val['check']
@@ -216,6 +219,13 @@ class BDEServer ():
elif teltype == 'PD10':
self.message (3, ' DT_handler : Store Data from PD10 Pruefzelle2 for %s' % ret_val['dmc'])
DB_con.addpruefzelle2 (ret_val)
elif teltype == 'PD20':
#FiXMe check if Part in Table
if len (DB_con.getbde (ret_val['dmc'])):
self.message (3, ' DT_handler : Store Data from PD20 Pruefzelle Fill in BDE - G11 for %s' % ret_val['dmc'])
DB_con.addpruefzelle3 (ret_val)
else:
self.message (3, ' DT_handler : DONNOT Store Data from PD20 Pruefzelle Fill for %s' % ret_val['dmc'])
elif teltype == 'PD99':
self.message (3, ' DT_handler : Store Data from PD99 Chiron for %s' % ret_val['dmc'])
DB_con.addchiron (ret_val)
@@ -235,7 +245,7 @@ class BDEServer ():
self.log (2, ' DT_handler : Tel count FAILED --> Synchronisation')
_quit = 99
if _quit > -1 and teltype not in ('DM01', 'DM09'):
if _quit > -1 and teltype not in ('DM01', 'DM09', 'DM20'):
# Prepare Quit teltgramm
self.generatequit (count, _channel, client_id, teltype, ret_val ['src'], ret_val ['dst'], _quit)
self.message (5, ' DT_handler : Quit Tel queued: Result: %d teltype %s' % (_quit, teltype))
@@ -247,14 +257,80 @@ class BDEServer ():
elif teltype == 'DM09':
self.message (5, ' DT_handler : Send PD Data Tel queued:"')
self.generatepd (count, _channel, client_id, teltype, ret_val ['src'], ret_val ['dst'], ret_val['dmc'])
elif teltype == 'DM20':
self.message (5, ' DT_handler : Send PD Data Tel queued:"')
self.generatepdfill (count, _channel, client_id, teltype, ret_val ['src'], ret_val ['dst'], ret_val['dmc'])
else:
self.message (1,'"DT_Handler : unknown Telegram type, no Number')
self.debug ()
def generatepdfill (self, count, channel, client_id, msgtype, src, dst, dmc):
"""
Generate an QUIT telegram for Fill and send it
"""
DB_con = self.connections['DB']
self. message (3, " generatepdfill : generate PD-Fill Telegram for %s on channel %s, dmc %s" % (msgtype, channel, dmc))
#Fillword
_data = bytes ([((count >> 8) & 0xFF)]) + bytes ([(count & 0xFF)])
_data2 = \
doublechar (src) +\
doublechar (dst) +\
msgtype + + (4 - len(dmc)) * ' '
_dmc = dmc + (28 - len(dmc)) * ' '
#Bde Daten holen
bde = DB_con.getbde (dmc)
_typ = ' '.encode ()
_var = ' '.encode ()
_st = '0' # Gesamtstatus
_bnst = ' '
_bajost = ' '
_ccst = ' '
_mbst = ' '
_err = bytes ([0])
if len (bde):
dmc1, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv, pruefzelle3, gesamtstatus = bde [0]
_t = 0
if 'G11' in variante:
_typ = bytes ([1])
_t = 1
elif 'G3' in variante:
_typ = bytes ([2])
_t = 2
_rl = 0
if 'RL' in variante:
_rl = 1
if 'HUD' in variante:
_var = bytes ([_rl + 2])
else:
_var = bytes ([_rl])
_bnst = bauteilstatusRev.get (blindniet)
_bajost = bauteilstatusRev.get (bajonettclip)
_ccst = bauteilstatusRev.get (cclip)
_mbst = bauteilstatusRev.get (masseblech)
if _bnst == '1' and _bajost == '1' and _ccst == '1' and _mbst == '1':
_st == '1'
else:
_st == '2'
_data += _data2.encode ()
_data += _dmc.encode () + _typ + _var + _st.encode () + _err
print (len (_data))
print (_data)
self.queue_add (channel, client_id, msgtype, _data)
return
def generatelockdata (self, count, channel, client_id, msgtype, src, dst, dmc):
"""
Generate an QUIT telegram and send it
Generate an QUIT telegram with lockdata and send it
"""
DB_con = self.connections['DB']
@@ -308,7 +384,7 @@ class BDEServer ():
_ccst = ' '
_mbst = ' '
if len (bde):
dmc1, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv = bde [0]
dmc1, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv, pruefzelle3, gesamtstatus = bde [0]
_t = 0
if 'G11' in variante:
_typ = bytes ([1]) + bytes ([0])
@@ -798,7 +874,7 @@ if __name__ == '__main__':
server = BDEServer (address = IP_BDE, verbose = loglevel, debug = debuglevel, DB = (DBFILE, DBTALOG) )
for i in chain (range (1, 11), range (98,100)):
for i in chain (range (1, 11), range (20, 21), range (98,100)):
IPPLC = config.get ('PD%02d' % i , 'ipsps')
if not IPPLC:
print ('No IP for PD%02d' % i)