meldungen mit adress und längenangabe

This commit is contained in:
2017-03-28 09:50:50 +02:00
parent a96abb11a6
commit d98854dbca

View File

@@ -33,7 +33,6 @@ begrenzt werden!
import gzip import gzip
import proginit import proginit
import os import os
import pickle
import shlex import shlex
import signal import signal
import socket import socket
@@ -515,13 +514,24 @@ class RevPiSlave(Thread):
fh_proc = open(procimg, "r+b", 0) fh_proc = open(procimg, "r+b", 0)
# Erste Meldung erhalten # Erste Meldung erhalten
meldung = self.rpi.recv(4) meldung = self.rpi.recv(12)
comtime = 0 comtime = 0
while meldung in msgcli: while meldung[:4] in msgcli:
ot = default_timer() ot = default_timer()
if meldung == b'PICT': # Meldung zerlegen
command = meldung[:4]
try:
startval = int(meldung[4:-4])
except:
startval = 0
try:
lenval = int(meldung[-4:])
except:
lenval = 0
if command == b'PICT':
# piCtory Konfiguration senden # piCtory Konfiguration senden
proginit.logger.debug("transfair pictory configuration") proginit.logger.debug("transfair pictory configuration")
fh_pic = open(configrsc, "rb") fh_pic = open(configrsc, "rb")
@@ -536,27 +546,23 @@ class RevPiSlave(Thread):
# Abschlussmeldung # Abschlussmeldung
self.rpi.send(b'PICOK') self.rpi.send(b'PICOK')
if meldung == b'DATA': if command == b'DATA':
proginit.logger.debug("read process image")
# Processabbild übertragen # Processabbild übertragen
block = 0 bcount = 0
fh_proc.seek(0) blength = lenval
while block < 4: fh_proc.seek(startval)
while bcount < blength:
self.rpi.send(fh_proc.read(1024)) self.rpi.send(fh_proc.read(1024))
block += 1 bcount += 1024
if meldung == b'SEND':
proginit.logger.debug("write to process image")
if command == b'SEND':
# Ausgänge empfangen # Ausgänge empfangen
block = self.rpi.recv(1024) block = self.rpi.recv(lenval)
test = pickle.loads(block) fh_proc.seek(startval)
fh_proc.seek(test[0]) fh_proc.write(block)
fh_proc.write(test[1])
# Nächste Meldung erhalten # Nächste Meldung erhalten
meldung = self.rpi.recv(4) meldung = self.rpi.recv(12)
# Verarbeitungszeit prüfen # Verarbeitungszeit prüfen
comtime = default_timer() - ot comtime = default_timer() - ot