revpipyload

Revolution Pi Python PLC Loader.

Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten koennen am Pi selber oder ueber eine XML-RPC Schnittstelle ausgelesen werden.

Dieser Daemon prueft ob das Python Programm noch lauft und kann es im Fall eines Absturzes neu starten.

Ueber diesen Daemon kann die gesamte piCtory Konfiguration exportiert oder importiert, ein Dump vom Prozessabbild gezogen und das eigene Python Programm hochgeladen werden.

Es kann von dem Python Programm auch eine Archivdatei herunterladen werden, welche optional auch die piCtory Konfiguraiton beinhaltet. Damit kann man sehr schnell auf einem Revolution Pi das Programm inkl. piCtory Konfiguration austauschen.

Die Zugriffsmoeglichkeiten koennen ueber einen Konfigurationsparameter begrenzt werden!

Global Attributes

configrsc
picontrolreset
procimg
pyloadverion

Classes

LogReader Ermoeglicht den Zugriff auf die Logdateien.
PipeLogwriter File PIPE fuer das Schreiben des APP Log.
RevPiPlc Verwaltet das PLC Python Programm.
RevPiPyLoad Hauptklasse, die alle Funktionen zur Verfuegung stellt.

Functions

None


LogReader

Ermoeglicht den Zugriff auf die Logdateien.

Beinhaltet Funktionen fuer den Abruf der gesamten Logdatei fuer das RevPiPyLoad-System und die Logdatei der PLC-Anwendung. Ausserdem koennen nur neue Zeilen abgerufen werden, um eine dynamische Logansicht zu ermoeglichen.

Derived from

None

Class Attributes

None

Class Methods

None

Methods

LogReader Instantiiert LogReader-Klasse.
closeall Fuehrt close auf File Handler durch.
get_applines Gibt neue Zeilen ab letzen Aufruf zurueck.
get_applog Gibt die gesamte Logdatei zurueck.
get_plclines Gibt neue Zeilen ab letzen Aufruf zurueck.
get_plclog Gibt die gesamte Logdatei zurueck.

Static Methods

None

LogReader (Constructor)

LogReader()

Instantiiert LogReader-Klasse.

LogReader.closeall

closeall()

Fuehrt close auf File Handler durch.

LogReader.get_applines

get_applines()

Gibt neue Zeilen ab letzen Aufruf zurueck.

Returns:
list() mit neuen Zeilen

LogReader.get_applog

get_applog()

Gibt die gesamte Logdatei zurueck.

Returns:
str() mit Logdaten

LogReader.get_plclines

get_plclines()

Gibt neue Zeilen ab letzen Aufruf zurueck.

Returns:
list() mit neuen Zeilen

LogReader.get_plclog

get_plclog()

Gibt die gesamte Logdatei zurueck.

Returns:
str() mit Logdaten
Up


PipeLogwriter

File PIPE fuer das Schreiben des APP Log.

Spezieller LogFile-Handler fuer die Ausgabe des subprocess fuer das Python PLC Programm. Die Ausgabe kann nicht auf einen neuen FileHandler umgeschrieben werden. Dadurch waere es nicht moeglich nach einem logrotate die neue Datei zu verwenden. Ueber die PIPE wird dies umgangen.

Derived from

Thread

Class Attributes

None

Class Methods

None

Methods

PipeLogwriter Instantiiert PipeLogwriter-Klasse.
__del__ Close file handler.
_configurefh Konfiguriert den FileHandler fuer Ausgaben der PLCAPP.
logline Schreibt eine Zeile in die Logdatei oder stdout.
newlogfile Konfiguriert den FileHandler auf eine neue Logdatei.
run Prueft auf neue Logzeilen und schreibt diese.
stop Beendetden Thread und die FileHandler werden geschlossen.

Static Methods

None

PipeLogwriter (Constructor)

PipeLogwriter(logfilename)

Instantiiert PipeLogwriter-Klasse.

logfilename:
Dateiname fuer Logdatei

PipeLogwriter.__del__

__del__()

Close file handler.

PipeLogwriter._configurefh

_configurefh()

Konfiguriert den FileHandler fuer Ausgaben der PLCAPP.

Returns:
FileHandler-Objekt

PipeLogwriter.logline

logline(message)

Schreibt eine Zeile in die Logdatei oder stdout.

