mirror of
https://github.com/uhi22/pyPLC.git
synced 2024-11-20 01:13:58 +00:00
174 lines
5.2 KiB
Python
174 lines
5.2 KiB
Python
|
|
# This is a simple Tkinter program, running a main loop and reacting on keys
|
|
#
|
|
# Tested on Windows10 with python 3.9
|
|
#
|
|
# https://groups.google.com/g/comp.lang.python/c/dldnjWRX3lE/m/cL69gG3fCAAJ
|
|
|
|
#------------------------------------------------------------
|
|
import tkinter as tk
|
|
import time
|
|
import pyPlcWorker
|
|
from pyPlcModes import *
|
|
import sys # for argv
|
|
from configmodule import getConfigValue, getConfigValueBool
|
|
from mytestsuite import *
|
|
|
|
startTime_ms = round(time.time()*1000)
|
|
|
|
def storekeyname(event):
|
|
global nKeystrokes
|
|
global lastKey
|
|
nKeystrokes+=1
|
|
lastKey = event.keysym
|
|
worker.handleUserAction(lastKey)
|
|
return 'break' # swallow the event
|
|
|
|
def inkey():
|
|
global lastKey
|
|
return lastKey
|
|
lastKey = ''
|
|
|
|
def cbAddToTrace(s):
|
|
currentTime_ms = round(time.time()*1000)
|
|
dT_ms = currentTime_ms - startTime_ms
|
|
print("[" + str(dT_ms) + "ms] " + s)
|
|
|
|
def cbShowStatus(s, selection=""):
|
|
#print(s)
|
|
if (selection == "mode"):
|
|
lblMode['text']=s
|
|
s=""
|
|
if (selection == "pevmac"):
|
|
lblPevMac['text']="PEV MAC " + s
|
|
s=""
|
|
if (selection == "uInlet"):
|
|
lblUInlet['text']= "UInlet " + s + "V"
|
|
s=""
|
|
if (selection == "EVSEPresentVoltage"):
|
|
lblEVSEPresentVoltage['text']= "EVSEPresentVoltage " + s + "V"
|
|
s=""
|
|
if (selection == "pevState"):
|
|
lblState['text']= s
|
|
s=""
|
|
if (selection == "evseState"):
|
|
lblState['text']= s
|
|
s=""
|
|
if (selection == "soc"):
|
|
lblSoc['text']= "SOC " + s + "%"
|
|
s=""
|
|
if (selection == "UandI"):
|
|
lblRequestedUandI['text']= "Target " + s + ""
|
|
s=""
|
|
if (selection == "PowerSupplyUPresent"):
|
|
lblPowerSupplyUPresent['text']= "UPresent " + s + "V"
|
|
s=""
|
|
if (selection == "PowerSupplyUTarget"):
|
|
lblPowerSupplyUTarget['text']= "UTarget " + s + "V"
|
|
s=""
|
|
if (len(s)>0):
|
|
lblStatus['text']=s
|
|
root.update()
|
|
|
|
myMode = C_LISTEN_MODE
|
|
if (getConfigValue("mode")=="PevMode"):
|
|
myMode = C_PEV_MODE
|
|
if (getConfigValue("mode")=="EvseMode"):
|
|
myMode = C_EVSE_MODE
|
|
# The command line arguments overwrite the config file setting for PevMode/EvseMode.
|
|
if (len(sys.argv) > 1):
|
|
if (sys.argv[1] == "P"):
|
|
myMode = C_PEV_MODE
|
|
else:
|
|
if (sys.argv[1] == "E"):
|
|
myMode = C_EVSE_MODE
|
|
else:
|
|
if (sys.argv[1] == "L"):
|
|
myMode = C_LISTEN_MODE
|
|
|
|
|
|
# The simulation mode can be set by command line in addition in both, PevMode and EvseMode.
|
|
isSimulationMode=0
|
|
if (len(sys.argv) > 2):
|
|
if (sys.argv[2] == "S"):
|
|
isSimulationMode=1
|
|
|
|
if (myMode == C_LISTEN_MODE):
|
|
print("starting in LISTEN_MODE")
|
|
if (myMode == C_PEV_MODE):
|
|
if (isSimulationMode!=0):
|
|
print("starting in PevMode, simulated environment")
|
|
else:
|
|
print("starting in PevMode")
|
|
if (myMode == C_EVSE_MODE):
|
|
if (isSimulationMode!=0):
|
|
print("starting in EvseMode, simulated environment")
|
|
else:
|
|
print("starting in EvseMode")
|
|
|
|
root = tk.Tk()
|
|
#root.geometry("400x350")
|
|
root.geometry("600x350")
|
|
lastKey = ''
|
|
if (myMode == C_EVSE_MODE):
|
|
frmPowerSupply = tk.Frame(root, bg='lightblue', bd=3)
|
|
frmPowerSupply.pack(side='right', fill='both', expand='True')
|
|
lblPowerSupplyUTarget = tk.Label(frmPowerSupply, text="(UTarget)", bg='lightblue')
|
|
lblPowerSupplyUTarget.config(font=('Helvetica bold', 18))
|
|
lblPowerSupplyUTarget.pack()
|
|
lblPowerSupplyUPresent = tk.Label(frmPowerSupply, text="(PowerSupplyUPresent)", bg='lightblue')
|
|
lblPowerSupplyUPresent.config(font=('Helvetica bold', 18))
|
|
lblPowerSupplyUPresent.pack()
|
|
|
|
lblHelp = tk.Label(root, justify= "left")
|
|
lblHelp['text']="x=exit \nS=GET_SW \nP=PEV mode \nE=EVSE mode \nL=Listen mode \ns=SET_KEY \nG=GET_KEY (try twice) \nt=SET_KEY modified \n space=stop charging"
|
|
lblHelp.pack()
|
|
lblStatus = tk.Label(root, text="(Status)")
|
|
lblStatus.pack()
|
|
lblPevMac = tk.Label(root, text="(pev mac)")
|
|
lblPevMac.pack()
|
|
lblState = tk.Label(root, text="(state)")
|
|
lblState.config(font=('Helvetica bold', 20))
|
|
lblState.pack()
|
|
lblSoc = tk.Label(root, text="(soc)")
|
|
lblSoc.pack()
|
|
lblRequestedUandI = tk.Label(root, text="(U and I)")
|
|
lblRequestedUandI.pack()
|
|
lblUInlet = tk.Label(root, text="(U Inlet)")
|
|
lblUInlet.config(font=('Helvetica bold', 26))
|
|
lblUInlet.pack()
|
|
lblEVSEPresentVoltage = tk.Label(root, text="(EVSEPresentVoltage)")
|
|
lblEVSEPresentVoltage.config(font=('Helvetica bold', 16))
|
|
lblEVSEPresentVoltage.pack()
|
|
|
|
|
|
if (myMode == C_EVSE_MODE):
|
|
lblTestcase = tk.Label(root, text="(test case)")
|
|
lblTestcase.pack()
|
|
|
|
lblMode = tk.Label(root, text="(mode)")
|
|
lblMode.pack()
|
|
|
|
if (myMode != C_PEV_MODE):
|
|
lblUInlet['text']= ""
|
|
|
|
nKeystrokes=0
|
|
# Bind the keyboard handler to all relevant elements:
|
|
root.bind('<Key>', storekeyname)
|
|
cbShowStatus("initialized")
|
|
root.update()
|
|
worker=pyPlcWorker.pyPlcWorker(cbAddToTrace, cbShowStatus, myMode, isSimulationMode)
|
|
|
|
nMainloops=0
|
|
while lastKey!="x":
|
|
time.sleep(.03) # 'do some calculation'
|
|
nMainloops+=1
|
|
# print(str(nMainloops) + " " + str(nKeystrokes)) # show something in the console window
|
|
root.update()
|
|
worker.mainfunction()
|
|
if (myMode == C_EVSE_MODE):
|
|
lblTestcase['text']= "Testcase " + str(testsuite_getTcNumber())
|
|
|
|
del(worker)
|
|
|
|
#---------------------------------------------------------------
|