mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-09 07:28:03 +01:00
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:
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpipyload -->
|
<!-- 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 -->
|
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||||
<ProjectType>Console</ProjectType>
|
<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>
|
<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>
|
<Author>Sven Sager</Author>
|
||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="-1"/>
|
<Eol index="-1"/>
|
||||||
|
|||||||
@@ -121,9 +121,11 @@ class ProcimgServer():
|
|||||||
if type(value) == bytes or type(value) == bool:
|
if type(value) == bytes or type(value) == bool:
|
||||||
self.rpi.devices[device][io].set_value(value)
|
self.rpi.devices[device][io].set_value(value)
|
||||||
else:
|
else:
|
||||||
self.rpi.devices[device][io].value = value.to_bytes(
|
self.rpi.devices[device][io].set_value(
|
||||||
|
value.to_bytes(
|
||||||
self.rpi.devices[device][io].length, byteorder="little"
|
self.rpi.devices[device][io].length, byteorder="little"
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
self.rpi.devices.writeprocimg(device=device)
|
self.rpi.devices.writeprocimg(device=device)
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ def configure():
|
|||||||
|
|
||||||
# Program logger
|
# Program logger
|
||||||
global logger
|
global logger
|
||||||
|
if logger is None:
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
# Alle handler entfernen
|
# Alle handler entfernen
|
||||||
|
|||||||
@@ -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 subprocess
|
import subprocess
|
||||||
@@ -54,7 +53,7 @@ from xmlrpc.server import SimpleXMLRPCServer
|
|||||||
configrsc = None
|
configrsc = None
|
||||||
picontrolreset = "/opt/KUNBUS/piControlReset"
|
picontrolreset = "/opt/KUNBUS/piControlReset"
|
||||||
procimg = "/dev/piControl0"
|
procimg = "/dev/piControl0"
|
||||||
pyloadverion = "0.4.0"
|
pyloadverion = "0.4.1"
|
||||||
|
|
||||||
|
|
||||||
class LogReader():
|
class LogReader():
|
||||||
@@ -71,9 +70,9 @@ class LogReader():
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Instantiiert LogReader-Klasse."""
|
"""Instantiiert LogReader-Klasse."""
|
||||||
self.fhapp = None
|
self.fhapp = None
|
||||||
self.posapp = 0
|
self.fhapplk = Lock()
|
||||||
self.fhplc = None
|
self.fhplc = None
|
||||||
self.posplc = 0
|
self.fhplclk = Lock()
|
||||||
|
|
||||||
def closeall(self):
|
def closeall(self):
|
||||||
"""Fuehrt close auf File Handler durch."""
|
"""Fuehrt close auf File Handler durch."""
|
||||||
@@ -82,84 +81,45 @@ class LogReader():
|
|||||||
if self.fhplc is not None:
|
if self.fhplc is not None:
|
||||||
self.fhplc.close()
|
self.fhplc.close()
|
||||||
|
|
||||||
def get_applines(self):
|
def load_applog(self, start, count):
|
||||||
"""Gibt neue Zeilen ab letzen Aufruf zurueck.
|
"""Uebertraegt Logdaten Binaer.
|
||||||
@returns: list() mit neuen Zeilen"""
|
|
||||||
|
@param start: Startbyte
|
||||||
|
@param count: Max. Byteanzahl zum uebertragen
|
||||||
|
@returns: Binary() der Logdatei
|
||||||
|
|
||||||
|
"""
|
||||||
if not os.access(proginit.logapp, os.R_OK):
|
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:
|
else:
|
||||||
|
with self.fhapplk:
|
||||||
if self.fhapp is None or self.fhapp.closed:
|
if self.fhapp is None or self.fhapp.closed:
|
||||||
self.fhapp = open(proginit.logapp)
|
self.fhapp = open(proginit.logapp, "rb")
|
||||||
|
|
||||||
lst_new = []
|
self.fhapp.seek(start)
|
||||||
while True:
|
return Binary(self.fhapp.read(count))
|
||||||
self.posapp = self.fhapp.tell()
|
|
||||||
line = self.fhapp.readline()
|
|
||||||
if line:
|
|
||||||
lst_new.append(line)
|
|
||||||
else:
|
|
||||||
self.fhapp.seek(self.posapp)
|
|
||||||
break
|
|
||||||
|
|
||||||
proginit.logger.debug(
|
def load_plclog(self, start, count):
|
||||||
"got {} new app log lines".format(len(lst_new))
|
"""Uebertraegt Logdaten Binaer.
|
||||||
)
|
|
||||||
return Binary(pickle.dumps(lst_new))
|
|
||||||
|
|
||||||
def get_applog(self):
|
@param start: Startbyte
|
||||||
"""Gibt die gesamte Logdatei zurueck.
|
@param count: Max. Byteanzahl zum uebertragen
|
||||||
@returns: str() mit Logdaten"""
|
@returns: Binary() der Logdatei
|
||||||
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()))
|
|
||||||
|
|
||||||
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):
|
if not os.access(proginit.logplc, os.R_OK):
|
||||||
proginit.logger.error(
|
return Binary(b'\x16') #
|
||||||
"can not access logfile {}".format(proginit.logplc)
|
elif start > os.path.getsize(proginit.logplc):
|
||||||
)
|
return Binary(b'\x19') #
|
||||||
return Binary(pickle.dumps([]))
|
|
||||||
else:
|
else:
|
||||||
|
with self.fhplclk:
|
||||||
if self.fhplc is None or self.fhplc.closed:
|
if self.fhplc is None or self.fhplc.closed:
|
||||||
self.fhplc = open(proginit.logplc)
|
self.fhplc = open(proginit.logplc, "rb")
|
||||||
|
|
||||||
lst_new = []
|
self.fhplc.seek(start)
|
||||||
while True:
|
return Binary(self.fhplc.read(count))
|
||||||
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()))
|
|
||||||
|
|
||||||
|
|
||||||
class PipeLogwriter(Thread):
|
class PipeLogwriter(Thread):
|
||||||
@@ -581,12 +541,11 @@ class RevPiPyLoad():
|
|||||||
allow_none=True
|
allow_none=True
|
||||||
)
|
)
|
||||||
self.xsrv.register_introspection_functions()
|
self.xsrv.register_introspection_functions()
|
||||||
|
self.xsrv.register_multicall_functions()
|
||||||
|
|
||||||
# XML Modus 1 Nur Logs lesen und PLC Programm neu starten
|
# 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.load_applog, "load_applog")
|
||||||
self.xsrv.register_function(self.logr.get_applog, "get_applog")
|
self.xsrv.register_function(self.logr.load_plclog, "load_plclog")
|
||||||
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.xml_plcexitcode, "plcexitcode")
|
self.xsrv.register_function(self.xml_plcexitcode, "plcexitcode")
|
||||||
self.xsrv.register_function(self.xml_plcrunning, "plcrunning")
|
self.xsrv.register_function(self.xml_plcrunning, "plcrunning")
|
||||||
self.xsrv.register_function(self.xml_plcstart, "plcstart")
|
self.xsrv.register_function(self.xml_plcstart, "plcstart")
|
||||||
|
|||||||
Reference in New Issue
Block a user