# Presentation: 937477

## MEDM

*Kenneth Evans, Jr.*
*August 23, 2004*
*Part of the EPICS “Getting Started” Lecture Series*

## MEDM Overview

**MEDM stands for **_**M**_**otif **_**E**_**ditor and **_**D**_**isplay **_**M**_**anager**
**It is a graphical user interface (GUI) for designing and implementing control screens, also called displays**
**It is a mature program**
- Robust
- Powerful
- Efficient
**Tens of thousands of screens have been designed for MEDM**
**It is used worldwide at many sites**
**It is the primary means by which operators and engineers control the APS and its subsystems**
- And most of the experiments

## It is what you see in the Control Room

## ... or on the TV monitors

## Example MEDM Screens

**And thousands of others**

## History

**It is an APS product**
**Started by Mark Anderson in 1990**
- Responsible for the look and feel, much of the implementation
- Based on DM and EDD written at Los Alamos
- Choose Motif for a more impressive interface
**Taken over by Fred Vong from Fall 1994 to Winter 1996**
- Improved the performance under load
- Rewrote the Strip Chart
- Many of his improvements were unfinished when he left
**Taken over by Ken Evans in 1996**
- Concentrated on robustness, stability
- Added most of the Editing features (Undo, Align, etc.)
- Made Composite object be dynamic
- Added animated GIFs, many other features

## MEDM Design Philosophy

**Performance, robustness, and maintainability come first**
- KISS [Keep It Simple Stupid] tends to work well
**Features are important but feature bloat is incommensurate with robustness and maintainability**
**MEDM tries to strike a balance**
- Robustness and maintainability come first
**MEDM tries to enable, not restrict, the user**
- You are responsible for not shooting yourself in the foot
**Extensibility is best added with additional applications**
- ADT is a good example
- As are all the Tcl/Tk apps at the APS
- If these crash or use resources, they do not affect MEDM
- MEDM can do the few things it does rapidly and efficiently
- This philosophy has worked out well at the APS

## More Information

