1
0
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:
2017-03-04 17:31:50 +01:00
parent 2b65c74d34
commit c5ef2ae249
3 changed files with 72 additions and 35 deletions

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-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/>

View File

@@ -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)

View File

@@ -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
@@ -80,7 +82,7 @@ class RevPiPyControl(tkinter.Frame):
super().__init__(master) super().__init__(master)
self.pack(fill="both", expand=True) self.pack(fill="both", expand=True)
# Command arguments # Command arguments
parser = ArgumentParser( parser = ArgumentParser(
description="Revolution Pi IO-Client" description="Revolution Pi IO-Client"
) )
@@ -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,34 +157,53 @@ 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()
self.tkmonitor = revpicheckclient.RevPiCheckClient(root, self.cli) self.tkmonitor = revpicheckclient.RevPiCheckClient(root, self.cli)
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()