blockweise übertragung bei mehr als 1024 Bytes

This commit is contained in:
2017-03-28 14:58:56 +02:00
parent 8c24fcceba
commit 9ded8c390a

View File

@@ -514,7 +514,10 @@ 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(12) try:
meldung = self.rpi.recv(12)
except:
continue
comtime = 0 comtime = 0
while meldung[:4] in msgcli: while meldung[:4] in msgcli:
@@ -548,35 +551,48 @@ class RevPiSlave(Thread):
if command == b'DATA': if command == b'DATA':
# Processabbild übertragen # Processabbild übertragen
bcount = 0
blength = lenval
fh_proc.seek(startval) fh_proc.seek(startval)
while bcount < blength:
self.rpi.send(fh_proc.read(1024)) sendcount = lenval
bcount += 1024 try:
while sendcount > 1024:
sendcount -= self.rpi.send(fh_proc.read(1024))
self.rpi.send(fh_proc.read(sendcount))
except:
break
if command == b'SEND': if command == b'SEND':
# Ausgänge empfangen # Ausgänge empfangen
block = self.rpi.recv(lenval) try:
block = self.rpi.recv(lenval)
except:
break
fh_proc.seek(startval) fh_proc.seek(startval)
fh_proc.write(block) fh_proc.write(block)
# Nächste Meldung erhalten # Nächste Meldung erhalten
meldung = self.rpi.recv(12) try:
meldung = self.rpi.recv(12)
except:
break
# Verarbeitungszeit prüfen # Verarbeitungszeit prüfen
comtime = default_timer() - ot comtime = default_timer() - ot
if comtime > self.deadtime: if comtime > self.deadtime:
proginit.logger.error( proginit.logger.warning(
"runtime more than {} ms: {}".format( "runtime more than {} ms: {}".format(
int(self.deadtime * 1000), int(comtime * 1000) int(self.deadtime * 1000), int(comtime * 1000)
) )
) )
break #break
fh_proc.close() fh_proc.close()
self.rpi.shutdown(socket.SHUT_RDWR) try:
self.rpi.close() self.rpi.shutdown(socket.SHUT_RDWR)
self.rpi.close()
except:
pass
if self.zeroonexit or comtime > self.deadtime and self.zeroonerror: if self.zeroonexit or comtime > self.deadtime and self.zeroonerror:
_zeroprocimg() _zeroprocimg()
@@ -741,7 +757,7 @@ class RevPiPyLoad():
if self.plcslave: if self.plcslave:
# Slaveausfuehrung übergeben # Slaveausfuehrung übergeben
th_plc = RevPiSlave() th_plc = RevPiSlave()
th_plc.zeroonerror = self.zerooneerror th_plc.zeroonerror = self.zeroonerror
th_plc.zeroonexit = self.zeroonexit th_plc.zeroonexit = self.zeroonexit
else: else:
@@ -761,7 +777,7 @@ class RevPiPyLoad():
th_plc.autoreload = self.autoreload th_plc.autoreload = self.autoreload
th_plc.gid = int(self.globalconfig["DEFAULT"].get("plcgid", 65534)) th_plc.gid = int(self.globalconfig["DEFAULT"].get("plcgid", 65534))
th_plc.uid = int(self.globalconfig["DEFAULT"].get("plcuid", 65534)) th_plc.uid = int(self.globalconfig["DEFAULT"].get("plcuid", 65534))
th_plc.zeroonerror = self.zeroonerror th_plc.zeroonerror = self.zeroonerror
th_plc.zeroonexit = self.zeroonexit th_plc.zeroonexit = self.zeroonexit
proginit.logger.debug("created PLC watcher") proginit.logger.debug("created PLC watcher")