Channel Access in Tcl/Tk

Download Report

Transcript Channel Access in Tcl/Tk

Channel Access in Tcl/Tk
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Contents
■ Tcl/Tk overview
■ Graphical user interfaces
►pep
►pvAssign
►SLS widgets
■ Direct EPICS access
►pvget, pvput, pvmon
■ Problems
■ References
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
What is Tcl/Tk?
■ Tcl is a scripting programming language.
■ Tk is a widget toolkit, available for Tcl and other languages.
■ It provides a command line shell: tclsh
■ And a GUI shell: wish
■ And a help program: tclhelp
■ Tcl can be extended with so called "packages".
►We provide an EPICS package for Tcl/Tk.
►We also provide special widgets for Tcl/Tk.
■ Tcl is really well supported by the controls section.
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Tcl/Tk quick start
■ Tcl is easy
■ Tk makes GUI creation simple
■ Type: wish
button .b -text "Press me!" -command {puts "Hello world!"}
pack .b
■ Press button
■ Look in tclhelp for: button, puts, pack
■ Write the program in a file and add first line:
#!/usr/bin/wish
■ Make file executable: chmod
+x filename
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Graphical user interfaces in Tcl/Tk: pep
■ pep -mc X11MA-ID1-CHU1:I-SET
►connects magnet control widget to X11MA-ID1-CHU1:I-SET
■ pep
■
X11MA-ID1-CHU1:I-SET
►asks what widget type to connect to X11MA-ID1-CHU1:I-SET
pep –f configfile
►loads configfile.prc from . or $SLSBASE/sls/config/panel
►Try files from /work/sls/config/panel
■ Also see "How to use pep" item in Help menu.
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Beyond pep: Write your own Tcl-GUI with pvAssign
■ Start wish and load pvAssign package
package require pvAssign
■ Create Widget
label .temperature
pack .temperature
■ Connect EPICS channel
pvAssign .temperature MTRT1-TEMP:READ
■ Enjoy the features
►See value and alarm updates
►Try right click and middle click
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Supported widget types
■ Standard Tcl/Tk widgets
► label
● display string/number
► entry
● set string/number
► checkbutton
● set bit
► menubutton
● set enum with menu
► scale
● set number with slider
■ Special SLS widgets
► formattedlabel
● display formatted number with units
► comparelabel
● display = or ≠ (compare to 0)
► wheelswitch
● set number
► led
● show bit as LED
► choicebutton
● set enum with row/column of buttons
■ Load widget packages
package require Wheelswitch
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
SLS Widgets types: Formattedlabel
■ Use standalone Formattedlabel
package require Formattedlabel
formattedlabel .fl -bg paleGreen -format "%9.4f mA"
pack .fl
.fl set 3.14159265359
■ Use Formattedlabel with EPICS
package require pvAssign
package require Formattedlabel
formattedlabel .temp1 -bg paleGreen
pack .temp1
pvassign .temp1 MTRT1-LI-COOL:TEMP1
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
SLS Widgets types: Wheelswitch
■ Use standalone Wheelswitch
package require Wheelswitch
wheelswitch .ws -bg paleGreen -format 9.4 -label mA \
-min -100 -max -100 -command puts
pack .ws
.ws set 3.14159265359
■ Use Wheelswitch with EPICS
package require pvAssign
package require Wheelswitch
wheelswitch .limit -bg paleGreen
pack .limit
pvassign .limit MTRT1-LI-COOL:LIMIT
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
SLS Widgets types: Led
■ Use standalone Led
package require Led
led .led -color red
pack .led
■ Use Led with EPICS
package require pvAssign
package require Led
led .status
pack .status
pvassign .status MTRT1-LI-COOL:SW
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Beyond pvAssign: direct EPICS access
■ Load EPICS package (which is also used by pvAssign)
package require Epics
■ Read value
pvget MTRT1-LI-COOL:TEMP1
pvget MTRT1-LI-COOL:TEMP1 -format
■ Write value
pvput MTRT1-LI-COOL:LIMIT 10
■ Crate monitor
pvmon MTRT1-LI-COOL:TEMP1 updateTemp1
►Monitors need a callback procedure (here: updateTemp1)
proc updateTemp1 {iostate value sevr stat time}
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Monitor example
#!/usr/bin/tclsh
package require Epics
proc updateValue {channel iostate value sevr stat time} {
if {$iostate != "OK"} {
puts "$channel disconnected"
return
}
if {$sevr != "NO_ALARM"} {
puts "$channel has $sevr alarm because of $stat status"
}
puts "$time $channel = $value"
}
set device MTEST-VME-T1
foreach property {UPTIME LOAD WD} {
set channel $device:$property
pvmon $channel "updateValue $channel"
}
vwait forever
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Frequently asked questions about monitors
■ Why can't I simply call pvget in a loop?
►This creates much network overhead.
►It keeps the program and the IOC busy.
■ But what about a delay in the loop?
►Then you increase latency when something happens.
►You still have much overhead.
■ I don't understand how the monitor function gets called.
►Monitors work much the same as for example mouse clicks.
►On value change, monitors are called as soon as the program is idle.
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Problems with Tcl and EPICS
■ What if package
require Epics (or pvAssign) fails?
►Check environment variable TCLLIBPATH
echo $TCLLIBPATH
/usr/lib/tcl /work/lib/tcl
►Check that EPICS is installed in /usr/local/epics and /work or /prod is
mounted.
■ Why does pvmon not work in tclsh?
►Monitors need an idle loop to work, wish has one, tclsh not.
►Add vwait forever to the end of the script and it works.
Advanced EPICS Training, Dirk Zimoch 2008
Channel Access in Tcl/Tk
Where can I learn more about Tcl/Tk?
■ First try tclhelp
■ Look at www.tcl.tk
■ Ask one of the Tcl experts:
►Werner Portmann
►Elke Zimoch
►Dirk Zimoch
Advanced EPICS Training, Dirk Zimoch 2008