Channel Access in Tcl/Tk - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Channel Access in Tcl/Tk

Description:

Tk is a widget toolkit, available for Tcl and other languages. ... command {puts 'Hello world!'} pack .b. Press button. Look in tclhelp for: button, puts, pack ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 16
Provided by: Adm947
Category:
Tags: access | channel | tcl | widget | world

less

Transcript and Presenter's Notes

Title: Channel Access in Tcl/Tk


1
Channel Access in Tcl/Tk
2
Contents
  • Tcl/Tk overview
  • Graphical user interfaces
  • pep
  • pvAssign
  • SLS widgets
  • Direct EPICS access
  • pvget, pvput, pvmon
  • Problems
  • References

3
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.

4
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

5
Graphical user interfaces in Tcl/Tk pep
  • pep -mc X11MA-ID1-CHU1I-SET
  • connects magnet control widget to
    X11MA-ID1-CHU1I-SET
  • pep X11MA-ID1-CHU1I-SET
  • asks what widget type to connect to
    X11MA-ID1-CHU1I-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.

6
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-TEMPREAD
  • Enjoy the features
  • See value and alarm updates
  • Try right click and middle click

7
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

8
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-COOLTEMP1

9
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-COOLLIMIT

10
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-COOLSW

11
Beyond pvAssign direct EPICS access
  • Load EPICS package (which is also used by
    pvAssign)
  • package require Epics
  • Read value
  • pvget MTRT1-LI-COOLTEMP1
  • pvget MTRT1-LI-COOLTEMP1 -format
  • Write value
  • pvput MTRT1-LI-COOLLIMIT 10
  • Crate monitor
  • pvmon MTRT1-LI-COOLTEMP1 updateTemp1
  • Monitors need a callback procedure (here
    updateTemp1)
  • proc updateTemp1 iostate value sevr stat time

12
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 deviceproperty
    pvmon channel "updateValue channel"
  • vwait forever

13
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.

14
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.

15
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
Write a Comment
User Comments (0)
About PowerShow.com