Ausgänge im procimgserver immer als Bytes umgerechnet setzen

XML-Server für multicall konfigurieren
LogReader auf Byteübertragung umgeschrieben
Neue XML-Funktionen für LogReader Byteübertragung eingebaut
logger bei proginit.configure() nicht doppelt erzeugen
This commit is contained in:
2017-06-29 18:01:41 +02:00
parent 5950c819f2
commit 16263bb9ec
5 changed files with 45 additions and 83 deletions

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpipyload -->
<!-- Saved: 2017-06-27, 12:47:26 -->
<!-- Saved: 2017-06-29, 17:52:43 -->
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
<Project version="5.1">
<Language>en_US</Language>
@@ -9,7 +9,7 @@
<ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType>
<Description>Dieser Loader wird über das Init-System geladen und führt das angegebene Pythonprogramm aus. Es ist für den RevolutionPi gedacht um automatisch das SPS-Programm zu starten.</Description>
<Version>0.4.0</Version>
<Version>0.4.1</Version>
<Author>Sven Sager</Author>
<Email>akira@narux.de</Email>
<Eol index="-1"/>

View File

@@ -121,8 +121,10 @@ class ProcimgServer():
if type(value) == bytes or type(value) == bool:
self.rpi.devices[device][io].set_value(value)
else:
self.rpi.devices[device][io].value = value.to_bytes(
self.rpi.devices[device][io].length, byteorder="little"
self.rpi.devices[device][io].set_value(
value.to_bytes(
self.rpi.devices[device][io].length, byteorder="little"
)
)
self.rpi.devices.writeprocimg(device=device)

View File

@@ -102,7 +102,8 @@ def configure():
# Program logger
global logger
logger = logging.getLogger()
if logger is None:
logger = logging.getLogger()
# Alle handler entfernen
for lhandler in logger.handlers:

View File

@@ -33,7 +33,6 @@ begrenzt werden!
import gzip
import proginit
import os
import pickle
import shlex
import signal
import subprocess
@@ -54,7 +53,7 @@ from xmlrpc.server import SimpleXMLRPCServer
configrsc = None
picontrolreset = "/opt/KUNBUS/piControlReset"
procimg = "/dev/piControl0"
pyloadverion = "0.4.0"
pyloadverion = "0.4.1"
class LogReader():
@@ -71,9 +70,9 @@ class LogReader():
def __init__(self):
"""Instantiiert LogReader-Klasse."""
self.fhapp = None
self.posapp = 0
self.fhapplk = Lock()
self.fhplc = None
self.posplc = 0
self.fhplclk = Lock()
def closeall(self):
"""Fuehrt close auf File Handler durch."""
@@ -82,84 +81,45 @@ class LogReader():
if self.fhplc is not None:
self.fhplc.close()
def get_applines(self):
"""Gibt neue Zeilen ab letzen Aufruf zurueck.
@returns: list() mit neuen Zeilen"""
def load_applog(self, start, count):
"""Uebertraegt Logdaten Binaer.
@param start: Startbyte
@param count: Max. Byteanzahl zum uebertragen
@returns: Binary() der Logdatei
"""
if not os.access(proginit.logapp, os.R_OK):
return Binary(pickle.dumps([]))
return Binary(b'\x16') # 
elif start > os.path.getsize(proginit.logapp):
return Binary(b'\x19') # 
else:
if self.fhapp is None or self.fhapp.closed:
self.fhapp = open(proginit.logapp)
with self.fhapplk:
if self.fhapp is None or self.fhapp.closed:
self.fhapp = open(proginit.logapp, "rb")
lst_new = []
while True:
self.posapp = self.fhapp.tell()
line = self.fhapp.readline()
if line:
lst_new.append(line)
else:
self.fhapp.seek(self.posapp)
break
self.fhapp.seek(start)
return Binary(self.fhapp.read(count))
proginit.logger.debug(
"got {} new app log lines".format(len(lst_new))
)
return Binary(pickle.dumps(lst_new))
def load_plclog(self, start, count):
"""Uebertraegt Logdaten Binaer.
def get_applog(self):
"""Gibt die gesamte Logdatei zurueck.
@returns: str() mit Logdaten"""
if not os.access(proginit.logapp, os.R_OK):
proginit.logger.error(
"can not access logfile {}".format(proginit.logapp)
)
return Binary(pickle.dumps(""))
else:
if self.fhapp is None or self.fhapp.closed:
self.fhapp = open(proginit.logapp)
self.fhapp.seek(0)
return Binary(pickle.dumps(self.fhapp.read()))
@param start: Startbyte
@param count: Max. Byteanzahl zum uebertragen
@returns: Binary() der Logdatei
def get_plclines(self):
"""Gibt neue Zeilen ab letzen Aufruf zurueck.
@returns: list() mit neuen Zeilen"""
"""
if not os.access(proginit.logplc, os.R_OK):
proginit.logger.error(
"can not access logfile {}".format(proginit.logplc)
)
return Binary(pickle.dumps([]))
return Binary(b'\x16') # 
elif start > os.path.getsize(proginit.logplc):
return Binary(b'\x19') # 
else:
if self.fhplc is None or self.fhplc.closed:
self.fhplc = open(proginit.logplc)
with self.fhplclk:
if self.fhplc is None or self.fhplc.closed:
self.fhplc = open(proginit.logplc, "rb")
lst_new = []
while True:
self.posplc = self.fhplc.tell()
line = self.fhplc.readline()
if line:
lst_new.append(line)
else:
self.fhplc.seek(self.posplc)
break
proginit.logger.debug(
"got {} new pyloader log lines".format(len(lst_new))
)
return Binary(pickle.dumps(lst_new))
def get_plclog(self):
"""Gibt die gesamte Logdatei zurueck.
@returns: str() mit Logdaten"""
if not os.access(proginit.logplc, os.R_OK):
proginit.logger.error(
"can not access logfile {}".format(proginit.logplc)
)
return Binary(pickle.dumps(""))
else:
if self.fhplc is None or self.fhplc.closed:
self.fhplc = open(proginit.logplc)
self.fhplc.seek(0)
return Binary(pickle.dumps(self.fhplc.read()))
self.fhplc.seek(start)
return Binary(self.fhplc.read(count))
class PipeLogwriter(Thread):
@@ -581,12 +541,11 @@ class RevPiPyLoad():
allow_none=True
)
self.xsrv.register_introspection_functions()
self.xsrv.register_multicall_functions()
# XML Modus 1 Nur Logs lesen und PLC Programm neu starten
self.xsrv.register_function(self.logr.get_applines, "get_applines")
self.xsrv.register_function(self.logr.get_applog, "get_applog")
self.xsrv.register_function(self.logr.get_plclines, "get_plclines")
self.xsrv.register_function(self.logr.get_plclog, "get_plclog")
self.xsrv.register_function(self.logr.load_applog, "load_applog")
self.xsrv.register_function(self.logr.load_plclog, "load_plclog")
self.xsrv.register_function(self.xml_plcexitcode, "plcexitcode")
self.xsrv.register_function(self.xml_plcrunning, "plcrunning")
self.xsrv.register_function(self.xml_plcstart, "plcstart")

View File

@@ -27,7 +27,7 @@ setup(
license="LGPLv3",
name="revpipyload",
version="0.4.0",
version="0.4.1",
scripts=["data/revpipyload"],