150 likes | 490 Views
Channel Access in Tcl/Tk. Contents. Tcl/Tk overview Graphical user interfaces pep pvAssign SLS widgets Direct EPICS access pvget, pvput, pvmon Problems References. What is Tcl/Tk?. Tcl is a scripting programming language. Tk is a widget toolkit, available for Tcl and other languages.
E N D
Channel Access in Tcl/Tk Advanced EPICS Training, Dirk Zimoch 2008
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
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
Tcl/Tk quick start • Tcl is easy • Tk makes GUI creation simple • Type: wishbutton .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
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
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
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 Supported widget types Advanced EPICS Training, Dirk Zimoch 2008
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
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
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
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
Monitor example #!/usr/bin/tclshpackage 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-T1foreach property {UPTIME LOAD WD} { set channel $device:$property pvmon $channel "updateValue $channel"} vwait forever Advanced EPICS Training, Dirk Zimoch 2008
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
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
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