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 pysqlite2 import dbapi2 as sqlite
from sys import exit from sys import exit
from datetime import datetime from datetime import datetime
import os import os, shutil
from pruefpunkte import pruefpunkte from pruefpunkte import pruefpunkte
from Navision import NAV from Navision import NAV
@@ -482,6 +482,11 @@ class DB:
nav = NAV (path = "/srv/navision/", db = self) nav = NAV (path = "/srv/navision/", db = self)
nav.createcsv (data['dmc']) 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') self.updatebde (data['dmc'], 'csv', 'erzeugt')
@@ -492,7 +497,7 @@ class DB:
""" """
try: 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: except:
self.errlog ("Couldnt update field %s in table %s" % (where, field)) self.errlog ("Couldnt update field %s in table %s" % (where, field))
@@ -501,7 +506,7 @@ class DB:
return return
try: 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: except:
self.errlog ("Couldnt update field %s in table %s" % (where, field)) 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'] csvdata [1] = bdedata ['dmc']
#3 FINOBADMC #3 FINOBADMC
csvheader [2] = 'FINOBADMC' csvheader [2] = 'FINOBADMC'
#4 Typ FiXme csvdata [2] = artikelnummer.get (bdedata ['variante'], '')
#4 Typ
csvheader [3] = 'Typ' csvheader [3] = 'Typ'
csvdata [3] = artikelnummer.get (bdedata ['variante'], '') csvdata [3] = bdedata ['variante']
#5 Zeitstempel Start #5 Zeitstempel Start
csvheader [4] = 'Zeitstempel_Start' csvheader [4] = 'Zeitstempel_Start'
csvdata [4] = bdedata ['startts'] csvdata [4] = bdedata ['startts']
@@ -86,7 +87,7 @@ class NAV:
csvdata [97] = pz1data ['endts'] csvdata [97] = pz1data ['endts']
#115 - 154 #115 - 154
for i in range (40): 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 pz1field
del pz1data del pz1data
@@ -360,5 +361,5 @@ if __name__ == "__main__":
conn = DB ('/opt/data/bde.sqlite', '/tmp/talog.sql', logtest, errlogtest) conn = DB ('/opt/data/bde.sqlite', '/tmp/talog.sql', logtest, errlogtest)
nav = NAV (path = "/srv/navision/", db = conn) nav = NAV (path = "/srv/navision/", db = conn)
dmc = '1234' dmc = '1234'
dmc = '40653361280716929764415' dmc = '40656431290716929764415'
nav.createcsv (dmc) nav.createcsv (dmc)

View File

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

178
bde.py
View File

@@ -16,6 +16,7 @@ import tel_decode
from log import strlog from log import strlog
from DB import DB from DB import DB
from itertools import chain from itertools import chain
from states import *
def doublechar (value): def doublechar (value):
@@ -155,8 +156,9 @@ class BDEServer ():
teltype = ret_val['type'] teltype = ret_val['type']
if teltype != self.connections[_channel][(client_id)][3]: if teltype != self.connections[_channel][(client_id)][3]:
print ("Invalid Telegram from this Station") if teltype == 'DM09' and self.connections[_channel][(client_id)][3] !='PD09':
raise Warning print ("Invalid Telegram from this Station")
raise Warning
DB_con = self.connections['DB'] DB_con = self.connections['DB']
@@ -201,6 +203,8 @@ class BDEServer ():
elif teltype == 'PD08': elif teltype == 'PD08':
self.message (3, ' DT_handler : Store Data from PD08 Masseblech for %s' % ret_val['dmc']) self.message (3, ' DT_handler : Store Data from PD08 Masseblech for %s' % ret_val['dmc'])
DB_con.addmasseblech (ret_val) 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': elif teltype == 'PD10':
self.message (3, ' DT_handler : Store Data from PD10 Pruefzelle2 for %s' % ret_val['dmc']) self.message (3, ' DT_handler : Store Data from PD10 Pruefzelle2 for %s' % ret_val['dmc'])
DB_con.addpruefzelle2 (ret_val) DB_con.addpruefzelle2 (ret_val)
@@ -223,17 +227,184 @@ class BDEServer ():
self.log (2, ' DT_handler : Tel count FAILED --> Synchronisation') self.log (2, ' DT_handler : Tel count FAILED --> Synchronisation')
_quit = 99 _quit = 99
if _quit > -1: if _quit > -1 and teltype != 'DM09':
# Prepare Quit teltgramm # Prepare Quit teltgramm
self.generatequit (count, _channel, client_id, teltype, ret_val ['src'], ret_val ['dst'], _quit) self.generatequit (count, _channel, client_id, teltype, ret_val ['src'], ret_val ['dst'], _quit)
self.message (5, ' DT_handler : Quit Tel queued:"') self.message (5, ' DT_handler : Quit Tel queued:"')
count_old = count count_old = count
self.connections[_channel][(client_id)][1] = 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: else:
self.message (1,'"DT_Handler : unknown Telegram type, no Number') self.message (1,'"DT_Handler : unknown Telegram type, no Number')
self.debug () 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): def generatequit (self, count, channel, client_id, msgtype, src, dst, quit):
""" """
Generate an QUIT telegram and send it Generate an QUIT telegram and send it
@@ -403,6 +574,7 @@ class BDEServer ():
except: except:
client_ip, client_port = '0.0.0.0', 0 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)) 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: if (client_ip, client_port) in self.sockets:
socket, state = self.sockets [(client_ip, client_port)] socket, state = self.sockets [(client_ip, client_port)]
self.message (2, ' delete socket') 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', bauteilstatus = {'0' : 'n.Durchlaufen',
'1' : 'i.O.', '1' : 'i.O.',
'2' : 'n.i.O.'} '2' : 'n.i.O.'}
bauteilstatusRev = {'' : '0',
'n.Durchlaufen' : '0',
'i.O.' : '1',
'n.i.O.' : '2'}
bauteilstatusNav = {'' : '', bauteilstatusNav = {'' : '',
'n.Durchlaufen' : 'nicht durchlaufen', 'n.Durchlaufen' : 'nicht durchlaufen',
'i.O.' : 'i.o durchlaufen', 'i.O.' : 'i.o durchlaufen',
@@ -8,6 +12,10 @@ bauteilstatusNav = {'' : '',
bearbeitungsstatus = {'0' : 'n.Bearbeitet', bearbeitungsstatus = {'0' : 'n.Bearbeitet',
'1' : 'i.O.', '1' : 'i.O.',
'2' : 'n.i.O.'} '2' : 'n.i.O.'}
bearbeitungstatusRev = {'' : '0',
'n.Bearbeitet' : '0',
'i.O.' : '1',
'n.i.O.' : '2'}
bearbeitungstatusNav = {'' : '', bearbeitungstatusNav = {'' : '',
'n.Bearbeitet' : 'nicht durchlaufen', 'n.Bearbeitet' : 'nicht durchlaufen',
'i.O.' : 'i.o durchlaufen', 'i.O.' : 'i.o durchlaufen',

View File

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

View File

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