**There is far more to MEDM than can be covered in this presentation**
**The main source of information is the MEDM Reference Manual**
- Can be accessed from the Help Menu
*Uses your browser to display HTML help*
*Netscape on UNIX may take a long time to come up*
- Also available as a Word document, Postscript, and PDF
**There is an MEDM web page**
- _[http://www.](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[aps](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[.](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[anl](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[.](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[gov](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[/epics/extensions/](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[medm](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[/index.](http://www.aps.anl.gov/epics/extensions/medm/index.php)__[php](http://www.aps.anl.gov/epics/extensions/medm/index.php)_
- Has the Reference Manual and tar files of recent versions
- Can be found from the EPICS home page
*     *_*[http://www.](http://www.aps.anl.gov/epics/index.php)*__*[aps](http://www.aps.anl.gov/epics/index.php)*__*[.](http://www.aps.anl.gov/epics/index.php)*__*[anl](http://www.aps.anl.gov/epics/index.php)*__*[.](http://www.aps.anl.gov/epics/index.php)*__*[gov](http://www.aps.anl.gov/epics/index.php)*__*[/epics/index.](http://www.aps.anl.gov/epics/index.php)*__*[php](http://www.aps.anl.gov/epics/index.php)*_
**MEDM for Windows is in the EPICS WIN32 Extensions**
- See the MEDM web page

## MEDM Virtual Linac Screen

**The Virtual Linac MEDM screen is a good example to explore**

## Flash Demos

**The demos in this presentation use Flash**
**It is already installed on most computers**
**If you do not see the demos, you do not have the Flash Player**
**If you have trouble with the Flash demos, particularly advancing them, you probably have Flash Player 6**
- Right click on a Flash demo to see the version
- You want Flash Player 7 or above
- The advance arrow at the bottom left of the slide usually works with either
**You can get or update the Flash Player via the link at:**
- _[http://macromedia.com](http://macromedia.com/)_
- It is a Plug-in for Netscape/Mozilla and an ActiveX Control for IE
- You need the IE version for PowerPoint
*(Use IE to visit the link)*

## MEDM Main Window and Overview

## MEDM Objects

| Graphics | Monitors | Controllers | Special |
| --- | --- | --- | --- |
| Arc | Bar Monitor | Choice Button | Composite |
| Image | Byte Monitor | Menu | Display |
| Line | Cartesian Plot | Message Button |  |
| Oval | Meter | Related Display |  |
| Polygon | Scale Monitor | Shell Command |  |
| Polyline | Strip Chart | Slider |  |
| Rectangle | Text Monitor | Text Entry |  |
| Text |  |  |  |

## Resource Palette

**Each object has a set of properties**
**The properties are chosen via the Resource Palette**
**All objects have**
- X and Y Position
- Height and Width
**Others vary depending on the object**
**Properties are specified by**
- Text Boxes
- Color selectors
- Pull down menus
- Dialogs

## Examples of All MEDM Objects

## Editing Features

***Editing Features***

**Menus are all Tear-Off**
**Undo and Redo**
**Align**
- Left, Horizontal Center, Right
- Top, Vertical Center, Bottom
- Position to Grid
- Edges to Grid
**Space Evenly**
- Horizontal and Vertical
- 2-D
**Grid**
- Toggle Show Grid
- Toggle Snap to Grid
- Set Grid Spacing

## Editing Features

***Editing Features***

**Center**
- Horizontally and Vertically in Display
- Both
**Orient**
- Flip Horizontally and Vertically
- Rotate Clockwise and Counterclockwise
**Size**
- Same Size
- Text to Contents
**Others**
- Find Outliers
- Refresh
**Edit Summary (Keyboard and Button Shortcuts)**

## Creating a Display Demo

## Fonts

**Fonts in MEDM are somewhat brain dead**
- Changing them would trash thousands of existing screens
**MEDM can use either Fixed or Scalable fonts**
**Fixed fonts use font aliases for flexibility**
- widgetDM_4, widgetDM_6, ... ,widgetDM_60
- These can be assigned to any X Windows Font
- We are stuck with the original APS assignments
**Scalar fonts use one font (your choice) and vary the size**
- Was not available when the APS was started
**For new sites, the defaults can be changed in siteSpecific.h**
- When MEDM is built
**The font size is determined by the ****height**** of the text box**
- The text can extend beyond the box horizontally
- In practice you vary it until it looks right

## Default Fixed and Scalable Fonts

**fontTable.adl opened without and with –displayFont scalable**

**Note:**
**The scalable fonts do not use widgetDM_xxx**
**The words are only accurate for the default fixed fonts and were determined empirically**

**widgetDM_4 and widgetDM_60 are not possible**

**The height (h) values do not scale uniformly**

**However, adjusting the height until it looks right works OK**

## siteSpecific.h

**Many of the MEDM default choices are in siteSpecific.h**
- C language header file
- Used when MEDM is compiled
**Sites can change these defaults by changing this one file**
**Some of the things that can be changed**
- Fixed or Scalable fonts
- Colors
- Location of the HTML Reference Manual
- Printer defaults
- Others
**Decisions must be made early before many screens are designed**

## Graphic Objects

**Many effects are created with Graphics objects**

## Dynamic Attribute

**Applies primarily to Graphics objects **
**Objects with a Dynamic Attribute can have their color or visibility change based on process variables or conditions**
**Color Mode**
- Object has alarm colors (Green, Yellow, Red, White)
**Visibility Mode**
- Visible only if the process variable is zero or only if not zero
**Visibility Calc Mode**
- Visibility is based on a CALC expression involving up to 4 process variables plus HOPR, LOPR, STAT, SEVR, etc.
**Also applies to the Composite**
- Allows whole sections of the display to appear or disappear
- Means any object can have a Dynamic Attribute
*Make it be a Composite with just one member*

## CALC in MEDM

**Used in two places**
**Visibility**** **
- Used when Visibility mode is set to “calc” and Visibility Calc is defined
- CALC expression returns True or False
- The APS Status Display uses this feature
*With Composites (like the Demo)*

**Image Frame Number (Animated GIFs)**
- Used when Image Calc is defined
*Will just animate otherwise*
- CALC expression returns a frame number
- Frame numbers start with 0
- Uses 0 or last frame if out of range

## Visibility Demo

## MEDM CALC Expression

**Expression involving 16 variables**
- A    The value of Channel A
- B	    The value of Channel B
- C    The value of Channel C
- D    The value of Channel D
- E	    Reserved
- F	    Reserved
- G    The COUNT of Channel A
- H    The HOPR of Channel A
- I	    The STATUS of Channel A
- J	    The SEVERITY of Channel A
- K	    The PRECISION of Channel A
- L	    The LOPR of Channel A

## Examples of MEDM CALC Expressions

**Syntax is the same as for the EPICS CALC record**
- See the Record Reference Manual
**Some True/False Examples (for Visibility)**
- !A		     Value is zero (Same as "if zero")
- A			     Value not zero (Same as 'if not zero")
- A=12		     Value is 12
- A#12		     Value is not 12
- A<0&&B<0&&C<0    All are negative
- A>.9*H	                  Beyond 90% of upper limit
- !J		     SEVERITY is not zero
**Some Number Examples (for Image Calc)**
- A		                  Frame is value of A
- A=12                         Frame 0 or 1
- (A+B)*SIN(C)            Frame determined by expression

## Color Rules Using Animated GIFs

**Make a multi-frame GIF**
- One frame per desired color, One pixel per frame
**Put this GIF under the object you want to have color rules **
**Use a CALC expression that rounds off to the frame number**
**Example: 3 colors: Green, Yellow, Red**
**CALC:** 	(ABS(A)<.8*H)+(ABS(A)<.9*H)
**Gives:**	Green for |A| up to 0.8*HOPR
- 			Yellow for |A| from 0.8*HOPR to 0.9*HOPR
- 		Red for |A| greater than 0.9*HOPR

## Use SGA to Make and Edit Animated GIFs

## Execute Mode

**What’s wrong with this screen?**

**MEDM objects turn white when the connection is lost**

## Drag and Drop

**You can drag the process variable names from an object**
- Use Mouse Button 2
**The Process variable name appears in its alarm color on black**
**Can be dragged to any Motif Drop Site**
- This includes Probe, StripTool, HistTool, and others
**Names now go into the X Clipboard as well**
- Can paste them in the usual places without even dragging
**In practice Button 2 is used as a fast way to see the process variable name**

## PV Info

**PV Info**
- Gives extensive information about the process variable
**Accessed through the Execute-Mode Menu**
- Right click the display
- Use the cursor to pick which object

## PV Limits

**PV Limits**
- Allows you to set the limits for Meters, Sliders, etc
**The ****user**** can:**
- Use the values from Channel Access (HOPR, LOPR, PREC)
- Use the defaults set by the screen designer
- Set her own values
**The ****screen designer**** can:**
- Set it to use Channel Access values for the defaults
- Set the defaults
**Accessed through the Execute-Mode Menu**

## Execute Menu

**The Execute Menu is a user-configurable menu that can be added to the right-click menu on displays in Execute Mode**
**Specified by the MEDM_EXEC_LIST environment variable**
- If not specifed, it doesn’t appear at all
**Example**
**setenv MEDM_EXEC_LIST 'Probe;probe &P &:**
**	****  ****ADL File;echo &A:PV Name(s);echo &P'**
- Gives the menu shown

- Selecting the Probe item, for example, will allow you to select an object, then run Probe on its process variable
**See the manual for details**

## Macros

**Strings of the form $(name) in an ADL file can be replaced by some other string**
- For example, enter $(sector):$(corrector) as part of a PV name
**Replacement is specified:**
- 1. On command line:
**     ****medm –x –macro ”sector=S1A,corrector=H2”**
- 2. In Related Display configuration:
-            Resource Palette dialog
**Allows you to design one screen and use it for many similar items**
**The Virtual Linac uses $(user) in front of PV names**
- So different users have their own PV names
- Look at the startup scripts for MEDM for the Virtual Linac

## Related Display

**Brings up a menu of other displays**
**As with most MEDM objects there are many options**

**If there is only one item in the menu, the label is centered, and clicking it brings up that one display**

**If there is more than one item in the menu, the label is left justified**

**If you Control-Click, then the new display replaces the current one**

## Hidden Button Markers

**Related Displays can be hidden under other objects**
**Toggle Hidden Button Markers shows where they are**

**Clicking on a hidden button brings up a (single) display just like the more conventional Related Display**

## Bar Monitor

**Here are some options for the Bar Monitor**

## Bar Monitor

**The no decorations mode, useful for bar graphs and effects**

## Strip Chart

**While not as powerful as StripTool, the MEDM Strip Chart has many features, which can be changed on the fly**

**This dialog comes up via PV Limits on the Execute Mode Menu in place of the usual PV Limits dialog**

## Cartesian Plot

**The Cartesian Plot is the most complicated MEDM object**
**MEDM provides generic support for different plot packages**
**XRT/Graph**
- Most complete implementation is XRT/Graph
- Commercial product, not available for Windows
- Requires a license on each machine on which it is built
- Many features and works well
**SciPlot**
- Public Domain, modified extensively for MEDM
- Included with MEDM, should work on any platform
- Currently missing Second Y axis and Fill Under
**JPT**
- Developed at TJNAF
- Does not support all MEDM Cartesian Plot features

## Summary

**MEDM is a full featured, mature, robust program**
**It is the principal means by which humans control the system**
**This has been an overview of some of the MEDM features**
- There are many more
- The Reference Manual is the best source of information

## Thank You

*This has been an *
*APS Controls Presentation*

## Thank You

*This has been an *
*APS Controls Presentation*