1
0
mirror of https://github.com/naruxde/revpipycontrol.git synced 2025-11-08 15:43:52 +01:00
Logviewer umgebaut
Fenster schlie?en bei Verbindungsfehler
Verbindungscheck mit Z?hlercounter
This commit is contained in:
2017-03-16 16:32:47 +01:00
parent 6ef28119ad
commit cc03ede267
7 changed files with 93 additions and 30 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -23,7 +23,7 @@ globsetup = {
"author_email": "akira@narux.de",
"url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3",
"version": "0.2.1",
"version": "0.2.6",
"name": "revpipycontrol",