Added PD request from Station 09

This commit is contained in:
2016-10-20 08:05:15 +02:00
parent 489d411945
commit 2148449c4d
9 changed files with 314 additions and 11 deletions

11
DB.py
View File

@@ -4,7 +4,7 @@ import sqlite3 as sqlite
#from pysqlite2 import dbapi2 as sqlite
from sys import exit
from datetime import datetime
import os
import os, shutil
from pruefpunkte import pruefpunkte
from Navision import NAV
@@ -482,6 +482,11 @@ class DB:
nav = NAV (path = "/srv/navision/", db = self)
nav.createcsv (data['dmc'])
try:
shutil.move ("/srv/navision/%s.csv" % data['dmc'], "/srv/navision/share")
except:
self.errlog ("/srv/navision/share/%s.csv already esist" % data['dmc'])
os.rename ("/srv/navision/%s.csv" % data['dmc'], "/srv/navision/share%s.csv" % data['dmc'])
self.updatebde (data['dmc'], 'csv', 'erzeugt')
@@ -492,7 +497,7 @@ class DB:
"""
try:
cursor = self.executesql ("UPDATE bde SET %s = '%s' WHERE dmc = '%s' AND '%s' <> 'n.Bearbeitet';" % (where, value, dmc, where))
cursor = self.executesql ("UPDATE bde SET %s = '%s' WHERE dmc = '%s';" % (where, value, dmc))
except:
self.errlog ("Couldnt update field %s in table %s" % (where, field))
@@ -501,7 +506,7 @@ class DB:
return
try:
cursor = self.executesql ("UPDATE %s SET %s = '%s' WHERE dmc = '%s';" % (where, field, value, dmc))
cursor = self.executesql ("UPDATE %s SET %s = '%s' WHERE dmc = '%s' AND %s <> 'n.Bearbeitet';" % (where, field, value, dmc, field))
except:
self.errlog ("Couldnt update field %s in table %s" % (where, field))

68
DM09_tel.py Executable file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/python
__author__ = "Michael Rest"
__date__ = "2016/09/01"
__email__ = "mr@mir.systems"
__version__ = "$Revision: 1.1 $"[11:-2]
from telegram import TELEGRAM, TEL_DM09
from telegram import tsdecode
from states import *
def fromstring (data):
"""
Decode the binary representation of a PD_tel from the given
parameter and note the data in the instance of the object.
Parameters:
data: The binary form of the TELEGRAM
"""
tel = TEL_DM09 ()
try:
tel.attrib['nr'] = (data [0] << 8) + data [1]
except:
print ("Debug-Nr", data[0], data[1])
tel.attrib['src'] = data [2:4].decode ()
tel.attrib['dst'] = data [4:6].decode ()
tel.attrib['type'] = data [6:10].decode ()
tel.attrib['dmc'] = (data [10:38]).decode ().rstrip (' \x00')
return tel
class TEL_DM09 (TELEGRAM):
def __init__ (self, nr = 0, src = '09', dst = 'PC', *args, **args2):
TELEGRAM.__init__(self)
self.code = TEL_DM09
self.attrib['nr'] = nr
self.attrib['src'] = src
self.attrib['dst'] = dst
self.attrib['type'] = 'DM09'
self.attrib['dmc'] = '1234'
self.attrib['aufnahme'] = 0
self.len = 2220907
return
def identify (self):
"""
This method can be used to identify a TELEGRAM by string.
"""
return "DM09 TELEGRAM"
def __repr__ (self):
"""
Print a representation of the TPDU. Use this method via
`-pair to transfer it over the wire. This will just return
the header data and not the real data!
"""
# Note that the data is not included in the length
return "%c%c%c" % (2, self.code << 4, self.number) + self.data
def __str__ (self):
"""
Return a readable and quite verbose overview of the TPDU instance.
Use this for debugging purposes or if you're just curious.
"""
return "Packet: %s Data: %s" % (self.identify (), repr (self.attrib))

View File

@@ -40,9 +40,10 @@ class NAV:
csvdata [1] = bdedata ['dmc']
#3 FINOBADMC
csvheader [2] = 'FINOBADMC'
#4 Typ FiXme
csvdata [2] = artikelnummer.get (bdedata ['variante'], '')
#4 Typ
csvheader [3] = 'Typ'
csvdata [3] = artikelnummer.get (bdedata ['variante'], '')
csvdata [3] = bdedata ['variante']
#5 Zeitstempel Start
csvheader [4] = 'Zeitstempel_Start'
csvdata [4] = bdedata ['startts']
@@ -86,7 +87,7 @@ class NAV:
csvdata [97] = pz1data ['endts']
#115 - 154
for i in range (40):
csvdata [114 + i] = pz1data ['pp%02d' % (i + 1)]
csvdata [114 + i] = bearbeitungstatusNav [pz1data ['pp%02d' % (i + 1)]]
del pz1field
del pz1data
@@ -360,5 +361,5 @@ if __name__ == "__main__":
conn = DB ('/opt/data/bde.sqlite', '/tmp/talog.sql', logtest, errlogtest)
nav = NAV (path = "/srv/navision/", db = conn)
dmc = '1234'
dmc = '40653361280716929764415'
dmc = '40656431290716929764415'
nav.createcsv (dmc)

View File

@@ -43,7 +43,7 @@ ipsps = 192.168.6.40
[PD09]
name = Nacharbeit
ipsps = 192.168.6.100
ipsps = 192.168.6.180
[PD10]
name = Messzelle2

178
bde.py
View File

@@ -16,6 +16,7 @@ import tel_decode
from log import strlog
from DB import DB
from itertools import chain
from states import *
def doublechar (value):
@@ -155,8 +156,9 @@ class BDEServer ():
teltype = ret_val['type']
if teltype != self.connections[_channel][(client_id)][3]:
print ("Invalid Telegram from this Station")
raise Warning
if teltype == 'DM09' and self.connections[_channel][(client_id)][3] !='PD09':
print ("Invalid Telegram from this Station")
raise Warning
DB_con = self.connections['DB']
@@ -201,6 +203,8 @@ class BDEServer ():
elif teltype == 'PD08':
self.message (3, ' DT_handler : Store Data from PD08 Masseblech for %s' % ret_val['dmc'])
DB_con.addmasseblech (ret_val)
elif teltype == 'DM09':
self.message (3, ' DT_handler : Requested Data from PD09 Nacharbeit for %s' % ret_val['dmc'])
elif teltype == 'PD10':
self.message (3, ' DT_handler : Store Data from PD10 Pruefzelle2 for %s' % ret_val['dmc'])
DB_con.addpruefzelle2 (ret_val)
@@ -223,17 +227,184 @@ class BDEServer ():
self.log (2, ' DT_handler : Tel count FAILED --> Synchronisation')
_quit = 99
if _quit > -1:
if _quit > -1 and teltype != 'DM09':
# 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:"')
count_old = count
self.connections[_channel][(client_id)][1] = count
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'])
else:
self.message (1,'"DT_Handler : unknown Telegram type, no Number')
self.debug ()
def generatepd (self, count, channel, client_id, msgtype, src, dst, dmc):
"""
Generate an QUIT telegram and send it
"""
DB_con = self.connections['DB']
self. message (3, " generatepd : generate PD Telegram for %s on channel %s, dmc %s" % (msgtype, channel, dmc))
_data = chr ((count >> 8) & 0xFF) + chr (count & 0xFF)
_data = bytes ([((count >> 8) & 0xFF)]) + bytes ([(count & 0xFF)])
_data2 = \
doublechar (src) +\
doublechar (dst) +\
msgtype
_dmc = dmc + (28 - len(dmc)) * ' '
_start = 14 * ' '
_end = 14 * ' '
#Bede Daten holen
bde = DB_con.getbde (dmc)
_typ = ' '.encode ()
_var = ' '.encode ()
_bnst = ' '
_bajost = ' '
_ccst = ' '
_mbst = ' '
if len (bde):
dmc1, startts, endts, ladungstraeger, seriennr, variante, pruefzelle1, putzzelle, chiron, blindniet, bajonettclip, cclip, masseblech, pruefzelle2, nacharbeit, csv = bde [0]
if 'G11' in variante:
_typ = bytes (1) + bytes (0)
elif 'G3' in variante:
_typ = bytes (2) + bytes (0)
_var = 0
if 'RL' in variante:
_var = 1
if 'HUD' in variante:
_var = bytes (_typ + 2) + bytes (0)
else:
_var = bytes (_typ) + bytes (0)
_bnst = bauteilstatusRev.get (blindniet)
_bajost = bauteilstatusRev.get (bajonettclip)
_ccst = bauteilstatusRev.get (cclip)
_mbst = bauteilstatusRev.get (masseblech)
bn = DB_con.getblindniet (dmc)
_NietM8st01 = ' '
_NietM8st02 = ' '
_DGBM8st01 = ' '
_DGBM8st02 = ' '
_DGBM8st03 = ' '
_DGBM8st04 = ' '
_NietM6st01 = ' '
_NietM6st02 = ' '
_NietM6st03 = ' '
_NietM6st04 = ' '
_NietM6st05 = ' '
if len (bn):
dmc1, startts, endts, DGBM8status01, DGBM8status02, DGBM8status03, DGBM8status04, NietM8status01, NietM8status02, NietM6status01, NietM6status02, NietM6status03, NietM6status04, NietM6status05, DGBM8M01, DGBM8D01, DGBM8W01, DGBM8T01, DGBM8M02, DGBM8D01, DGBM8W02, DGBM8T02, DGBM8M03, DGBM8D03, DGBM8W03, DGBM8T03, DGBM8M04, DGBM8D04, DGBM8W04, DGBM8T04, NietM8F01, NietM8S01, NietM8F02, NietM8S02, NietM6F01, NietM6S01, NietM6F02, NietM6S02, NietM6F03, NietM6S03, NietM6F04, NietM6S04, NietM6F05, NietM6S05 = bn [0]
_NietM8st01 = bearbeitungstatusRev.get (NietM8status01)
_NietM8st02 = bearbeitungstatusRev.get (NietM8status02)
_DGBM8st01 = bearbeitungstatusRev.get (DGBM8status01)
_DGBM8st02 = bearbeitungstatusRev.get (DGBM8status02)
_DGBM8st03 = bearbeitungstatusRev.get (DGBM8status03)
_DGBM8st04 = bearbeitungstatusRev.get (DGBM8status04)
_NietM6st01 = bearbeitungstatusRev.get (NietM6status01)
_NietM6st02 = bearbeitungstatusRev.get (NietM6status02)
_NietM6st03 = bearbeitungstatusRev.get (NietM6status03)
_NietM6st04 = bearbeitungstatusRev.get (NietM6status04)
_NietM6st05 = bearbeitungstatusRev.get (NietM6status05)
_bnvalues = ' ' * 70
bj = DB_con.getbajonettclip (dmc)
_bj1 = ' '
_bj2 = ' '
_bj3 = ' '
_bj4 = ' '
if len (bj):
dmc1, startts, endts, aufnahme, bajostatus01, bajostatus02, bajostatus03, bajostatus04 = bj [0]
_bj1 = bearbeitungstatusRev.get (bajostatus01)
_bj2 = bearbeitungstatusRev.get (bajostatus02)
_bj3 = bearbeitungstatusRev.get (bajostatus03)
_bj4 = bearbeitungstatusRev.get (bajostatus04)
_bjspace = ' ' * 25
cc = DB_con.getcclip (dmc)
_ccs1 = ' '
_ccs2 = ' '
_ccs3 = ' '
_ccs4 = ' '
_ccs5 = ' '
_ccs6 = ' '
_ccs7 = ' '
_ccs8 = ' '
_ccs9 = ' '
_ccs10 = ' '
_ccs11 = ' '
_ccs12 = ' '
_ccs13 = ' '
_ccs14 = ' '
_ccs15 = ' '
_ccs16 = ' '
_ccs17 = ' '
_ccs18 = ' '
if len (cc):
dmc1, startts, endts, aufnahme, clipstatus01, clipstatus02, clipstatus03, clipstatus04, clipstatus05, clipstatus06, clipstatus07, clipstatus08, clipstatus09, clipstatus10, clipstatus11, clipstatus12, clipstatus13, clipstatus14, clipstatus15, clipstatus16, clipstatus17, clipstatus18 = cc [0]
_ccs1 = bearbeitungstatusRev.get (clipstatus01)
_ccs2 = bearbeitungstatusRev.get (clipstatus02)
_ccs3 = bearbeitungstatusRev.get (clipstatus03)
_ccs4 = bearbeitungstatusRev.get (clipstatus04)
_ccs5 = bearbeitungstatusRev.get (clipstatus05)
_ccs6 = bearbeitungstatusRev.get (clipstatus06)
_ccs7 = bearbeitungstatusRev.get (clipstatus07)
_ccs8 = bearbeitungstatusRev.get (clipstatus08)
_ccs9 = bearbeitungstatusRev.get (clipstatus09)
_ccs10 = bearbeitungstatusRev.get (clipstatus10)
_ccs11 = bearbeitungstatusRev.get (clipstatus11)
_ccs12 = bearbeitungstatusRev.get (clipstatus12)
_ccs13 = bearbeitungstatusRev.get (clipstatus13)
_ccs14 = bearbeitungstatusRev.get (clipstatus14)
_ccs15 = bearbeitungstatusRev.get (clipstatus15)
_ccs16 = bearbeitungstatusRev.get (clipstatus16)
_ccs17 = bearbeitungstatusRev.get (clipstatus17)
_ccs18 = bearbeitungstatusRev.get (clipstatus18)
_ccspace = 'b' * 11
mb = DB_con.getmasseblech (dmc)
_ae = ' '
_se = ' '
_mb = ' '
_bl = ' '
_km = ' '
if len (mb):
dmc1, startts, endts, ausgleichselement, schallisolierung, masseblech, blindniet, kombimutter, fniet, sniet, mmutter, dmutter, wmutter, tmutter = mb [0]
_ae = bearbeitungstatusRev.get (ausgleichselement)
_se = bearbeitungstatusRev.get (schallisolierung)
_mb = bearbeitungstatusRev.get (masseblech)
_bl = bearbeitungstatusRev.get (blindniet)
_km = bearbeitungstatusRev.get (kombimutter)
_mbspace = 'a' * 30
_data = _data + _data2.encode () + _dmc.encode () + _start.encode () + _end.encode () + _typ + _var + _bnst.encode () + \
_NietM8st01.encode () + _NietM8st02.encode () + _DGBM8st01.encode () + _DGBM8st02.encode () + _DGBM8st03.encode () + _DGBM8st04.encode () + \
_NietM6st01.encode () + _NietM6st02.encode () + _NietM6st03.encode () + _NietM6st04.encode () + _NietM6st05.encode () + ' '.encode () + \
_bnvalues.encode () + \
_bajost.encode () + _bj1.encode () + _bj2.encode () + _bj3.encode () + _bj4.encode () + _bjspace.encode () + \
_ccst.encode () + _ccs1.encode () + _ccs2.encode () + _ccs3.encode () + _ccs4.encode () + _ccs5.encode () + _ccs6.encode () + _ccs7.encode () +\
_ccs8.encode () + _ccs9.encode () + _ccs10.encode () + _ccs11.encode () + _ccs12.encode () + _ccs13.encode () + _ccs14.encode () + _ccs15.encode () +\
_ccs16.encode () + _ccs17.encode () + _ccs18.encode () + _ccspace.encode () + \
_mbst.encode () + _ae.encode () + _se.encode () + _mb.encode () + _bl.encode () + _km.encode () + _mbspace.encode ()
self.queue_add (channel, client_id, msgtype, _data)
return
def generatequit (self, count, channel, client_id, msgtype, src, dst, quit):
"""
Generate an QUIT telegram and send it
@@ -403,6 +574,7 @@ class BDEServer ():
except:
client_ip, client_port = '0.0.0.0', 0
self.message (1, ' read empty telegramm - client %s %d closed connection - close socket !!!!'% (client_ip, client_port))
raise Warning
if (client_ip, client_port) in self.sockets:
socket, state = self.sockets [(client_ip, client_port)]
self.message (2, ' delete socket')

43
pruefpunkte.py Normal file
View File

@@ -0,0 +1,43 @@
pruefpunkte = {
'pp01' : ['cclip', 'clipstatus03'],
'pp02' : ['cclip', 'clipstatus02'],
'pp03' : ['cclip', 'clipstatus05'],
'pp04' : ['blindniet', 'NietM6status01'],
'pp05' : ['cclip', 'clipstatus06'],
'pp06' : ['masseblech', 'blindniet'],
'pp07' : ['cclip', 'clipstatus04'],
'pp08' : ['cclip', 'clipstatus09'],
'pp09' : ['cclip', 'clipstatus14'],
'pp10' : ['blindniet', 'NietM8status01'],
'pp11' : ['cclip', 'clipstatus10'],
'pp12' : ['cclip', 'clipstatus11'],
'pp13' : ['cclip', 'clipstatus12'],
'pp14' : ['cclip', 'clipstatus15'],
'pp15' : ['blindniet', 'NietM8status02'],
'pp16' : ['cclip', 'clipstatus13'],
'pp17' : ['cclip', 'clipstatus16'],
'pp18' : ['cclip', 'clipstatus17'],
'pp19' : ['masseblech', 'ausgleichselement'],
'pp20' : ['blindniet', 'NietM6status02'],
'pp21' : ['blindniet', 'DGBM8status01'],
'pp22' : ['blindniet', 'DGBM8status02'],
'pp23' : ['blindniet', 'NietM6status03'],
'pp24' : ['bajonettclip', 'bajostatus02'],
'pp25' : ['cclip', 'clipstatus07'],
'pp26' : ['blindniet', 'DGBM8status03'],
'pp27' : ['blindniet', 'DGBM8status04'],
'pp28' : ['bajonettclip', 'bajostatus03'],
'pp29' : ['blindniet', 'NietM6status04'],
'pp30' : ['blindniet', 'NietM6status05'],
'pp31' : ['bajonettclip', 'bajostatus04'],
'pp32' : ['cclip', 'clipstatus08'],
'pp33' : ['bajonettclip', 'bajostatus01'],
'pp34' : ['cclip', 'clipstatus01'],
'pp35' : ['cclip', 'clipstatus18'],
'pp36' : ['chiron', ''],
'pp37' : ['chiron', ''],
'pp38' : ['chiron', ''],
'pp39' : ['chiron', ''],
'pp40' : ['chiron', ''],
'pp41' : ['masseblech', 'schaumring']
}

View File

@@ -1,6 +1,10 @@
bauteilstatus = {'0' : 'n.Durchlaufen',
'1' : 'i.O.',
'2' : 'n.i.O.'}
bauteilstatusRev = {'' : '0',
'n.Durchlaufen' : '0',
'i.O.' : '1',
'n.i.O.' : '2'}
bauteilstatusNav = {'' : '',
'n.Durchlaufen' : 'nicht durchlaufen',
'i.O.' : 'i.o durchlaufen',
@@ -8,6 +12,10 @@ bauteilstatusNav = {'' : '',
bearbeitungsstatus = {'0' : 'n.Bearbeitet',
'1' : 'i.O.',
'2' : 'n.i.O.'}
bearbeitungstatusRev = {'' : '0',
'n.Bearbeitet' : '0',
'i.O.' : '1',
'n.i.O.' : '2'}
bearbeitungstatusNav = {'' : '',
'n.Bearbeitet' : 'nicht durchlaufen',
'i.O.' : 'i.o durchlaufen',

View File

@@ -34,6 +34,10 @@ def decode_PD08 (data):
from PD08_tel import fromstring
return fromstring (data)
def decode_DM09 (data):
from DM09_tel import fromstring
return fromstring (data)
def decode_PD10 (data):
from PD10_tel import fromstring
return fromstring (data)
@@ -58,6 +62,7 @@ b'PD05': decode_PD05,
b'PD06': decode_PD06,
b'PD07': decode_PD07,
b'PD08': decode_PD08,
b'DM09': decode_DM09,
b'PD98': decode_PD98,
b'PD99': decode_PD99,
b'PD10': decode_PD10,

View File

@@ -23,6 +23,7 @@ TEL_SCLS = 0xd #
TEL_STAT = 0xe #
TEL_QUIT = 0xf #
TEL_DM09 = 0x01 # Nacharbeit
#Helper
def tsdecode (data):
"""