1
0
mirror of https://github.com/naruxde/revpipycontrol.git synced 2025-11-08 15:43:52 +01:00

xml-mode abfragen und Fenster danach aufbauen

Meldungstexte ?berarbeitet
This commit is contained in:
2017-03-16 21:03:12 +01:00
parent cc03ede267
commit 29249462ca
11 changed files with 168 additions and 41 deletions

View File

@@ -3,3 +3,6 @@ syntax: glob
deb_dist/* deb_dist/*
dist/* dist/*
revpipycontrol.egg-info/* revpipycontrol.egg-info/*
doc/*
deb/*
.eric6project/*

BIN
data/revpipycontrol.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
data/revpipycontrol.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -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 revpipycontrol --> <!-- eric project file for project revpipycontrol -->
<!-- Saved: 2017-03-16, 16:32:04 --> <!-- Saved: 2017-03-16, 21:00:50 -->
<!-- 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>
@@ -14,7 +14,6 @@
<Email>akira@narux.de</Email> <Email>akira@narux.de</Email>
<Eol index="-1"/> <Eol index="-1"/>
<Sources> <Sources>
<Source>revpipycontrol/__init__.py</Source>
<Source>revpipycontrol/revpipycontrol.py</Source> <Source>revpipycontrol/revpipycontrol.py</Source>
<Source>revpipycontrol/revpicheckclient.py</Source> <Source>revpipycontrol/revpicheckclient.py</Source>
<Source>setup.py</Source> <Source>setup.py</Source>
@@ -29,6 +28,7 @@
<Interfaces/> <Interfaces/>
<Others> <Others>
<Other>data</Other> <Other>data</Other>
<Other>doc</Other>
</Others> </Others>
<MainScript>revpipycontrol/revpipycontrol.py</MainScript> <MainScript>revpipycontrol/revpipycontrol.py</MainScript>
<Vcs> <Vcs>
@@ -144,6 +144,59 @@
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/> <FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/> <FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
</FiletypeAssociations> </FiletypeAssociations>
<Documentation>
<DocumentationParams>
<dict>
<key>
<string>ERIC4DOC</string>
</key>
<value>
<dict>
<key>
<string>ignoreFilePatterns</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>noindex</string>
</key>
<value>
<bool>True</bool>
</value>
<key>
<string>outputDirectory</string>
</key>
<value>
<string>doc</string>
</value>
<key>
<string>qtHelpEnabled</string>
</key>
<value>
<bool>False</bool>
</value>
<key>
<string>sourceExtensions</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>useRecursion</string>
</key>
<value>
<bool>True</bool>
</value>
</dict>
</value>
</dict>
</DocumentationParams>
</Documentation>
<Checkers> <Checkers>
<CheckersParams> <CheckersParams>
<dict> <dict>

View File

@@ -69,7 +69,7 @@ class RevPiLogfile(tkinter.Frame):
def btn_clearapp(self): def btn_clearapp(self):
self.applog.delete(1.0, tkinter.END) self.applog.delete(1.0, tkinter.END)
def btn_clearplc(self): def btn_clearplc(self):
self.plclog.delete(1.0, tkinter.END) self.plclog.delete(1.0, tkinter.END)

View File

@@ -11,18 +11,23 @@ import tkinter.messagebox as tkmsg
class RevPiOption(tkinter.Frame): class RevPiOption(tkinter.Frame):
def __init__(self, master, xmlcli): def __init__(self, master, xmlcli, xmlmode):
if xmlmode < 2:
return None
super().__init__(master) super().__init__(master)
self.pack(expand=True, fill="both") self.pack(expand=True, fill="both")
self.xmlcli = xmlcli self.xmlcli = xmlcli
self.xmlmode = xmlmode
self.xmlstate = "normal" if xmlmode == 3 else "disabled"
# Fenster bauen # Fenster bauen
self._createwidgets() self._createwidgets()
self._loadappdata() self._loadappdata()
def _createwidgets(self): def _createwidgets(self):
self.master.wm_title("RevPi Python PLC Connections") self.master.wm_title("RevPi Python PLC Options")
self.master.wm_resizable(width=False, height=False) self.master.wm_resizable(width=False, height=False)
cpadw = {"padx": 4, "pady": 2, "sticky": "w"} cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
@@ -40,18 +45,25 @@ class RevPiOption(tkinter.Frame):
ckb_start = tkinter.Checkbutton(stst) ckb_start = tkinter.Checkbutton(stst)
ckb_start["text"] = "Programm automatisch starten" ckb_start["text"] = "Programm automatisch starten"
ckb_start["state"] = self.xmlstate
ckb_start["variable"] = self.var_start ckb_start["variable"] = self.var_start
ckb_start.grid(**cpadw) ckb_start.grid(**cpadw)
ckb_reload = tkinter.Checkbutton(stst) ckb_reload = tkinter.Checkbutton(stst)
ckb_reload["text"] = "Programm nach Absturz neustarten" ckb_reload["text"] = "Programm nach Beenden neu starten"
ckb_reload["state"] = self.xmlstate
ckb_reload["variable"] = self.var_reload ckb_reload["variable"] = self.var_reload
ckb_reload.grid(**cpadw) ckb_reload.grid(**cpadw)
ckb_zexit = tkinter.Checkbutton(stst, justify="left") ckb_zexit = tkinter.Checkbutton(stst, justify="left")
ckb_zexit["state"] = self.xmlstate
ckb_zexit["text"] = "Prozessabbild auf NULL setzen, wenn " \ ckb_zexit["text"] = "Prozessabbild auf NULL setzen, wenn " \
"Programm\nerfolgreich beendet wird" "Programm\nerfolgreich beendet wird"
ckb_zexit["variable"] = self.var_zexit ckb_zexit["variable"] = self.var_zexit
ckb_zexit.grid(**cpadw) ckb_zexit.grid(**cpadw)
ckb_zerr = tkinter.Checkbutton(stst, justify="left") ckb_zerr = tkinter.Checkbutton(stst, justify="left")
ckb_zerr["state"] = self.xmlstate
ckb_zerr["text"] = "Prozessabbild auf NULL setzen, wenn " \ ckb_zerr["text"] = "Prozessabbild auf NULL setzen, wenn " \
"Programm\ndurch Absturz beendet wird" "Programm\ndurch Absturz beendet wird"
ckb_zerr["variable"] = self.var_zerr ckb_zerr["variable"] = self.var_zerr
@@ -65,32 +77,40 @@ class RevPiOption(tkinter.Frame):
self.var_pythonver = tkinter.IntVar(prog) self.var_pythonver = tkinter.IntVar(prog)
self.var_startpy = tkinter.StringVar(prog) self.var_startpy = tkinter.StringVar(prog)
self.var_slave = tkinter.BooleanVar(prog) self.var_slave = tkinter.BooleanVar(prog)
self.var_pythonver.set(3) self.var_pythonver.set(3)
lbl = tkinter.Label(prog) lbl = tkinter.Label(prog)
lbl["text"] = "Python Version" lbl["text"] = "Python Version"
lbl.grid(columnspan=2, row=0, **cpadw) lbl.grid(columnspan=2, row=0, **cpadw)
rbn = tkinter.Radiobutton(prog) rbn = tkinter.Radiobutton(prog)
rbn["state"] = self.xmlstate
rbn["text"] = "Python2" rbn["text"] = "Python2"
rbn["value"] = 2 rbn["value"] = 2
rbn["variable"] = self.var_pythonver rbn["variable"] = self.var_pythonver
rbn.grid(column=0, row=1, **cpadw) rbn.grid(column=0, row=1, **cpadw)
rbn = tkinter.Radiobutton(prog) rbn = tkinter.Radiobutton(prog)
rbn["state"] = self.xmlstate
rbn["text"] = "Python3" rbn["text"] = "Python3"
rbn["value"] = 3 rbn["value"] = 3
rbn["variable"] = self.var_pythonver rbn["variable"] = self.var_pythonver
rbn.grid(column=1, row=1, **cpadw) rbn.grid(column=1, row=1, **cpadw)
lbl = tkinter.Label(prog) lbl = tkinter.Label(prog)
lbl["text"] = "Python PLC Programname" lbl["text"] = "Python PLC Programname"
lbl.grid(columnspan=2, **cpadw) lbl.grid(columnspan=2, **cpadw)
lst = self.xmlcli.get_filelist() lst = self.xmlcli.get_filelist()
if len(lst) == 0: if len(lst) == 0:
lst.append("none") lst.append("none")
opt_startpy = tkinter.OptionMenu( opt_startpy = tkinter.OptionMenu(
prog, self.var_startpy, *lst) prog, self.var_startpy, *lst)
opt_startpy["state"] = self.xmlstate
opt_startpy.grid(columnspan=2, **cpadwe) opt_startpy.grid(columnspan=2, **cpadwe)
ckb_slave = tkinter.Checkbutton(prog, justify="left") ckb_slave = tkinter.Checkbutton(prog, justify="left")
ckb_slave["state"] = self.xmlstate
ckb_slave["text"] = "RevPi als PLC-Slave verwenden" ckb_slave["text"] = "RevPi als PLC-Slave verwenden"
ckb_slave["state"] = "disabled" ckb_slave["state"] = "disabled"
ckb_slave["variable"] = self.var_slave ckb_slave["variable"] = self.var_slave
@@ -109,32 +129,41 @@ class RevPiOption(tkinter.Frame):
ckb_xmlon = tkinter.Checkbutton(xmlrpc) ckb_xmlon = tkinter.Checkbutton(xmlrpc)
ckb_xmlon["command"] = self.askxmlon ckb_xmlon["command"] = self.askxmlon
ckb_xmlon["state"] = self.xmlstate
ckb_xmlon["text"] = "XML-RPC Server aktiv auf RevPi" ckb_xmlon["text"] = "XML-RPC Server aktiv auf RevPi"
ckb_xmlon["variable"] = self.var_xmlon ckb_xmlon["variable"] = self.var_xmlon
ckb_xmlon.grid(**cpadw) ckb_xmlon.grid(**cpadw)
self.ckb_xmlmod2 = tkinter.Checkbutton(xmlrpc, justify="left") self.ckb_xmlmod2 = tkinter.Checkbutton(xmlrpc, justify="left")
self.ckb_xmlmod2["command"] = self.xmlmods self.ckb_xmlmod2["command"] = self.xmlmods
self.ckb_xmlmod2["state"] = self.xmlstate
self.ckb_xmlmod2["text"] = \ self.ckb_xmlmod2["text"] = \
"Download von piCtory Konfiguration und\nPLC Programm zulassen" "Download von piCtory Konfiguration und\nPLC Programm zulassen"
self.ckb_xmlmod2["variable"] = self.var_xmlmod2 self.ckb_xmlmod2["variable"] = self.var_xmlmod2
self.ckb_xmlmod2.grid(**cpadw) self.ckb_xmlmod2.grid(**cpadw)
self.ckb_xmlmod3 = tkinter.Checkbutton(xmlrpc, justify="left") self.ckb_xmlmod3 = tkinter.Checkbutton(xmlrpc, justify="left")
self.ckb_xmlmod3["state"] = self.xmlstate
self.ckb_xmlmod3["text"] = \ self.ckb_xmlmod3["text"] = \
"Upload von piCtory Konfiguration und\nPLC Programm zualssen" "Upload von piCtory Konfiguration und\nPLC Programm zualssen"
self.ckb_xmlmod3["variable"] = self.var_xmlmod3 self.ckb_xmlmod3["variable"] = self.var_xmlmod3
self.ckb_xmlmod3.grid(**cpadw) self.ckb_xmlmod3.grid(**cpadw)
lbl = tkinter.Label(xmlrpc) lbl = tkinter.Label(xmlrpc)
lbl["text"] = "XML-RPC Serverport" lbl["text"] = "XML-RPC Serverport"
lbl.grid(**cpadw) lbl.grid(**cpadw)
spb_xmlport = tkinter.Spinbox(xmlrpc) spb_xmlport = tkinter.Spinbox(xmlrpc)
spb_xmlport["to"] = 65535 spb_xmlport["to"] = 65535
spb_xmlport["from"] = 1024 spb_xmlport["from"] = 1024
spb_xmlport["state"] = self.xmlstate
spb_xmlport["textvariable"] = self.var_xmlport spb_xmlport["textvariable"] = self.var_xmlport
spb_xmlport.grid(**cpadwe) spb_xmlport.grid(**cpadwe)
# Buttons # Buttons
btn_save = tkinter.Button(self) btn_save = tkinter.Button(self)
btn_save["command"] = self._setappdata btn_save["command"] = self._setappdata
btn_save["state"] = self.xmlstate
btn_save["text"] = "Speichern" btn_save["text"] = "Speichern"
btn_save.grid(column=0, row=3) btn_save.grid(column=0, row=3)
@@ -181,9 +210,10 @@ class RevPiOption(tkinter.Frame):
dc["xmlrpc"] += 1 dc["xmlrpc"] += 1
dc["xmlrpcport"] = self.var_xmlport.get() dc["xmlrpcport"] = self.var_xmlport.get()
self.xmlmode = dc["xmlrpc"]
ask = tkmsg.askyesnocancel( ask = tkmsg.askyesnocancel(
"Frage", "Die Einstellungen werden jetzt auf den Revolution Pi " "Frage", "Die Einstellungen werden jetzt auf dem Revolution Pi "
"gespeichert. \n\nSollen die neuen Einstellungen sofort in Kraft " "gespeichert. \n\nSollen die neuen Einstellungen sofort in Kraft "
"treten? \nDies bedeutet einen Neustart des Dienstes und des ggf. " "treten? \nDies bedeutet einen Neustart des Dienstes und des ggf. "
"laufenden PLC-Programms!", parent=self.master "laufenden PLC-Programms!", parent=self.master
@@ -191,7 +221,8 @@ class RevPiOption(tkinter.Frame):
if ask is not None: if ask is not None:
if self.xmlcli.set_config(dc, ask): if self.xmlcli.set_config(dc, ask):
tkmsg.showinfo( tkmsg.showinfo(
"Information", "Einstellungen gespeichert.", parent=self.master "Information", "Einstellungen gespeichert.",
parent=self.master
) )
else: else:
tkmsg.showerror( tkmsg.showerror(
@@ -204,14 +235,14 @@ class RevPiOption(tkinter.Frame):
if not self.var_xmlon.get(): if not self.var_xmlon.get():
ask = tkmsg.askyesno( ask = tkmsg.askyesno(
"Frage", "Soll der XML-RPC Server wirklich beendet werden? " "Frage", "Soll der XML-RPC Server wirklich beendet werden? "
"Sie können dann mit diesem Programm NICHT mehr auf den " "Sie können dann NICHT mehr mit diesem Programm auf den "
"Revolution Pi zugreifen.", parent=self.master "Revolution Pi zugreifen.", parent=self.master
) )
if not ask: if not ask:
self.var_xmlon.set(True) self.var_xmlon.set(True)
self.xmlmods() self.xmlmods()
def xmlmods(self): def xmlmods(self):
self.ckb_xmlmod2["state"] = \ self.ckb_xmlmod2["state"] = \
"normal" if self.var_xmlon.get() else "disabled" "normal" if self.var_xmlon.get() else "disabled"

View File

@@ -36,6 +36,8 @@ class RevPiPlcList(tkinter.Frame):
super().__init__(master) super().__init__(master)
self.pack() self.pack()
self.changes = False
# Daten laden # Daten laden
self._connections = {} self._connections = {}
@@ -117,6 +119,7 @@ class RevPiPlcList(tkinter.Frame):
makedirs(os.path.dirname(savefile), exist_ok=True) makedirs(os.path.dirname(savefile), exist_ok=True)
fh = open(savefile, "wb") fh = open(savefile, "wb")
pickle.dump(self._connections, fh) pickle.dump(self._connections, fh)
self.changes = False
except: except:
return False return False
return True return True
@@ -133,14 +136,18 @@ class RevPiPlcList(tkinter.Frame):
self.build_listconn() self.build_listconn()
self.evt_btnnew() self.evt_btnnew()
self.changes = True
def evt_btnclose(self): def evt_btnclose(self):
ask = tkmsg.askyesno( if self.changes:
"Frage...", ask = tkmsg.askyesno(
"Wollen Sie wirklich beenden?\n" parent=self.master, title="Frage...",
"Nicht gespeicherte Änderungen gehen verloren", message="Wollen Sie wirklich beenden?\n"
parent=self.master "Nicht gespeicherte Änderungen gehen verloren",
) )
else:
ask = True
if ask: if ask:
self.master.destroy() self.master.destroy()
@@ -168,6 +175,7 @@ class RevPiPlcList(tkinter.Frame):
del self._connections[item] del self._connections[item]
self.build_listconn() self.build_listconn()
self.evt_btnnew() self.evt_btnnew()
self.changes = True
def evt_btnsave(self): def evt_btnsave(self):
if self._saveappdata(): if self._saveappdata():

View File

@@ -19,7 +19,10 @@ from xmlrpc.client import Binary
class RevPiProgram(tkinter.Frame): class RevPiProgram(tkinter.Frame):
def __init__(self, master, xmlcli, revpi): def __init__(self, master, xmlcli, xmlmode, revpi):
if xmlmode < 2:
return None
super().__init__(master) super().__init__(master)
# master.protocol("WM_DELETE_WINDOW", self._checkclose) # master.protocol("WM_DELETE_WINDOW", self._checkclose)
self.pack(expand=True, fill="both") self.pack(expand=True, fill="both")
@@ -27,6 +30,8 @@ class RevPiProgram(tkinter.Frame):
self.uploaded = False self.uploaded = False
self.revpi = revpi self.revpi = revpi
self.xmlcli = xmlcli self.xmlcli = xmlcli
self.xmlmode = xmlmode
self.xmlstate = "normal" if xmlmode == 3 else "disabled"
# Fenster bauen # Fenster bauen
self._createwidgets() self._createwidgets()
@@ -56,7 +61,7 @@ class RevPiProgram(tkinter.Frame):
# Gruppe Programm # Gruppe Programm
prog = tkinter.LabelFrame(self) prog = tkinter.LabelFrame(self)
prog.columnconfigure(0, weight=1) prog.columnconfigure(0, weight=1)
prog["text"] = "PLC Pythonprogramm" prog["text"] = "PLC Python programm"
prog.grid(columnspan=2, pady=2, sticky="we") prog.grid(columnspan=2, pady=2, sticky="we")
# Variablen vorbereiten # Variablen vorbereiten
@@ -98,22 +103,26 @@ class RevPiProgram(tkinter.Frame):
opt = tkinter.OptionMenu( opt = tkinter.OptionMenu(
prog, self.var_typeup, *self.lst_typeup, prog, self.var_typeup, *self.lst_typeup,
command=self._evt_optup) command=self._evt_optup)
opt["state"] = self.xmlstate
opt["width"] = 10 opt["width"] = 10
opt.grid(column=1, row=r, **cpad) opt.grid(column=1, row=r, **cpad)
r = 3 r = 3
ckb = tkinter.Checkbutton(prog) ckb = tkinter.Checkbutton(prog)
ckb["state"] = self.xmlstate
ckb["text"] = "vorher alles im Uploadverzeichnis löschen" ckb["text"] = "vorher alles im Uploadverzeichnis löschen"
ckb["variable"] = self.var_cleanup ckb["variable"] = self.var_cleanup
ckb.grid(column=0, row=r, columnspan=2, **cpadw) ckb.grid(column=0, row=r, columnspan=2, **cpadw)
r = 4 r = 4
self.ckb_picup = tkinter.Checkbutton(prog) self.ckb_picup = tkinter.Checkbutton(prog)
self.ckb_picup["state"] = self.xmlstate
self.ckb_picup["text"] = "enthält piCtory Konfiguration" self.ckb_picup["text"] = "enthält piCtory Konfiguration"
self.ckb_picup["variable"] = self.var_picup self.ckb_picup["variable"] = self.var_picup
self.ckb_picup.grid(column=0, row=r, **cpadw) self.ckb_picup.grid(column=0, row=r, **cpadw)
btn = tkinter.Button(prog) btn = tkinter.Button(prog)
btn["command"] = self.plcupload btn["command"] = self.plcupload
btn["state"] = self.xmlstate
btn["text"] = "Upload" btn["text"] = "Upload"
btn.grid(column=1, row=r, **cpad) btn.grid(column=1, row=r, **cpad)
@@ -135,6 +144,7 @@ class RevPiProgram(tkinter.Frame):
lbl.grid(column=0, row=1, **cpadw) lbl.grid(column=0, row=1, **cpadw)
btn = tkinter.Button(picto) btn = tkinter.Button(picto)
btn["command"] = self.setpictoryrsc btn["command"] = self.setpictoryrsc
btn["state"] = self.xmlstate
btn["text"] = "Upload" btn["text"] = "Upload"
btn.grid(column=1, row=1, **cpad) btn.grid(column=1, row=1, **cpad)
@@ -144,7 +154,7 @@ class RevPiProgram(tkinter.Frame):
proc["text"] = "piControl0 Prozessabbild" proc["text"] = "piControl0 Prozessabbild"
proc.grid(columnspan=2, pady=2, sticky="we") proc.grid(columnspan=2, pady=2, sticky="we")
lbl = tkinter.Label(proc) lbl = tkinter.Label(proc)
lbl["text"] = "Prozessabbild herunterladen" lbl["text"] = "Prozessabbild-Dump herunterladen"
lbl.grid(column=0, row=0, **cpadw) lbl.grid(column=0, row=0, **cpadw)
btn = tkinter.Button(proc) btn = tkinter.Button(proc)
btn["command"] = self.getprocimg btn["command"] = self.getprocimg
@@ -282,7 +292,7 @@ class RevPiProgram(tkinter.Frame):
ask = tkmsg.askyesno( ask = tkmsg.askyesno(
parent=self.master, title="Frage", parent=self.master, title="Frage",
message="Soll nach dem Hochladen der piCtory Konfiguration " message="Soll nach dem Hochladen der piCtory Konfiguration "
"ein reset am piControl Treiber durchgeführt werden?" "ein Reset am piControl Treiber durchgeführt werden?"
) )
ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask) ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask)
@@ -400,7 +410,7 @@ class RevPiProgram(tkinter.Frame):
if tup == 0: if tup == 0:
# Datei # Datei
fileselect = tkfd.askopenfilenames( fileselect = tkfd.askopenfilenames(
parent=self.master, title="Pythonprogramm übertragen...", parent=self.master, title="Python Programm übertragen...",
filetypes=(("Python", "*.py"), ("All Files", "*.*")) filetypes=(("Python", "*.py"), ("All Files", "*.*"))
) )
if type(fileselect) == tuple and len(fileselect) > 0: if type(fileselect) == tuple and len(fileselect) > 0:

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -22,6 +22,7 @@ from xmlrpc.client import ServerProxy
socket.setdefaulttimeout(2) socket.setdefaulttimeout(2)
def addroot(filename): def addroot(filename):
u"""Hängt root-dir der Anwendung vor Dateinamen. u"""Hängt root-dir der Anwendung vor Dateinamen.
@@ -48,6 +49,7 @@ class RevPiPyControl(tkinter.Frame):
self.dict_conn = revpiplclist.get_connections() self.dict_conn = revpiplclist.get_connections()
self.errcount = 0 self.errcount = 0
self.revpiname = None self.revpiname = None
self.xmlmode = 0
# Globale Fenster # Globale Fenster
self.tklogs = None self.tklogs = None
@@ -148,7 +150,7 @@ class RevPiPyControl(tkinter.Frame):
) )
# Server prüfen # Server prüfen
try: try:
sp.system.listMethods() self.xmlmode = sp.xmlmodus()
except: except:
self.servererror() self.servererror()
else: else:
@@ -183,28 +185,46 @@ class RevPiPyControl(tkinter.Frame):
self._fillconnbar() self._fillconnbar()
def plclogs(self): def plclogs(self):
# TODO: nicht doppelt starten if self.tklogs is None or len(self.tklogs.children) == 0:
win = tkinter.Toplevel(self) win = tkinter.Toplevel(self)
self.tklogs = revpilogfile.RevPiLogfile(win, self.cli) self.tklogs = revpilogfile.RevPiLogfile(win, self.cli)
else:
self.tklogs.focus_set()
def plcmonitor(self): def plcmonitor(self):
# TODO: Monitorfenster # TODO: Monitorfenster
#self.tkmonitor = revpicheckclient.RevPiCheckClient(self.master, self.cli)
pass pass
def plcoptions(self): def plcoptions(self):
win = tkinter.Toplevel(self) if self.xmlmode < 2:
self.tkoptions = revpioption.RevPiOption(win, self.cli) tkmsg.showwarning(
win.focus_set() parent=self.master, title="Warnung",
win.grab_set() message="Der XML-RPC Modus ist beim RevPiPyLoad nicht hoch "
self.wait_window(win) "genug eingestellt, um diesen Dialog zu verwenden!"
)
else:
win = tkinter.Toplevel(self)
self.tkoptions = \
revpioption.RevPiOption(win, self.cli, self.xmlmode)
win.focus_set()
win.grab_set()
self.wait_window(win)
self.xmlmode = self.tkoptions.xmlmode
def plcprogram(self): def plcprogram(self):
win = tkinter.Toplevel(self) if self.xmlmode < 2:
self.tkprogram = revpiprogram.RevPiProgram(win, self.cli, self.revpiname) tkmsg.showwarning(
win.focus_set() parent=self.master, title="Warnung",
win.grab_set() message="Der XML-RPC Modus ist beim RevPiPyLoad nicht hoch "
self.wait_window(win) "genug eingestellt, um diesen Dialog zu verwenden!"
)
else:
win = tkinter.Toplevel(self)
self.tkprogram = revpiprogram.RevPiProgram(
win, self.cli, self.xmlmode, self.revpiname)
win.focus_set()
win.grab_set()
self.wait_window(win)
def plcstart(self): def plcstart(self):
self.cli.plcstart() self.cli.plcstart()
@@ -223,9 +243,7 @@ class RevPiPyControl(tkinter.Frame):
self._btnstate() self._btnstate()
self.mbar.entryconfig("PLC", state="disabled") self.mbar.entryconfig("PLC", state="disabled")
self.var_conn.set("") self.var_conn.set("")
self._closeall() self._closeall()
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!") tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
def tmr_plcrunning(self): def tmr_plcrunning(self):
@@ -250,6 +268,10 @@ class RevPiPyControl(tkinter.Frame):
plcec = "RUNNING" plcec = "RUNNING"
elif plcec == -2: elif plcec == -2:
plcec = "FILE NOT FOUND" plcec = "FILE NOT FOUND"
elif plcec == -9:
plcec = "PROGRAM KILLED"
elif plcec == -15:
plcec = "PROGRAMS TERMED"
elif plcec == 0: elif plcec == 0:
plcec = "NOT RUNNING" plcec = "NOT RUNNING"
self.var_status.set(plcec) self.var_status.set(plcec)

View File

@@ -24,9 +24,9 @@ globsetup = {
"url": "https://revpimodio.org/revpipyplc/", "url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3", "license": "LGPLv3",
"version": "0.2.6", "version": "0.2.6",
"name": "revpipycontrol", "name": "revpipycontrol",
"description": "PLC Loader für Python-Projekte auf den RevolutionPi", "description": "PLC Loader für Python-Projekte auf den RevolutionPi",
"long_description": "" "long_description": ""
"Dieses Programm startet beim Systemstart ein angegebenes Python PLC\n" "Dieses Programm startet beim Systemstart ein angegebenes Python PLC\n"