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"?>
|
||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||
<!-- 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 -->
|
||||
<Project version="5.1">
|
||||
<Language>en_US</Language>
|
||||
@@ -9,7 +9,7 @@
|
||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||
<ProjectType>Console</ProjectType>
|
||||
<Description></Description>
|
||||
<Version>0.2.1</Version>
|
||||
<Version>0.2.6</Version>
|
||||
<Author>Sven Sager</Author>
|
||||
<Email>akira@narux.de</Email>
|
||||
<Eol index="-1"/>
|
||||
@@ -27,7 +27,9 @@
|
||||
<Translations/>
|
||||
<Resources/>
|
||||
<Interfaces/>
|
||||
<Others/>
|
||||
<Others>
|
||||
<Other>data</Other>
|
||||
</Others>
|
||||
<MainScript>revpipycontrol/revpipycontrol.py</MainScript>
|
||||
<Vcs>
|
||||
<VcsType>Mercurial</VcsType>
|
||||
|
||||
@@ -21,21 +21,42 @@ class RevPiLogfile(tkinter.Frame):
|
||||
def _createwidgets(self):
|
||||
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
|
||||
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.plcscr = tkinter.Scrollbar(self)
|
||||
self.plclog.pack(side="left", expand=True, fill="both")
|
||||
self.plcscr.pack(side="left", fill="y")
|
||||
# self.plclog["state"] = "disabled"
|
||||
self.plclog.grid(sticky="wnse", columnspan=2, column=0, row=1)
|
||||
self.plcscr.grid(sticky="ns", column=2, row=1)
|
||||
self.plclog["yscrollcommand"] = self.plcscr.set
|
||||
self.plcscr["command"] = self.plclog.yview
|
||||
|
||||
# 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.appscr = tkinter.Scrollbar(self)
|
||||
self.appscr.pack(side="right", fill="y")
|
||||
self.applog.pack(side="right", expand=True, fill="both")
|
||||
# self.applog["state"] = "disabled"
|
||||
self.applog.grid(sticky="nesw", columnspan=2, column=3, row=1)
|
||||
self.appscr.grid(sticky="ns", column=5, row=1)
|
||||
self.applog["yscrollcommand"] = self.appscr.set
|
||||
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_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):
|
||||
roll = self.applog.yview()[1] == 1.0
|
||||
for line in self.xmlcli.get_applines():
|
||||
self.applog.insert(tkinter.END, line)
|
||||
try:
|
||||
for line in self.xmlcli.get_applines():
|
||||
self.applog.insert(tkinter.END, line)
|
||||
except:
|
||||
pass
|
||||
if roll:
|
||||
self.applog.see(tkinter.END)
|
||||
self.master.after(1000, self.get_applines)
|
||||
@@ -61,8 +91,11 @@ class RevPiLogfile(tkinter.Frame):
|
||||
|
||||
def get_plclines(self):
|
||||
roll = self.plclog.yview()[1] == 1.0
|
||||
for line in self.xmlcli.get_plclines():
|
||||
self.plclog.insert(tkinter.END, line)
|
||||
try:
|
||||
for line in self.xmlcli.get_plclines():
|
||||
self.plclog.insert(tkinter.END, line)
|
||||
except:
|
||||
pass
|
||||
if roll:
|
||||
self.plclog.see(tkinter.END)
|
||||
self.master.after(1000, self.get_plclines)
|
||||
|
||||
@@ -84,8 +84,11 @@ class RevPiOption(tkinter.Frame):
|
||||
lbl = tkinter.Label(prog)
|
||||
lbl["text"] = "Python PLC Programname"
|
||||
lbl.grid(columnspan=2, **cpadw)
|
||||
lst = self.xmlcli.get_filelist()
|
||||
if len(lst) == 0:
|
||||
lst.append("none")
|
||||
opt_startpy = tkinter.OptionMenu(
|
||||
prog, self.var_startpy, *self.xmlcli.get_filelist())
|
||||
prog, self.var_startpy, *lst)
|
||||
opt_startpy.grid(columnspan=2, **cpadwe)
|
||||
ckb_slave = tkinter.Checkbutton(prog, justify="left")
|
||||
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)
|
||||
print(ec)
|
||||
if ec == 0:
|
||||
if ask:
|
||||
tkmsg.showinfo(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python3
|
||||
#
|
||||
# RevPiPyControl
|
||||
# Version: 0.2.1
|
||||
# Version: 0.2.6
|
||||
#
|
||||
# Webpage: https://revpimodio.org/revpipyplc/
|
||||
# (c) Sven Sager, License: LGPLv3
|
||||
@@ -20,7 +20,7 @@ from os.path import dirname
|
||||
from os.path import join as pathjoin
|
||||
from xmlrpc.client import ServerProxy
|
||||
|
||||
socket.setdefaulttimeout(3)
|
||||
socket.setdefaulttimeout(2)
|
||||
|
||||
def addroot(filename):
|
||||
u"""Hängt root-dir der Anwendung vor Dateinamen.
|
||||
@@ -46,8 +46,14 @@ class RevPiPyControl(tkinter.Frame):
|
||||
|
||||
self.cli = None
|
||||
self.dict_conn = revpiplclist.get_connections()
|
||||
self.errcount = 0
|
||||
self.revpiname = None
|
||||
|
||||
# Globale Fenster
|
||||
self.tklogs = None
|
||||
self.tkoptions = None
|
||||
self.tkprogram = None
|
||||
|
||||
# Fenster aufbauen
|
||||
self._createwidgets()
|
||||
|
||||
@@ -118,7 +124,7 @@ class RevPiPyControl(tkinter.Frame):
|
||||
# PLC Menü
|
||||
self.mplc = tkinter.Menu(self.mbar, tearoff=False)
|
||||
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 program...", command=self.plcprogram)
|
||||
self.mbar.add_cascade(label="PLC", menu=self.mplc, state="disabled")
|
||||
@@ -135,7 +141,6 @@ class RevPiPyControl(tkinter.Frame):
|
||||
)
|
||||
|
||||
def _opt_conn(self, text):
|
||||
socket.setdefaulttimeout(20)
|
||||
sp = ServerProxy(
|
||||
"http://{}:{}".format(
|
||||
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||
@@ -147,13 +152,27 @@ class RevPiPyControl(tkinter.Frame):
|
||||
except:
|
||||
self.servererror()
|
||||
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.var_conn.set("{} - {}:{}".format(
|
||||
text, self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||
))
|
||||
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):
|
||||
win = tkinter.Toplevel(self)
|
||||
revpiplclist.RevPiPlcList(win)
|
||||
@@ -175,14 +194,14 @@ class RevPiPyControl(tkinter.Frame):
|
||||
|
||||
def plcoptions(self):
|
||||
win = tkinter.Toplevel(self)
|
||||
revpioption.RevPiOption(win, self.cli)
|
||||
self.tkoptions = revpioption.RevPiOption(win, self.cli)
|
||||
win.focus_set()
|
||||
win.grab_set()
|
||||
self.wait_window(win)
|
||||
|
||||
def plcprogram(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.grab_set()
|
||||
self.wait_window(win)
|
||||
@@ -198,11 +217,15 @@ class RevPiPyControl(tkinter.Frame):
|
||||
self.cli.plcstart()
|
||||
|
||||
def servererror(self):
|
||||
socket.setdefaulttimeout(3)
|
||||
"""Setzt alles auf NULL."""
|
||||
socket.setdefaulttimeout(2)
|
||||
self.cli = None
|
||||
self._btnstate()
|
||||
self.mbar.entryconfig("PLC", state="disabled")
|
||||
self.var_conn.set("")
|
||||
|
||||
self._closeall()
|
||||
|
||||
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
|
||||
|
||||
def tmr_plcrunning(self):
|
||||
@@ -212,16 +235,17 @@ class RevPiPyControl(tkinter.Frame):
|
||||
self.var_status.set("NOT CONNECTED")
|
||||
else:
|
||||
try:
|
||||
if self.cli.plcrunning():
|
||||
self.txt_status["readonlybackground"] = "green"
|
||||
else:
|
||||
self.txt_status["readonlybackground"] = "red"
|
||||
|
||||
plcec = self.cli.plcexitcode()
|
||||
except:
|
||||
self.var_status.set("SERVER ERROR")
|
||||
self.servererror()
|
||||
self.errcount += 1
|
||||
if self.errcount >= 5:
|
||||
self.var_status.set("SERVER ERROR")
|
||||
self.servererror()
|
||||
else:
|
||||
self.errcount = 0
|
||||
self.txt_status["readonlybackground"] = \
|
||||
"green" if plcec == -1 else "red"
|
||||
|
||||
if plcec == -1:
|
||||
plcec = "RUNNING"
|
||||
elif plcec == -2:
|
||||
|
||||
Reference in New Issue
Block a user