message:
Logzeile zum Schreiben

PipeLogwriter.newlogfile

newlogfile()

Konfiguriert den FileHandler auf eine neue Logdatei.

PipeLogwriter.run

run()

Prueft auf neue Logzeilen und schreibt diese.

PipeLogwriter.stop

stop()

Beendetden Thread und die FileHandler werden geschlossen.

Up


RevPiPlc

Verwaltet das PLC Python Programm.

Dieser Thread startet das PLC Python Programm und ueberwacht es. Sollte es abstuerzen kann es automatisch neu gestartet werden. Die Ausgaben des Programms werden in eine Logdatei umgeleitet, damit der Entwickler sein Programm analysieren und debuggen kann.

Derived from

Thread

Class Attributes

None

Class Methods

None

Methods

RevPiPlc Instantiiert RevPiPlc-Klasse.
_configureplw Konfiguriert den PipeLogwriter fuer Ausgaben der PLCAPP.
_setuppopen Setzt UID und GID fuer das PLC Programm.
_spopen Startet das PLC Programm.
_zeroprocimg Setzt Prozessabbild auf NULL.
newlogfile Konfiguriert die FileHandler auf neue Logdatei.
run Fuehrt PLC-Programm aus und ueberwacht es.
stop Beendet PLC-Programm.

Static Methods

None

RevPiPlc (Constructor)

RevPiPlc(program, arguments, pversion)

Instantiiert RevPiPlc-Klasse.

RevPiPlc._configureplw

_configureplw()

Konfiguriert den PipeLogwriter fuer Ausgaben der PLCAPP.

Returns:
PipeLogwriter()

RevPiPlc._setuppopen

_setuppopen()

Setzt UID und GID fuer das PLC Programm.

RevPiPlc._spopen

_spopen(lst_proc)

Startet das PLC Programm.

lst_proc:
Prozessliste
Returns:
subprocess

RevPiPlc._zeroprocimg

_zeroprocimg()

Setzt Prozessabbild auf NULL.

RevPiPlc.newlogfile

newlogfile()

Konfiguriert die FileHandler auf neue Logdatei.

RevPiPlc.run

run()

Fuehrt PLC-Programm aus und ueberwacht es.

RevPiPlc.stop

stop()

Beendet PLC-Programm.

Up


RevPiPyLoad

Hauptklasse, die alle Funktionen zur Verfuegung stellt.

Hier wird die gesamte Konfiguraiton eingelesen und der ggf. aktivierte XML-RPC-Server gestartet.

Derived from

None

Class Attributes

root

Class Methods

None

Methods

RevPiPyLoad Instantiiert RevPiPyLoad-Klasse.
_loadconfig Load configuration file and setup modul.
_plcthread Konfiguriert den PLC-Thread fuer die Ausfuehrung.
_sigexit Signal handler to clean and exit program.
_sigloadconfig Signal handler to load configuration.
_signewlogfile Signal handler to start new logfile.
packapp Erzeugt aus dem PLC-Programm ein TAR-File.
start Start plcload and PLC python program.
stop Stop PLC python program and plcload.
xml_getconfig Uebertraegt die RevPiPyLoad Konfiguration.
xml_getfilelist Uebertraegt die Dateiliste vom plcworkdir.
xml_getpictoryrsc Gibt die config.rsc Datei von piCotry zurueck.
xml_getprocimg Gibt die Rohdaten aus piControl0 zurueck.
xml_plcdownload Uebertraegt ein Archiv vom plcworkdir.
xml_plcexitcode Gibt den aktuellen exitcode vom PLC Programm zurueck.
xml_plcrunning Prueft ob das PLC Programm noch lauft.
xml_plcstart Startet das PLC Programm.
xml_plcstop Stoppt das PLC Programm.
xml_plcupload Empfaengt Dateien fuer das PLC Programm.
xml_plcuploadclean Loescht das gesamte plcworkdir Verzeichnis.
xml_reload Startet RevPiPyLoad neu und verwendet neue Konfiguraiton.
xml_setconfig Empfaengt die RevPiPyLoad Konfiguration.
xml_setpictoryrsc Schreibt die config.rsc Datei von piCotry.

Static Methods

None

RevPiPyLoad (Constructor)

RevPiPyLoad()

Instantiiert RevPiPyLoad-Klasse.

