Files
ISTTOK/epics/css/sys-mng-opi/CSS/scripts/Timer.py
2019-10-21 16:02:55 +01:00

94 lines
4.4 KiB
Python

from org.csstudio.opibuilder.scriptUtil import PVUtil, ConsoleUtil, ColorFontUtil
from java.lang import Thread, Runnable
startButton = display.getWidget("Start_Button")
stopButton = display.getWidget("Stop_Button")
resetButton = display.getWidget("Reset_Button")
bar = display.getWidget("Progress_Bar")
hourText = display.getWidget("hourText")
hourPV=hourText.getPV()
minText = display.getWidget("minText")
minPV=minText.getPV()
secText = display.getWidget("secText")
secPV=secText.getPV()
timerLabel = display.getWidget("timerLabel")
class Blink(Runnable):
def run(self):
i=0
while PVUtil.getLong(pvs[2]) ==1:
Thread.sleep(500)
timerLabel.setPropertyValue("foreground_color", ColorFontUtil.BLACK if i%2==0 else ColorFontUtil.BLACK)
i=i+1
timerLabel.setPropertyValue("foreground_color", ColorFontUtil.BLACK)
class Timer(Runnable):
def run(self):
startButton.setEnabled(False)
stopButton.setEnabled(True)
resetButton.setEnabled(False)
#bar.setVisible(True)
hourText.setEnabled(False)
minText.setEnabled(False)
secText.setEnabled(False)
hour = 0 #PVUtil.getLong(hourPV)
min = 1 #PVUtil.getLong(minPV)
sec = 20 #PVUtil.getLong(secPV)
#remember the values to be reset
resetButton.setVar("hour", hour)
resetButton.setVar("min",min)
resetButton.setVar("sec",sec)
timerLabel.setPropertyValue("foreground_color", ColorFontUtil.BLACK)
timerLabel.setPropertyValue("text", "Trigger Wait")
stopped=False
total = hour*3600+min*60+sec
for i in range(total,-1,-1):
if not display.isActive():
return
if PVUtil.getLong(pvs[0])==0:
stopped = True
break
pvs[1].setValue(100-100*i/total)
hourPV.setValue(int(i/3600))
minPV.setValue(int(i%3600/60))
secPV.setValue(int(i%60))
display.getWidget("LED_BLINK1").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(0,255,0) if i%2==0 else ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK2").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(0,255,0) if i%2==0 else ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK3").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(0,255,0) if i%2==0 else ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK4").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(0,255,0) if i%2==0 else ColorFontUtil.getColorFromRGB(235,235,235))
Thread.sleep(1000)
timerLabel.setPropertyValue("foreground_color", ColorFontUtil.BLACK)
if stopped:
bar.getPV().setValue(0)
timerLabel.setPropertyValue("text", "Stopped!")
display.getWidget("LED_BLINK1").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK2").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK3").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK4").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
else:
bar.getPV().setValue(0)
timerLabel.setPropertyValue("text", "Terminated!")
display.getWidget("LED_BLINK1").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK2").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK3").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
display.getWidget("LED_BLINK4").setPropertyValue("background_color", ColorFontUtil.getColorFromRGB(235,235,235))
widget.executeAction(0)
pvs[2].setValue(1)
Thread(Blink()).start()
startButton.setEnabled(True)
stopButton.setEnabled(False)
resetButton.setEnabled(True)
#bar.setVisible(False)
hourText.setEnabled(True)
minText.setEnabled(True)
secText.setEnabled(True)
if PVUtil.getLong(pvs[0])==1:
thread =Thread(Timer());
thread.start()