mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 15:43:52 +01:00
bugfixes
Logviewer umgebaut Fenster schlie?en bei Verbindungsfehler Verbindungscheck mit Z?hlercounter
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-03-09, 20:23:30 -->
|
<!-- Saved: 2017-03-16, 16:32:04 -->
|
||||||
<!-- 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></Description>
|
<Description></Description>
|
||||||
<Version>0.2.1</Version>
|
<Version>0.2.6</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"/>
|
||||||
@@ -27,7 +27,9 @@
|
|||||||
<Translations/>
|
<Translations/>
|
||||||
<Resources/>
|
<Resources/>
|
||||||
<Interfaces/>
|
<Interfaces/>
|
||||||
<Others/>
|
<Others>
|
||||||
|
<Other>data</Other>
|
||||||
|
</Others>
|
||||||
<MainScript>revpipycontrol/revpipycontrol.py</MainScript>
|
<MainScript>revpipycontrol/revpipycontrol.py</MainScript>
|
||||||
<Vcs>
|
<Vcs>
|
||||||
<VcsType>Mercurial</VcsType>
|
<VcsType>Mercurial</VcsType>
|
||||||
|
|||||||
@@ -21,21 +21,42 @@ class RevPiLogfile(tkinter.Frame):
|
|||||||
def _createwidgets(self):
|
def _createwidgets(self):
|
||||||
self.master.wm_title("RevPi Python PLC Logs")
|
self.master.wm_title("RevPi Python PLC Logs")
|
||||||
|
|
||||||
|
self.rowconfigure(0, weight=0)
|
||||||
|
self.rowconfigure(1, weight=1)
|
||||||
|
self.columnconfigure(0, weight=1)
|
||||||
|
self.columnconfigure(1, weight=0)
|
||||||
|
self.columnconfigure(2, weight=0)
|
||||||
|
self.columnconfigure(3, weight=1)
|
||||||
|
self.columnconfigure(4, weight=0)
|
||||||
|
self.columnconfigure(5, weight=0)
|
||||||
|
|
||||||
# PLC Log
|
# PLC Log
|
||||||
|
self.lblapplog = tkinter.Label(self)
|
||||||
|
self.lblapplog["text"] = "RevPyPyLoad - Logfile"
|
||||||
|
self.lblapplog.grid(column=0, row=0, sticky="w")
|
||||||
|
self.btnapplog = tkinter.Button(self)
|
||||||
|
self.btnapplog["command"] = self.btn_clearplc
|
||||||
|
self.btnapplog["text"] = "Clear screen"
|
||||||
|
self.btnapplog.grid(column=1, row=0, sticky="e")
|
||||||
self.plclog = tkinter.Text(self)
|
self.plclog = tkinter.Text(self)
|
||||||
self.plcscr = tkinter.Scrollbar(self)
|
self.plcscr = tkinter.Scrollbar(self)
|
||||||
self.plclog.pack(side="left", expand=True, fill="both")
|
self.plclog.grid(sticky="wnse", columnspan=2, column=0, row=1)
|
||||||
self.plcscr.pack(side="left", fill="y")
|
self.plcscr.grid(sticky="ns", column=2, row=1)
|
||||||
# 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
|
||||||
|
|
||||||
# APP Log
|
# APP Log
|
||||||
|
self.lblapplog = tkinter.Label(self)
|
||||||
|
self.lblapplog["text"] = "Python PLC program - Logfile"
|
||||||
|
self.lblapplog.grid(column=3, row=0, sticky="w")
|
||||||
|
self.btnapplog = tkinter.Button(self)
|
||||||
|
self.btnapplog["command"] = self.btn_clearapp
|
||||||
|
self.btnapplog["text"] = "Clear screen"
|
||||||
|
self.btnapplog.grid(column=4, row=0, sticky="e")
|
||||||
self.applog = tkinter.Text(self)
|
self.applog = tkinter.Text(self)
|
||||||
self.appscr = tkinter.Scrollbar(self)
|
self.appscr = tkinter.Scrollbar(self)
|
||||||
self.appscr.pack(side="right", fill="y")
|
self.applog.grid(sticky="nesw", columnspan=2, column=3, row=1)
|
||||||
self.applog.pack(side="right", expand=True, fill="both")
|
self.appscr.grid(sticky="ns", column=5, row=1)
|
||||||
# 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
|
||||||
|
|
||||||
@@ -46,10 +67,19 @@ class RevPiLogfile(tkinter.Frame):
|
|||||||
self.master.after(1000, self.get_applines)
|
self.master.after(1000, self.get_applines)
|
||||||
self.master.after(1000, self.get_plclines)
|
self.master.after(1000, self.get_plclines)
|
||||||
|
|
||||||
|
def btn_clearapp(self):
|
||||||
|
self.applog.delete(1.0, tkinter.END)
|
||||||
|
|
||||||
|
def btn_clearplc(self):
|
||||||
|
self.plclog.delete(1.0, tkinter.END)
|
||||||
|
|
||||||
def get_applines(self):
|
def get_applines(self):
|
||||||
roll = self.applog.yview()[1] == 1.0
|
roll = self.applog.yview()[1] == 1.0
|
||||||
for line in self.xmlcli.get_applines():
|
try:
|
||||||
self.applog.insert(tkinter.END, line)
|
for line in self.xmlcli.get_applines():
|
||||||
|
self.applog.insert(tkinter.END, line)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
if roll:
|
if roll:
|
||||||
self.applog.see(tkinter.END)
|
self.applog.see(tkinter.END)
|
||||||
self.master.after(1000, self.get_applines)
|
self.master.after(1000, self.get_applines)
|
||||||
@@ -61,8 +91,11 @@ class RevPiLogfile(tkinter.Frame):
|
|||||||
|
|
||||||
def get_plclines(self):
|
def get_plclines(self):
|
||||||
roll = self.plclog.yview()[1] == 1.0
|
roll = self.plclog.yview()[1] == 1.0
|
||||||
for line in self.xmlcli.get_plclines():
|
try:
|
||||||
self.plclog.insert(tkinter.END, line)
|
for line in self.xmlcli.get_plclines():
|
||||||
|
self.plclog.insert(tkinter.END, line)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
if roll:
|
if roll:
|
||||||
self.plclog.see(tkinter.END)
|
self.plclog.see(tkinter.END)
|
||||||
self.master.after(1000, self.get_plclines)
|
self.master.after(1000, self.get_plclines)
|
||||||
|
|||||||
@@ -84,8 +84,11 @@ class RevPiOption(tkinter.Frame):
|
|||||||
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()
|
||||||
|
if len(lst) == 0:
|
||||||
|
lst.append("none")
|
||||||
opt_startpy = tkinter.OptionMenu(
|
opt_startpy = tkinter.OptionMenu(
|
||||||
prog, self.var_startpy, *self.xmlcli.get_filelist())
|
prog, self.var_startpy, *lst)
|
||||||
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["text"] = "RevPi als PLC-Slave verwenden"
|
ckb_slave["text"] = "RevPi als PLC-Slave verwenden"
|
||||||
|
|||||||
@@ -286,6 +286,7 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
)
|
)
|
||||||
|
|
||||||
ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask)
|
ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask)
|
||||||
|
print(ec)
|
||||||
if ec == 0:
|
if ec == 0:
|
||||||
if ask:
|
if ask:
|
||||||
tkmsg.showinfo(
|
tkmsg.showinfo(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
#
|
#
|
||||||
# RevPiPyControl
|
# RevPiPyControl
|
||||||
# Version: 0.2.1
|
# Version: 0.2.6
|
||||||
#
|
#
|
||||||
# Webpage: https://revpimodio.org/revpipyplc/
|
# Webpage: https://revpimodio.org/revpipyplc/
|
||||||
# (c) Sven Sager, License: LGPLv3
|
# (c) Sven Sager, License: LGPLv3
|
||||||
@@ -20,7 +20,7 @@ from os.path import dirname
|
|||||||
from os.path import join as pathjoin
|
from os.path import join as pathjoin
|
||||||
from xmlrpc.client import ServerProxy
|
from xmlrpc.client import ServerProxy
|
||||||
|
|
||||||
socket.setdefaulttimeout(3)
|
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.
|
||||||
@@ -46,8 +46,14 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
|
|
||||||
self.cli = None
|
self.cli = None
|
||||||
self.dict_conn = revpiplclist.get_connections()
|
self.dict_conn = revpiplclist.get_connections()
|
||||||
|
self.errcount = 0
|
||||||
self.revpiname = None
|
self.revpiname = None
|
||||||
|
|
||||||
|
# Globale Fenster
|
||||||
|
self.tklogs = None
|
||||||
|
self.tkoptions = None
|
||||||
|
self.tkprogram = None
|
||||||
|
|
||||||
# Fenster aufbauen
|
# Fenster aufbauen
|
||||||
self._createwidgets()
|
self._createwidgets()
|
||||||
|
|
||||||
@@ -118,7 +124,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
# PLC Menü
|
# PLC Menü
|
||||||
self.mplc = tkinter.Menu(self.mbar, tearoff=False)
|
self.mplc = tkinter.Menu(self.mbar, tearoff=False)
|
||||||
self.mplc.add_command(label="PLC log...", command=self.plclogs)
|
self.mplc.add_command(label="PLC log...", command=self.plclogs)
|
||||||
self.mplc.add_command(label="PLC monitor...", command=self.plcmonitor)
|
#self.mplc.add_command(label="PLC monitor...", command=self.plcmonitor)
|
||||||
self.mplc.add_command(label="PLC options...", command=self.plcoptions)
|
self.mplc.add_command(label="PLC options...", command=self.plcoptions)
|
||||||
self.mplc.add_command(label="PLC program...", command=self.plcprogram)
|
self.mplc.add_command(label="PLC program...", command=self.plcprogram)
|
||||||
self.mbar.add_cascade(label="PLC", menu=self.mplc, state="disabled")
|
self.mbar.add_cascade(label="PLC", menu=self.mplc, state="disabled")
|
||||||
@@ -135,7 +141,6 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _opt_conn(self, text):
|
def _opt_conn(self, text):
|
||||||
socket.setdefaulttimeout(20)
|
|
||||||
sp = ServerProxy(
|
sp = ServerProxy(
|
||||||
"http://{}:{}".format(
|
"http://{}:{}".format(
|
||||||
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||||
@@ -147,13 +152,27 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
except:
|
except:
|
||||||
self.servererror()
|
self.servererror()
|
||||||
else:
|
else:
|
||||||
self.cli = sp
|
self._closeall()
|
||||||
|
socket.setdefaulttimeout(15)
|
||||||
|
self.cli = ServerProxy(
|
||||||
|
"http://{}:{}".format(
|
||||||
|
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||||
|
)
|
||||||
|
)
|
||||||
self.revpiname = text
|
self.revpiname = text
|
||||||
self.var_conn.set("{} - {}:{}".format(
|
self.var_conn.set("{} - {}:{}".format(
|
||||||
text, self.dict_conn[text][0], int(self.dict_conn[text][1])
|
text, self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||||
))
|
))
|
||||||
self.mbar.entryconfig("PLC", state="normal")
|
self.mbar.entryconfig("PLC", state="normal")
|
||||||
|
|
||||||
|
def _closeall(self):
|
||||||
|
if self.tklogs is not None:
|
||||||
|
self.tklogs.master.destroy()
|
||||||
|
if self.tkoptions is not None:
|
||||||
|
self.tkoptions.destroy()
|
||||||
|
if self.tkprogram is not None:
|
||||||
|
self.tkprogram.destroy()
|
||||||
|
|
||||||
def plclist(self):
|
def plclist(self):
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
revpiplclist.RevPiPlcList(win)
|
revpiplclist.RevPiPlcList(win)
|
||||||
@@ -175,14 +194,14 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
|
|
||||||
def plcoptions(self):
|
def plcoptions(self):
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
revpioption.RevPiOption(win, self.cli)
|
self.tkoptions = revpioption.RevPiOption(win, self.cli)
|
||||||
win.focus_set()
|
win.focus_set()
|
||||||
win.grab_set()
|
win.grab_set()
|
||||||
self.wait_window(win)
|
self.wait_window(win)
|
||||||
|
|
||||||
def plcprogram(self):
|
def plcprogram(self):
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
revpiprogram.RevPiProgram(win, self.cli, self.revpiname)
|
self.tkprogram = revpiprogram.RevPiProgram(win, self.cli, self.revpiname)
|
||||||
win.focus_set()
|
win.focus_set()
|
||||||
win.grab_set()
|
win.grab_set()
|
||||||
self.wait_window(win)
|
self.wait_window(win)
|
||||||
@@ -198,11 +217,15 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.cli.plcstart()
|
self.cli.plcstart()
|
||||||
|
|
||||||
def servererror(self):
|
def servererror(self):
|
||||||
socket.setdefaulttimeout(3)
|
"""Setzt alles auf NULL."""
|
||||||
|
socket.setdefaulttimeout(2)
|
||||||
self.cli = None
|
self.cli = None
|
||||||
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()
|
||||||
|
|
||||||
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
|
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
|
||||||
|
|
||||||
def tmr_plcrunning(self):
|
def tmr_plcrunning(self):
|
||||||
@@ -212,16 +235,17 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.var_status.set("NOT CONNECTED")
|
self.var_status.set("NOT CONNECTED")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
if self.cli.plcrunning():
|
|
||||||
self.txt_status["readonlybackground"] = "green"
|
|
||||||
else:
|
|
||||||
self.txt_status["readonlybackground"] = "red"
|
|
||||||
|
|
||||||
plcec = self.cli.plcexitcode()
|
plcec = self.cli.plcexitcode()
|
||||||
except:
|
except:
|
||||||
self.var_status.set("SERVER ERROR")
|
self.errcount += 1
|
||||||
self.servererror()
|
if self.errcount >= 5:
|
||||||
|
self.var_status.set("SERVER ERROR")
|
||||||
|
self.servererror()
|
||||||
else:
|
else:
|
||||||
|
self.errcount = 0
|
||||||
|
self.txt_status["readonlybackground"] = \
|
||||||
|
"green" if plcec == -1 else "red"
|
||||||
|
|
||||||
if plcec == -1:
|
if plcec == -1:
|
||||||
plcec = "RUNNING"
|
plcec = "RUNNING"
|
||||||
elif plcec == -2:
|
elif plcec == -2:
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -23,7 +23,7 @@ globsetup = {
|
|||||||
"author_email": "akira@narux.de",
|
"author_email": "akira@narux.de",
|
||||||
"url": "https://revpimodio.org/revpipyplc/",
|
"url": "https://revpimodio.org/revpipyplc/",
|
||||||
"license": "LGPLv3",
|
"license": "LGPLv3",
|
||||||
"version": "0.2.1",
|
"version": "0.2.6",
|
||||||
|
|
||||||
"name": "revpipycontrol",
|
"name": "revpipycontrol",
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user