RevPiPyLoad._loadconfig

_loadconfig()

Load configuration file and setup modul.

RevPiPyLoad._plcthread

_plcthread()

Konfiguriert den PLC-Thread fuer die Ausfuehrung.

Returns:
PLC-Thread Object or None

RevPiPyLoad._sigexit

_sigexit(signum, frame)

Signal handler to clean and exit program.

RevPiPyLoad._sigloadconfig

_sigloadconfig(signum, frame)

Signal handler to load configuration.

RevPiPyLoad._signewlogfile

_signewlogfile(signum, frame)

Signal handler to start new logfile.

RevPiPyLoad.packapp

packapp(mode="tar", pictory=False)

Erzeugt aus dem PLC-Programm ein TAR-File.

mode:
Packart 'tar' oder 'zip'
pictory:
piCtory Konfiguration mit einpacken
Returns:
Dateinamen des Archivs

RevPiPyLoad.start

start()

Start plcload and PLC python program.

RevPiPyLoad.stop

stop()

Stop PLC python program and plcload.

RevPiPyLoad.xml_getconfig

xml_getconfig()

Uebertraegt die RevPiPyLoad Konfiguration.

Returns:
dict() der Konfiguration

RevPiPyLoad.xml_getfilelist

xml_getfilelist()

Uebertraegt die Dateiliste vom plcworkdir.

Returns:
list() mit Dateinamen

RevPiPyLoad.xml_getpictoryrsc

xml_getpictoryrsc()

Gibt die config.rsc Datei von piCotry zurueck.

Returns:
xmlrpc.client.Binary()

RevPiPyLoad.xml_getprocimg

xml_getprocimg()

Gibt die Rohdaten aus piControl0 zurueck.

Returns:
xmlrpc.client.Binary()

RevPiPyLoad.xml_plcdownload

xml_plcdownload(mode="tar", pictory=False)

Uebertraegt ein Archiv vom plcworkdir.

mode:
Archivart 'tar' 'zip'
pictory:
piCtory Konfiguraiton mit einpacken
Returns:
Binary() mit Archivdatei

RevPiPyLoad.xml_plcexitcode

xml_plcexitcode()

Gibt den aktuellen exitcode vom PLC Programm zurueck.

Returns:
int() exitcode oder: -1 laeuft noch -2 Datei nicht gefunden -3 Lief nie

RevPiPyLoad.xml_plcrunning

xml_plcrunning()

Prueft ob das PLC Programm noch lauft.

Returns:
True, wenn das PLC Programm noch lauft

RevPiPyLoad.xml_plcstart

xml_plcstart()

Startet das PLC Programm.

Returns:
int() Status: -1 Programm lauft noch -2 Datei nicht gefunden

RevPiPyLoad.xml_plcstop

xml_plcstop()

Stoppt das PLC Programm.

Returns:
int() Exitcode vom PLC Programm -1 PLC Programm lief nicht

RevPiPyLoad.xml_plcupload

xml_plcupload(filedata, filename)

Empfaengt Dateien fuer das PLC Programm.

filedata:
GZIP Binary data der datei
filename:
Name inkl. Unterverzeichnis der Datei
Returns:
Ture, wenn Datei erfolgreich gespeichert wurde

RevPiPyLoad.xml_plcuploadclean

xml_plcuploadclean()

Loescht das gesamte plcworkdir Verzeichnis.

Returns:
True, wenn erfolgreich

RevPiPyLoad.xml_reload

xml_reload()

Startet RevPiPyLoad neu und verwendet neue Konfiguraiton.

RevPiPyLoad.xml_setconfig

xml_setconfig(dc, loadnow=False)

Empfaengt die RevPiPyLoad Konfiguration.

Returns:
True, wenn erfolgreich angewendet

RevPiPyLoad.xml_setpictoryrsc

xml_setpictoryrsc(filebytes, reset=False)

Schreibt die config.rsc Datei von piCotry.

filebytes:
xmlrpc.client.Binary()-Objekt
reset:
Reset piControl Device
Returns:
Statuscode: 0 Alles erfolgreich -1 Kann JSON-Datei nicht laden -2 piCtory Elemente in JSON-Datei nicht gefunden -3 Konnte Konfiguraiton nicht schreiben Positive Zahl ist exitcode von piControlReset
Up