mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 23:53:52 +01:00
Men? eingebaut
automatische Statusaktualisierung code style
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 revpipycontrol -->
|
<!-- eric project file for project revpipycontrol -->
|
||||||
<!-- Saved: 2017-02-27, 14:26:13 -->
|
<!-- Saved: 2017-03-03, 16:51: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>
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
<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>
|
||||||
|
<Source>revpipycontrol/revpiplclist.py</Source>
|
||||||
</Sources>
|
</Sources>
|
||||||
<Forms/>
|
<Forms/>
|
||||||
<Translations/>
|
<Translations/>
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
|
|
||||||
sleep(0.1)
|
sleep(0.1)
|
||||||
|
|
||||||
def onFrameConfigure(self, canvas):
|
def onfrmconf(self, canvas):
|
||||||
canvas.configure(scrollregion=canvas.bbox("all"))
|
canvas.configure(scrollregion=canvas.bbox("all"))
|
||||||
|
|
||||||
def _createiogroup(self, device, frame, iotype):
|
def _createiogroup(self, device, frame, iotype):
|
||||||
@@ -88,13 +88,17 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
canvas.pack(side="left", fill="both", expand=True)
|
canvas.pack(side="left", fill="both", expand=True)
|
||||||
|
|
||||||
canvas.create_window((4, 4), window=s_frame, anchor="nw")
|
canvas.create_window((4, 4), window=s_frame, anchor="nw")
|
||||||
s_frame.bind("<Configure>", lambda event, canvas=canvas: self.onFrameConfigure(canvas))
|
s_frame.bind(
|
||||||
|
"<Configure>", lambda event, canvas=canvas: self.onfrmconf(canvas)
|
||||||
|
)
|
||||||
|
|
||||||
rowcount = 0
|
rowcount = 0
|
||||||
for io in self.cli.get_iolist(device, iotype):
|
for io in self.cli.get_iolist(device, iotype):
|
||||||
# io = [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress,tkinter_var]
|
# io = [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress,tkinter_var]
|
||||||
|
|
||||||
tkinter.Label(s_frame, text=io[0]).grid(column=0, row=rowcount, sticky="w")
|
tkinter.Label(s_frame, text=io[0]).grid(
|
||||||
|
column=0, row=rowcount, sticky="w"
|
||||||
|
)
|
||||||
|
|
||||||
if io[7] >= 0:
|
if io[7] >= 0:
|
||||||
var = tkinter.BooleanVar()
|
var = tkinter.BooleanVar()
|
||||||
@@ -103,16 +107,13 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
check["text"] = ""
|
check["text"] = ""
|
||||||
check["variable"] = var
|
check["variable"] = var
|
||||||
check.grid(column=1, row=rowcount)
|
check.grid(column=1, row=rowcount)
|
||||||
#check.pack(anchor="e", side="right")
|
|
||||||
else:
|
else:
|
||||||
var = tkinter.IntVar()
|
var = tkinter.IntVar()
|
||||||
#txt = tkinter.Spinbox(fra_group, to=256)
|
|
||||||
txt = tkinter.Spinbox(s_frame, to=256)
|
txt = tkinter.Spinbox(s_frame, to=256)
|
||||||
txt["state"] = "disabled" if iotype == "inp" else "normal"
|
txt["state"] = "disabled" if iotype == "inp" else "normal"
|
||||||
txt["width"] = 4
|
txt["width"] = 4
|
||||||
txt["textvariable"] = var
|
txt["textvariable"] = var
|
||||||
txt.grid(column=1, row=rowcount)
|
txt.grid(column=1, row=rowcount)
|
||||||
#txt.pack(anchor="e", side="right")
|
|
||||||
|
|
||||||
# Steuerelementvariable in IO übernehmen
|
# Steuerelementvariable in IO übernehmen
|
||||||
io.append(var)
|
io.append(var)
|
||||||
@@ -211,7 +212,8 @@ class RevPiCheckClient(tkinter.Frame):
|
|||||||
def toggleauto(self):
|
def toggleauto(self):
|
||||||
self.btn_read["state"] = "disabled" if self.autorw.get() else "normal"
|
self.btn_read["state"] = "disabled" if self.autorw.get() else "normal"
|
||||||
self.btn_write["state"] = "disabled" if self.autorw.get() else "normal"
|
self.btn_write["state"] = "disabled" if self.autorw.get() else "normal"
|
||||||
if self.autorw.get() and (self.fut_autorw is None or self.fut_autorw.done()):
|
if self.autorw.get() \
|
||||||
|
and (self.fut_autorw is None or self.fut_autorw.done()):
|
||||||
e = ThreadPoolExecutor(max_workers=1)
|
e = ThreadPoolExecutor(max_workers=1)
|
||||||
self.fut_autorw = e.submit(self._autorw)
|
self.fut_autorw = e.submit(self._autorw)
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from argparse import ArgumentParser
|
|||||||
from xmlrpc.client import ServerProxy, Binary
|
from xmlrpc.client import ServerProxy, Binary
|
||||||
|
|
||||||
|
|
||||||
class RevPiPyLogs(tkinter.Frame):
|
class RevPiPlcLogs(tkinter.Frame):
|
||||||
|
|
||||||
def __init__(self, master, xmlcli):
|
def __init__(self, master, xmlcli):
|
||||||
super().__init__(master)
|
super().__init__(master)
|
||||||
@@ -29,6 +29,7 @@ class RevPiPyLogs(tkinter.Frame):
|
|||||||
self.plcscr = tkinter.Scrollbar(self)
|
self.plcscr = tkinter.Scrollbar(self)
|
||||||
self.plclog.pack(side="left", expand=True, fill="both")
|
self.plclog.pack(side="left", expand=True, fill="both")
|
||||||
self.plcscr.pack(side="left", fill="y")
|
self.plcscr.pack(side="left", fill="y")
|
||||||
|
# self.plclog["state"] = "disabled"
|
||||||
self.plclog["yscrollcommand"] = self.plcscr.set
|
self.plclog["yscrollcommand"] = self.plcscr.set
|
||||||
self.plcscr["command"] = self.plclog.yview
|
self.plcscr["command"] = self.plclog.yview
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ class RevPiPyLogs(tkinter.Frame):
|
|||||||
self.appscr = tkinter.Scrollbar(self)
|
self.appscr = tkinter.Scrollbar(self)
|
||||||
self.appscr.pack(side="right", fill="y")
|
self.appscr.pack(side="right", fill="y")
|
||||||
self.applog.pack(side="right", expand=True, fill="both")
|
self.applog.pack(side="right", expand=True, fill="both")
|
||||||
|
# self.applog["state"] = "disabled"
|
||||||
self.applog["yscrollcommand"] = self.appscr.set
|
self.applog["yscrollcommand"] = self.appscr.set
|
||||||
self.appscr["command"] = self.applog.yview
|
self.appscr["command"] = self.applog.yview
|
||||||
|
|
||||||
@@ -102,22 +104,33 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self._createwidgets()
|
self._createwidgets()
|
||||||
|
|
||||||
# Daten aktualisieren
|
# Daten aktualisieren
|
||||||
self.plcrunning()
|
self.tmr_plcrunning()
|
||||||
|
|
||||||
def _createwidgets(self):
|
def _createwidgets(self):
|
||||||
"""Erstellt den Fensterinhalt."""
|
"""Erstellt den Fensterinhalt."""
|
||||||
# Hauptfenster
|
# Hauptfenster
|
||||||
self.master.wm_title("RevPi Python PLC Loader")
|
self.master.wm_title("RevPi Python PLC Loader")
|
||||||
|
|
||||||
self.var_status = tkinter.StringVar()
|
self.var_opt = tkinter.StringVar()
|
||||||
self.txt_status = tkinter.Entry()
|
self.lst_opt = [
|
||||||
self.txt_status["textvariable"] = self.var_status
|
"Verbindungen...",
|
||||||
self.txt_status.pack(fill="x")
|
"------------------",
|
||||||
|
"PLC Log...",
|
||||||
|
"PLC Monitor...",
|
||||||
|
"PLC Optionen...",
|
||||||
|
"------------------",
|
||||||
|
"Beenden",
|
||||||
|
]
|
||||||
|
self.opt_menu = tkinter.OptionMenu(
|
||||||
|
self, self.var_opt, *self.lst_opt, command=self._opt_do
|
||||||
|
)
|
||||||
|
self.opt_menu.pack(fill="x")
|
||||||
|
|
||||||
self.btn_plcrunning = tkinter.Button(self)
|
self.var_conn = tkinter.StringVar()
|
||||||
self.btn_plcrunning["text"] = "PLC Status"
|
self.txt_conn = tkinter.Entry(self)
|
||||||
self.btn_plcrunning["command"] = self.plcrunning
|
self.txt_conn["state"] = "readonly"
|
||||||
self.btn_plcrunning.pack(fill="x")
|
self.txt_conn["textvariable"] = self.var_conn
|
||||||
|
self.txt_conn.pack()
|
||||||
|
|
||||||
self.btn_plcstart = tkinter.Button(self)
|
self.btn_plcstart = tkinter.Button(self)
|
||||||
self.btn_plcstart["text"] = "PLC Start"
|
self.btn_plcstart["text"] = "PLC Start"
|
||||||
@@ -144,9 +157,32 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.btn_plcrestart["command"] = self.plclogs
|
self.btn_plcrestart["command"] = self.plclogs
|
||||||
self.btn_plcrestart.pack(fill="x")
|
self.btn_plcrestart.pack(fill="x")
|
||||||
|
|
||||||
|
self.var_status = tkinter.StringVar()
|
||||||
|
self.txt_status = tkinter.Entry(self)
|
||||||
|
self.txt_status["state"] = "readonly"
|
||||||
|
self.txt_status["textvariable"] = self.var_status
|
||||||
|
self.txt_status.pack()
|
||||||
|
|
||||||
|
def _opt_do(self, text):
|
||||||
|
optselect = self.lst_opt.index(text)
|
||||||
|
if optselect == 0:
|
||||||
|
# Verbindungen
|
||||||
|
pass
|
||||||
|
elif optselect == 2:
|
||||||
|
self.plclogs()
|
||||||
|
elif optselect == 3:
|
||||||
|
pass
|
||||||
|
# self.plcmonitor()
|
||||||
|
elif optselect == 4:
|
||||||
|
# Optionen
|
||||||
|
pass
|
||||||
|
elif optselect == 6:
|
||||||
|
self.master.destroy()
|
||||||
|
self.var_opt.set("")
|
||||||
|
|
||||||
def plclogs(self):
|
def plclogs(self):
|
||||||
root = tkinter.Tk()
|
root = tkinter.Tk()
|
||||||
self.tklogs = RevPiPyLogs(root, self.cli)
|
self.tklogs = RevPiPlcLogs(root, self.cli)
|
||||||
|
|
||||||
def plcmonitor(self):
|
def plcmonitor(self):
|
||||||
root = tkinter.Tk()
|
root = tkinter.Tk()
|
||||||
@@ -154,24 +190,20 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
|
|
||||||
def plcstart(self):
|
def plcstart(self):
|
||||||
self.cli.plcstart()
|
self.cli.plcstart()
|
||||||
self.plcrunning()
|
|
||||||
|
|
||||||
def plcstop(self):
|
def plcstop(self):
|
||||||
self.cli.plcstop()
|
self.cli.plcstop()
|
||||||
self.plcrunning()
|
|
||||||
|
|
||||||
def plcrestart(self):
|
def plcrestart(self):
|
||||||
self.cli.plcstop()
|
self.cli.plcstop()
|
||||||
self.cli.plcstart()
|
self.cli.plcstart()
|
||||||
self.plcrunning()
|
|
||||||
|
|
||||||
def plcrunning(self):
|
def tmr_plcrunning(self):
|
||||||
if self.cli.plcrunning():
|
if self.cli.plcrunning():
|
||||||
self.btn_plcrunning["activebackground"] = "green"
|
self.txt_status["readonlybackground"] = "green"
|
||||||
self.btn_plcrunning["bg"] = "green"
|
|
||||||
else:
|
else:
|
||||||
self.btn_plcrunning["activebackground"] = "red"
|
self.txt_status["readonlybackground"] = "red"
|
||||||
self.btn_plcrunning["bg"] = "red"
|
|
||||||
plcec = self.cli.plcexitcode()
|
plcec = self.cli.plcexitcode()
|
||||||
if plcec == -1:
|
if plcec == -1:
|
||||||
plcec = "RUNNING"
|
plcec = "RUNNING"
|
||||||
@@ -179,6 +211,8 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
plcec = "NOT RUNNING"
|
plcec = "NOT RUNNING"
|
||||||
self.var_status.set(plcec)
|
self.var_status.set(plcec)
|
||||||
|
|
||||||
|
self.master.after(1000, self.tmr_plcrunning)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
root = tkinter.Tk()
|
root = tkinter.Tk()
|
||||||
|
|||||||
Reference in New Issue
Block a user