Welcome to caQtDM’s documentation!#
caQtDM Manual#
About this manual#
This manual has been written in Sphinx Ret. It has to be noted that caQtDM is though as a replacement of the very known EPICS [1] Display Manager MEDM [2], therefore this manual is of course also inspired of the existing MEDM manual.
The HTML was converted to restructured text using spinx.
Introduction#
caQtDM is a package based on Qt developed at PSI as a successor of
MEDM, a well known package used in the EPICS community for building
synoptic displays. The caQtDM package uses the standard Qt GUI (Qt
designer) for designing synoptic displays, containing all the controls
graphical elements necessary to visualize and control a facility. Qt
designer uses the custom widgets designed for this purpose and writes
a description file (.ui
file) that will be used by the synoptic viewer
caQtDM. A reload function in caQtDM allows to rapidly see the changes
made by the editor in order to accelerate the process of editing and
viewing.
The heart of the package are the graphical objects (Widgets) plugged into the Qt designer. These widgets will be described in detail with their properties below. Many objects have been built and more are introduced as soon as they are needed. The Qt system allows in a very easy way to add continuously new objects or to modify these.
Technically the package consists of three class libraries with the graphical objects, a class library used by the viewer or other applications and the viewer (caQtDM) itself as well as three libraries with the plugin definitions for the Qt designer. The editor (Qt designer) is part of Qt. It has to be noted that the graphical objects are not control system aware. The graphical objects have properties and methods used by the editor. The control system knowledge is then integrated and handled by the viewer. This architecture allowed us to handle three control systems easily: epics3 [3], epics4 [4], and an older in-house control system. These are all handled by the viewer. This distribution supports epics3 by default. Epics4 can be integrated when building it, but only a few tests could be done while not many process variables could be tested so far.
Part of the package is also a converter (adl2ui
) that can convert MEDM
.adl
files into .ui
files used by the caQtDM package. In most cases
this converter gives good results. Besides the already mentioned .ui
files, the viewer can also use in-house developed .prc
files. These
last files represent ASCII files to be edited with any text editor
using are in house syntax.
The Qt system is widely used today on many platforms and is therefore an ideal system to develop new applications. The advantage of Qt is therefore that an application using this architecture will run on many platforms, so that caQtDM will run on linux as well as on windows systems.
Qt Designer: editor#
The designer coming with Qt is the editor used for developing the synoptic screens. In this manual we will not describe this editor exhaustively, while the editor has it own manual that can be called by pressing the F1 key. The editor allows by dragging and dropping the graphical objects to be used into the synoptic display. The properties of the graphical objects can then be customized in the property editor. The most important property is normally the device that is monitored or controlled and is represented by the property channel. An exhaustive description of the graphical objects and their properties will be given below.
Install#
Since version 3.1.4 of caQtDM a new build and installation procedure working for several linux platforms are available.
First you will have to unpack the tar archive, which will create the necessary directories and files. In the upper directory you will find the necessary procedures to build the package, run it locally without installing, and also an installation procedure.
you will have to install Qt and qwt when they are not already installed. On modern systems Qt should already be installed, but the qt-designer not necessarily and you should install it (eventually with sudo apt-get install qt*-designer). qwt is normally not installed and you should install this too.
you will have to install EPICS (base)
all the environment variables used for the installation will be defined in the script
caQtDM_Env
. When some of the variables are already defined in your environment, the script will use them, otherwise they will be defined. It is up to you to edit this file and adapt the variables to your environment.the script
caQtDM_BuildAll
will build you the package now into the directory./caQtDM_Binaries
. You should obtain thereadl2ui
,caQtDM
,libqtcontrols.so
andlibcaQtDM_Lib.so
as well as adesigner
directory containing 3 fileslibqtcontrols*_plugin.so
. if you encounter a problem when building due to some environment variable problem or while not everything was installed before, you may correct your problem and run the script again. In case you want to cleanup you use the scriptcaQtDM_CleanAll
, which will also delete the resulting binaries.you may try to install the package: the package should normally be installed in the EPICS extensions and the environment variables are pointing to them.
running
caQtDM
: when the package has been successfully build into the directory./caQtDM_Binaries
, you can startcaQtDM
by using the scriptstartDM_Local
and the qt-designer by the scriptqtdesigner
(all located in the main directory where you expanded the tar file). These scripts will set some important environment variables in order to set the path, the plugin_path and to point to the test directory provided with the package (./caQtDM_Tests
). In this directory also the stylesheets are located to be used for a nice rendering. You may call thetest.ui
file with the above mentioned scripts. In order to test the display some EPICS channels have to be defined. This can be done by running a softIoc shell called with run-epics also provided in the test directory.in case you have qwt 6.1 or greater you will have to use in caQtDM_QtControls/src the files qwt_thermo_marker_61. (instead of qwt_thermo_marker)
in case you already use Qt5 or Qt6 with qwt6.2 the building should also be straight forward.
Instructions for compiling caQtDM on Windows/Linux/Mac Requirements:
- Min:
Qt 4.8.5
Qwt 6.0.1
EPICS 3.14.12
MS Visual Studio 2010
Wix 3.0
- Max:
Qt 6.5.2
Qwt 6.2.0
EPICS 7.0.7
MS Visual Studio 2019
Wix 3.11
With
caQtDM_Env.bat
you can configure your system. All settings which are needed will be taken from here.The building can be started with the batchfile :
caQtDM_BuildAll.bat
The packaging is made with the batch file :
caQtDM_Build_Package.bat
This will generate a MSI installation file in the folder ofcaQtDM_Binaries
.To clean the Folder you should use
caQtDM_CleanAll.bat
.
Example build settings for Debian 12#
apt install git
apt install qtcreator
apt install gcc
apt install g++
apt install qwt
apt install qwt-qt6
apt install qwt-qt5
apt install libqwt
apt install libqwt-qt5-dev
apt install qmake
apt install qt5-dev
apt install qt6
apt install qt5-qmake
apt install qt5-default
apt install qtbase5-dev
apt install qt5designer
apt install qt5-designer
apt install qttools5-dev-tools
apt install qtsvg5-examples
apt install qttools5-dev
apt install qtsystems5-dev
apt install libqt5svg5-dev
apt install libzip-dev
apt install python3-dev
apt install libqt5x11extras5-dev
#!/bin/bash
if [ -z "$QTHOME" ]; then export QTHOME=/usr;
fi
if [ -z "$QWTHOME" ]; then export QWTHOME=/usr;
fi
if [ -z "$QWTINCLUDE" ]; then export QWTINCLUDE=/usr/include/qwt;
fi
if [ -z "$QWTLIB" ]; then export QWTLIB=/usr/lib;
fi
if [ -z "$QWTVERSION" ]; then export QWTVERSION=6.1;
fi
# on unix library can be libqwt or libqwt-qt5 or ...
if [ -z "$QWTLIBNAME" ]; then export QWTLIBNAME=qwt-qt5;
fi
if [ -z "$EPICS_BASE" ]; then export EPICS_BASE=/home/helge/epics-base;
fi
if [ -z "$EPICSINCLUDE" ]; then export EPICSINCLUDE=${EPICS_BASE}/include;
fi
if [ -z "$EPICSLIB" ]; then export EPICSLIB=${EPICS_BASE}/lib/$EPICS_HOST_ARCH;
fi
if [ -z "$EPICS4LOCATION" ]; then export EPICS4LOCATION=/home/mezger/EPICS-CPP-4.6.0/
fi
if [ -z "$EPICSEXTENSIONS" ]; then export EPICSEXTENSIONS=/usr/local/epics/extensions;
fi
if [ -z "$QTCONTROLS_LIBS" ]; then export QTCONTROLS_LIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$CAQTDM_COLLECT" ]; then export CAQTDM_COLLECT=`pwd`/caQtDM_Binaries;
fi
export QTBASE=${QTCONTROLS_LIBS};
if [ -z "$CAQTDM_CA_ARCHIVELIBS" ]; then export CAQTDM_CA_ARCHIVELIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$CAQTDM_LOGGING_ARCHIVELIBS" ]; then export CAQTDM_LOGGING_ARCHIVELIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$QTDM_LIBINSTALL" ]; then export QTDM_LIBINSTALL=$EPICSEXTENSIONS/lib/$EPICS_HOST_ARCH;
fi
if [ -z "$QTDM_BININSTALL" ]; then export QTDM_BININSTALL=$EPICSEXTENSIONS/bin/$EPICS_HOST_ARCH;
fi
if [ -z "$PYTHONVERSION" ]; then export PYTHONVERSION=3.11;
fi
if [ -z "$PYTHONINCLUDE" ]; then export PYTHONINCLUDE=/usr/include/python$PYTHONVERSION;
fi
if [ -z "$PYTHONLIB" ]; then export PYTHONLIB=/usr/lib/;
fi
if [ -z "$ZMQ" ]; then export ZMQ=/usr/local;
fi
if [ -z "$ZMQINC" ]; then export ZMQINC=$ZMQ/include;
fi
if [ -z "$ZMQLIB" ]; then export ZMQLIB=$ZMQ/lib;
fi
if [ -z "$TROLLTECH" ]; then
echo
echo ====== do not use psi trolltech directories
echo
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:${QTBASE};
fi
else
echo
echo ====== use psi trolltech directories
echo
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:$TROLLTECH/binQt;
fi
fi
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:$TROLLTECH/binQt:${QTBASE};
fi
Example build settings for Rocky Linux 9#
dnf -y install epel-release
dnf install qt-creator
dnf install readline-devel
dnf install perl
dnf install qwt-qt5-devel
dnf install qt5-qttools-devel
dnf install qt5-qtx11extras
dnf install qt5-qttools-static
dnf install libzip-devel
dnf install zlib-devel
dnf install python3-devel
dnf install libXext-devel
Please change the qmake call in ./caQtDM_BuildAll to qmake-qt5 .. code-block:
:caption: configuration
#!/bin/bash
if [ -z "$QTHOME" ]; then export QTHOME=/usr;
fi
if [ -z "$QWTHOME" ]; then export QWTHOME=/usr;
fi
if [ -z "$QWTINCLUDE" ]; then export QWTINCLUDE=/usr/include/qt5/qwt;
fi
if [ -z "$QWTLIB" ]; then export QWTLIB=${QWTHOME}/lib;
fi
if [ -z "$QWTVERSION" ]; then export QWTVERSION=6.1;
fi
# on unix library can be libqwt or libqwt-qt5 or ...
if [ -z "$QWTLIBNAME" ]; then export QWTLIBNAME=qwt-qt5;
fi
if [ -z "$EPICS_HOST_ARCH" ]; then export EPICS_HOST_ARCH=linux-x86_64;
fi
if [ -z "$EPICS_BASE" ]; then export EPICS_BASE=/home/helge/base-7.0.7;
fi
if [ -z "$EPICSINCLUDE" ]; then export EPICSINCLUDE=${EPICS_BASE}/include;
fi
if [ -z "$EPICSLIB" ]; then export EPICSLIB=${EPICS_BASE}/lib/$EPICS_HOST_ARCH;
fi
if [ -z "$EPICS4LOCATION" ]; then export EPICS4LOCATION=/home/mezger/EPICS-CPP-4.6.0/
fi
if [ -z "$EPICSEXTENSIONS" ]; then export EPICSEXTENSIONS=/usr/local/epics/extensions;
fi
if [ -z "$QTCONTROLS_LIBS" ]; then export QTCONTROLS_LIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$CAQTDM_COLLECT" ]; then export CAQTDM_COLLECT=`pwd`/caQtDM_Binaries;
fi
export QTBASE=${QTCONTROLS_LIBS};
if [ -z "$CAQTDM_CA_ARCHIVELIBS" ]; then export CAQTDM_CA_ARCHIVELIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$CAQTDM_LOGGING_ARCHIVELIBS" ]; then export CAQTDM_LOGGING_ARCHIVELIBS=`pwd`/caQtDM_Binaries;
fi
if [ -z "$QTDM_LIBINSTALL" ]; then export QTDM_LIBINSTALL=$EPICSEXTENSIONS/lib/$EPICS_HOST_ARCH;
fi
if [ -z "$QTDM_BININSTALL" ]; then export QTDM_BININSTALL=$EPICSEXTENSIONS/bin/$EPICS_HOST_ARCH;
fi
if [ -z "$PYTHONVERSION" ]; then export PYTHONVERSION=3.9;
fi
if [ -z "$PYTHONINCLUDE" ]; then export PYTHONINCLUDE=/usr/include/python$PYTHONVERSION;
fi
if [ -z "$PYTHONLIB" ]; then export PYTHONLIB=/usr/lib/;
fi
if [ -z "$ZMQ" ]; then export ZMQ=/usr/local;
fi
if [ -z "$ZMQINC" ]; then export ZMQINC=$ZMQ/include;
fi
if [ -z "$ZMQLIB" ]; then export ZMQLIB=$ZMQ/lib;
fi
if [ -z "$TROLLTECH" ]; then
echo
echo ====== do not use psi trolltech directories
echo
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:${QTBASE};
fi
else
echo
echo ====== use psi trolltech directories
echo
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:$TROLLTECH/binQt;
fi
fi
if [ -z "$QTDM_RPATH" ]; then export QTDM_RPATH=${QTDM_LIBINSTALL}:$TROLLTECH/binQt:${QTBASE};
fi
Development history#
The following list describe the new features and bug fixes for every release. You can follow the development history and detect if a bug in the used version has been solved.
4.4.1
caQtDM can be compiled with Qt6
new signals for caCartesianplot
fix for caInclude with upscaling
fix for undefined macros to define a standard value in macro
fix for popup panels to get a panel without data monitors
fix for caLineEdit and caTextEntry to handle strings with Signal/Slot
fix for the start screen on some mobile iOS devices
cleanup of data plugin messages
fix for Qt6.4 compiler settings with EPICS4 header on Windows
fix the PV data selector in designer, missed environment
4.4.0
fileopenwindow: options changes
fix for converted adl files
fix for higher python versions
fix cacartesianplot for minor ticks disappeared when changing number of ticks
searchpaths handling for non ADL files
catable fix for big numbers
bsread fix null number counting messages
epics3plugin fix for disconnected channels
epics4plugin is now working with the epics 7 API and PVA can be used
filter feature for epics 7 is now available
caStripPlot: feature dynamic property “Legend” for rename the channel to a user defined
PV-Editor for Designer with network based auto completion
new command line option [-savetoimage] to save screenshots as PNG files
added C entry points for python
new decoding functions for camera images (Mono8,Mono10p,Mono10packed,Mono12p,Mono12packed)
future use of compression for camera images (zLib+jpg)
MacOS and iOS: Binaries already build with Qt6 Branch. The Reason is the dependency to the build environment
4.3.0
POPUP status windows with possible delays
dynamic Property caqtdmPopupUI and caqtdmPopupUI_Delay for POPUP windows (The filename must contain the word popup.ui)
wmsignalpropergator can resize a panel
fix for too long strings in channel names
fix for some character problems
fix for alarm status for caMenu
fix for softPV Waveform Processing
fix for softPV initialisation, wrong initial value, ui loader depending
cleanup in the sf-archiver
fix in caMenu, paintEvent removed
more file status check before accessing (avoid AFS problems)
fix the seg fault for the classname problem EPushButton
softPV vector/scalar performance problem fixed
start of EPICS 4 to EPICS 7 implementation
fix for string length problems
calinedraw emit textChanged
optimized caCalc signal emitance
caCamera add slots for zoom and position
caQtDM can be compiled with VS2019
Updates for Android and IOS
fixes some problems with MOC and QWT
build in ADL and EDL Parser
shellcommand for Mac
landscape version for Android
fileopening with dynamic conversion causes problems using TEMP directory
added for archivSF the redirection feature to access multiple data sources
fix a floating point problem on RHL7 in the archiveSF
two additional data plugins
4.2.4
fixed a exception in bsread at closing
added a userdefined format to caLinEdit,caTextEntry and caTextEntry
add macroreplacment for tooltip and statustip on: caLineEdit, caMultilineString, caGraphics, caPolyline, caMessageButton and caLed
fix TLS problem in sf archiver for old Qt Versions
buffer overflow in sf_archiver plugin corrected
extend macro replacement for cascript button
reusing connected channels in epics3 plugin for seting data
borderWidth designer problem with numbers >1, fixed
changes for python3
fix for backend check. Backend property will generate a message that the backend name is not known. but it will use it.
too strict check on RegEx match for visibility
caTextEntry value could be set beyond channel hopr or lopr limits. this has been corrected
focus can be kept now in caTextEntry even on pointer leave by specifying a property
instead of exchanging through shared memory directly for -attach, a queue has been integrated for attaching
for caLineEdit in case of bsread, the unit will be acquired automatically through epics (PSI special)
remove extra white spaces and special characters (lf, cr) form macrodefs
added for caTextEntry a drop possibility when dragging into it.
new bsread options
in the unit, the u in uJ will be converted to a real mu
4.2.2
shared memory key was not set correctly for -attach; corrected now
4.2.1
after write epics channel is cleared now
performance enhancement for caCalc
added some signals and slots
internal macros added
added property to caCartesianplot for changing size of symbols by a multiplicator
bug fixes
4.2.0
major changes in camera widget to support all possible epics data modes and camera modes
rich text now also considered for fontscaling
epics version number will now be printed in the message window
added include definition for epics 3.15 and higher
prevent too many messages when epics exceptions
bsread support for 2D waveforms
added ctrl+ and ctrl - to increase or decrease window size
added a slot for executing the message button
unresolved macros window implemented
the problem of increasing open files solved
added possibility to disconnect all channels in hidden tabs
problem with autoscale and infinite values solved
month number in date corrected
soft variables were not always updating. eliminated test for update; soft variables will not be updated in hidden tab
4.1.7
cawavetable was not expanding anymore; corrected
patch for Qt4.6
made a performance increase for cacalc, but still has to be carefully tested
added possible to get info for objects when the overlay widget has no monitors
4.1.6
added to print date, time and filename
added signals to cachoice, camessage so that setting of the index of a tabwidget will be possible
changed all floats in archive plugins to doubles in order to get a better resolution of the time axis
access security had a small bug when over a gateway
command line option updatetype=direct added to set caQtDM in direct update mode
camenu maske integriert, allows to make entries invisible
cathermo marker has now variable size
cursor shape did not change when on a cawidget and when access security changed
regex expressions now possible when using a macro
last index in array was not taken into account and scale was not updated for the wareerfallplot
optimization of archive plugins
added the possibility to update QtabWidget tab texts with a macro
changed padding for bigger fonts in carowcolmenu
added the possibility to modify colors of cacalc
resize storming of carowcolmenu solved
cascriptbutton got a property to hide the checkbox
QTextBrowser can now also display afile speicied with an url in the searchpath (see texts.ui)
a hide/show slot has been added to the ca widgets
the wmsignalpropagator got signals to propagate the resizing factor of a window. this can be used in order to correct animations with absolute pixel positions.
when propagating through a signal a value to cacalc, this value is displayed. However was not propgated for further use. This has been corrected
the colors of the caspinbox could be wrong due to a ack of proper initialisation, this has been corrected.
very big doubles were not set correctly, this has been corrected.
static visibility (while no channels) can be used now.
handle double encoded url’s in camimedisplay.
added hide/show slot in all ca widgets (permits to hide and show a widget when propagating a signal from cacalc)
when using waveforms from the archive, flashing of the cacartesianplot is suppressed when no data.
added propagation of signal QRECT to parent, this allows to move a cainclude
absolute positioning of items added to cainclude; abolute positions can also be channels that can move the positions.
due to some changes to internal stylesheet, the carelateddisplay could not be hidden, this has been corrected
x scale of cartesian plot can now also be used with a time scale (milliseconds from epoch)
for visibilitycalc, when no channels specified, static calculation will be done at startup
archive retrieval revisited, while crashing and http requests had to be canceled at exit.
added check for when git not present
added an environment variable CAQTD_TIMEOUT_HOURS to be used to quit caQtDM automatically, mouse event will reset the timeout.
it is now possible to use caCalc as a vector (waveform) by specifying associated pv’s. the soft variable can then be used to display a waveform
4.1.5
possibility to add a frame around a caInclude
in case of epics 3.15 added DBE_PROPERTY
modified caQtDM.pri for macos
modified caLineEdit and caLineDraw for displaying long long instead of long when double to integer representation
caled circle will stay a circle when resizing with another aspect ration; border color can be customized
add vumeter simulation to caThermo
calineargauge made correct size when no scale (in order to make all sizes the same)
for caRelatedDisplay one can now set the position for the called window
for caThermo a problem solved in case of alarm colors (not always refreshed with right color) and transparency added for background
for caThermo offset of 4 pixels modified in case of noscale
added horizontal and vertical spacing properties to caInclude
added possibility to modify position and size of a control object by the function %QRect in caCalc using 1 to 4 channels
loading of files through internet now also over https
again compatible with Qt4.6
cachoice bug when using bit offset corrected
legend added to cacartesianplot
calineargauge and cacirculargauge modifier in indor to be smaller and changed font algorithme.
added possibility to have another http address for archiveSF
added test to indicate that waveforms are not supported by the archive plugins.
archive plugins added
epics4 plugin finalized for normative types, thanks to Marty Kraimer
window management widget implemented (close window, …)
careplacemacro widget implemented; allows to redefine macros during runtime
utilities designer plugin added for widgets not directly related to the control system
X/Y waveforms implemented in camera view
bsread plugin developed by Helge Brands finalized
4.1.3
added for the cartesianplot resize of the fatdots plot
softpv treatment was slowing done caQtDM and is corrected now
camera has been more optimized for 16bit waveforms (the other types not yet, due to a lack of waveforms types)
label and vertical label can gave a border now
caChoice has now the possibility to display a row from the bottom to the top (rowInverse) and is optimized
soft pv’s without a name were not working, now automatically a name is generated
in order to have cacalc’s working correctly in includes, a macro can be used in order to individialize them
zero values in cartesian plot are now replaced by the lowest non-zero value when logarithmic scale is used
for infinite values, cartseian plot was taken unlimited resources for display, this should be corrected nw
slots are added to cagraphics for animation of these objects (tilt angle, span angle, arc, .. can be set now through signals
caCamera will now zoom by default on the middle of the image and otherwise around the last clicked point
autorepeat on canumeric has been take out on request of the users
default timing of the timed update loop has now a lower internal rate, may still be changed by a json string
.ftvl field of epics is now used to distingues signed anand unsigned display in cawavetable
in pep file you may add now the keyword -minwidth to an item in order to define the minimum width of it (default value=100).
you can steer column width like that. also -comsize has been added for the comment to steer the fontsize.
cachoice has been slightly modified in order to grow instead of shrink (for pep files this was an issue)
searching of a pv for the infobox would find the pv independently of the associated plugin, giving therefore confusion
caLineDemo has been renamed in caLineDraw and is now able to draw vertically
cawavetable takes now information from channel.FTVL into account in order to define signed or unsigned data
added CTRL+C to camultinestring for copying to clipboard
4.1.0
caslider and cathermo can now display also a value; caslider got also the possibility to set distinctly the lower and upper limit
caQtDM will now display mu and grad on all platforms
adapted cathermo and caslider so that it can take ito account a default style with fore and background colors; now Alarm is modified in Alarm_Default or Alarm_static
now a widget can be added (see caLineDemo) without having to change caQtDM_lib. An interface has been defined in order to perform the datacuisition inside the widget class.
caLineDemo widget is an example for a fast on QWidget based line monitor
caMimeDisplay will now take macros into account
fatDots implemented in cartesian plot
more optimized image display
tab order and focus considered
trailing zeros of caspinbox and cawheelswitch suppressed
toggle button for a soft pv was not working
caQtDM uses now qwt6.1.1 in order to take advantage of multicore processing
carowcolmenu performance enhancement
options -url and -emptycache added
shortcuts defined (Ex: Ctrl+R = reload window; Ctrl+Alt+R = reload all windows; Ctrl+O = Open File; Ctrl+P = Print)
stylesheet entry for most of the cawidgets has been suppressed and for many cawidgets the influence of an external stylesheet can only be changed when setting default colormode
it is now possible to pipe ui data to caQtDM
reload management had to be changed due to some Qt memory management problem
eliminated some memory leaks
corrected wavetable string crash
one can now define if the size of an included ui file will be size adjusted or not
cabyte, cabytecontroller performance were bad and has to be be corrected
camenu and catogglebutton color handling is now done by stylesheet and not with palette colors. This in order to prevent cascading stylesheets, that have precedence over palette colors, to interfere.
default property for label set to transparent color
window for included filenames shows now the number of times and average loadtime for loading.
4.0.2
new options on command line available for caQtDM: -cs for specifiying default plugin to be used, -options for passing options (key, value pairs) to plugins
use now the QStringlList editor in Designer for semicolon separated strings
mobile handling of config files slightly modified
adjustment of fonts for android modified / apply button of caapplynumeric is now resizable
resizing was perturbed by a resize forced by incoming channel data.
the vertical label has now an alignment property
cacartesianplot was not always well triggered when a trigger channel was specified, now corrected
camimebutton added in order to start applications defined through the file extension
cawavetable can now adapt its rows and columns automatically when zero is specified.
an enum can be display in calineedit as number when enumeric is specified as format (otherwise as string in all cases)
a multistring widget has been added to display waveforms with chars and strings (in case of chars a n will make a new line)
initialisation of the first stripplot values with nan instead of zero. Value zero was confusing.
added the possibility to clear the messages through the file menu
in case of -attach with a huge macro, the shared memory was designed too small. now 2 kBytes can be transferred
camultilinestring has been implemented in order to mainly display char waveforms where carriage returns (ascii code 13) will produce a new line
cameter was not updating its label for Qt5; this has been corrected
some possible buffer overrun conditions corrected
one can choose now the number of divisions for x on castripplot
tooltip for properties are now present in psi patched version of Qt4.8.2 and for Qt5.6.0 and higher
tooltip for caQtDM objects will integrate the tooltip given by the designer
signal emit of cacalc has now also its integer and double value (this way you can for example switch the tabwidget pages with a cacalc that is updated by a soft/real channel)
pep emulation has been updated by cosylab
some slots have been added in order to link signals and slots in designer
QStackedWidget will also optimize its io for visible/hidden tabs
color handling for calineedit has been slightly changed in order to be able to get white on red in case of a major alarm (wanted for pep handling)
cartesianplots have now a group property in order to be able to align the horizontal scale (vertical label rectangle gets same width)
when a pep file and an ui file were displayed by caQtDM, some resize problems and a problem with capolyline was detected; is now solved
cainclude can handle now multiple instances of the same file in column, row or rowcolumn mode and use for each instance another macro
4.0.0
caQtDM has now a controlsystem plugin structure. CS can be added by writing a plugin (see demo plugin) that will automatically be loaded. By specifying the plugin in front
of the pv name (i.e epics3://somepv) that plugin will then be used.
fixed a small problem while writing a string to epics (could crash)
the build files have been simplified
edl2ui enhanced (by Lucas Carvalho)
several warnings (mainly on mac osx) solved
capolyline was not resizing correctly, this has been now corrected
a string containing a semicolon was only displayed up to the semicolumn, this is corrected now.
cacamera and cascan2d got display of selected values and readback values with different representations and may therefore write values to the CS
soft variable bug corrected (was not always found when writing)
catextentry got input dialogs (filedialog in case of strings, otherwise simple dialog)
activ widgets were always brought in front. Now you can choose if you let the designer define the layer
QTextBrowser can be used with macro substitution. The file that will be read in, will be watched for changes and will automatically be reloaded
a vertical label has been implemented
3.9.4
caQtDM will now also download from http when CAQTDM_URL_DISPLAY_PATH is defined
When starting with the option -httpconfig you will get the configuration screen in order to use network files as in mobile apps.
macros can now also be read when specifying -macrodefs filename
caMessageButton can be disabled/enabled by a second channel
configdialog for http configuration slightly changed
Zai added some edl objects
added cabytecontroller,for reading and setting individual bits
camenu: prevented scrolling of menu with mouse scroll while it interferes with scrollareas
changed default direction of caByte in parser.c in order to be compatible with MEDM
softpv name can now contain a macro
added calc string to info window * severity of a char/string record was not considered and is corrected, Char waveforms longer as 1024 were not displayed in calineedit and is corrected.
softpv’s in include file enabled
more colortables for caCamera, caScan2D, caWaterfallPlot
caScan2D added
added a clock allowing to display normal time or reception time of a process variable; alarm handling can be enabled to colorize the clock
added a new dial
problem with soft pv corrected
QTextBrowser can be used with macros in order to dynamically load files for display them in this textbrowser
modified the configdialog for ios and android
prevent caQtDM from crashing when maxvalue and minvalue have the same value.
for some images, the last row was missing and is corrected now
3.9.2
severity of a char/string record was not considered and is corrected, Char waveforms longer as 1024 were not displayed in calineedit and is corrected.
in edl2ui zais addons were integrated
softpv’s in include file enabled
more colortables for caCamera, caScan2D, caWaterfallPlot
caScan2D added
3.9.1
added a clock allowing to display normal time or reception time of a process variable; alarm handling can be enabled to colorize the clock
added a new dial
problem with soft pv corrected
QTextBrowser can be used with macros in order to dynamically load files for display them in this textbrowser
modified the configdialog for ios and android
prevent caQtDM from crashing when maxvalue and minvalue have the same value.
for some images, the last row was missing and is corrected now
3.8.10
caStripPlot was eating the CPU and has been optimized; refreshrate (low, medium, high) has been introduced, so that it can be adjusted by the user
some crash conditions eliminated
3.8.9
change for g++ 4.4.7
pixmaps on buttons are now rescaled
modified cawavetable to display as matrix with a finite number of elements; elements can be modified and representation choosen
caWaveTable can display now values as decimal, string, hex and octal
on ipad the slider click and tapandhold interfered, this has been solved
on ipad the autorepeat option of the wheelswitch has been disabled while interfering with tapandhold
on ipad it is possible now to give multiple ip addresses in the EPICS_CA_ADDR_LIST separated by blancs
eliminated some warnings
test for null pointers added in case of absence of channels
resizing of caTable and caWaveTable has been changed
3.7.2
cagraphic lost its linecolor after no connection, corrected
calineedit was not showing alarm colors in alarm_default mode, corrected
3.7.1
improved performance for cartesian and waterfall plot; very long arrays can be displayed
zoom in cartesian plot was not working well for small values and has been corrected
epics request for arrays (ca_add_array_event) changed to a request for 0 elements in order to get the arrays with their actual length
added properties to caLineEdit in order to be able to make a framed border
3.7.0
a spinbox has been integrated in order to be smaller than the wheelswitch. for the spinbox the digit has to be activated by clicking in order to change it.
strings in caLineEdit were trimmed; took that out
selection in caTable can be rows or columns now, caTable can execute a specified script with the associated pv
eliminated sending message in caMessage with right button of mouse.
3.6.4
an empty char waveform was not clearing the caLineEdit: corrected
enums with empty strings were not displaying correctly in caLineEdit
when reloading a .prc file, size of display was not minimized
default back and foreground colors can be set now for caLineEdit/caTextEntry in ui-file stylesheet of mainwindow or in stylesheet.qss
negative precision was leading to an unexpected behaviour, caLineEdit will use the precision and switch to exponential display
spacebar press has been suppressed for caMessageButton, caShellCommand, caRelatedDisplay, caRowcolMenu, caChoice
changed for caSlider and caNumeric the limits for channel to DRVL and DRVH
added to formread in prc file command and comlab modifiers
3.6.2
caCartesian plot and caStripPlot can have a logarithmic scale now
3.6.1
suppressed slidervaluecallback when setting limits from hopr, lopr
added a first attempt of a caWaterfall plot for waveforms
corrected for caCamera, position calculated when zooming to small images
in case of reload, data display is now stopped until all displays are loaded again
camera images can now be zoomed and scrolled
reset zoom for caCartesianPlot did not reset correctly in case of channel limits
added zoom mechanism for caCartesianPlot
added update mechanism choice in main menu in order to switch to direct monitoring or timed monitoring
starting performance optimized for caRelatedDisplay, caChoice, caMenu
splashscreen added for loading includes (in some cases loading time can be significant)
3.5.2
by using CAQTDM_EXEC_LIST as environment variable (as in MEDM with the same syntax), menu items can be added to the context menus
for caThermo in parser the look was not see as property and caThermo itself was initializing itself per default wrong
3.5.1
bug corrected when unfinished enum definition
slider was writing to epics on first call, now it does not
caPolyLine now does not extend its lines when linesize > 1 is used, reproducing the behaviour of MEDM
caThermo and caSlider resize handle and labels according to the size, foreground and background are working correctly now
however with qwt6.1.0 in qwt_slider the routine scaleDraw(); must be set protected instead of private as was in qwt6.0
3.5.0
caQtDM gives information now about number of monitors/s, number of displays/s and highest monitor
3.4.7
adapted caSlider for qwt6.1
3.4.6
corrected a bug for caGauge with alarms no
use control key for amplifying 10x the increment
3.4.5
caSlider has now a menu to change its increment, in designer increment can be specified to
caSlider moves also on left mouse click and an wheel scroll; when it has the focus, up and down keys can be used (when focus outline red gets drawn)
gauges have now following properties: alarmLimits : Channel_Alarms, User_Alarms, None
displayLimits : Channel_Limits, User_Limits
adl2ui has been corrected for these properties
3.4.4
enhanced performance for caCamera widget
3.4.3
package can also be build with Qt4.6 and qwt6.0, necessary for SL6 (caCartesianplot, caDoubletabWidget and plugins slightly modified)
epics enums and strings modified for count > 1
3.4.2
caCamera stuff modified
added mutex to synchronize data and display
font bug in caTable solved
found a datarace in caStripplot, corrected
3.4.1
caCamera displays intensity at x, y
caCamera context menu for grey / spectrum and zoom
3.4.0
caStripplot has been revisited
caCamera uses now concurrent mode for calculations
3.3.1
mainwindow and messagewindow have been merged
3.3.0
caTable gets now the correct font after resizing when values update
caStripPlot has been corrected for incorrect time behaviour.
3.2.2
in menu you have the possibility to raise the main and message windows
3.2.1
when requesting a display that was already started, it did not popup but made a new instance. this has been corrected
this was working before, but by some modifications was not correct any more
3.2.0
The build mechanism for linux and windows should do on most platforms, see caQtDM_README
caQtDM build for qt4.8 with qwt6.0 and for qt5.1 with qwt6.1
caLed can use now the severity to colorize
caThermo was inadvertently using nodeco mode when mode was used
caCircularGauge will draw a white scale when not connected and bug corrected
for enums without enum string write just the value in caLineEdit
3.1.1
The main characteristic of this version is that you can resize the caQtDM synoptic display windows without using Qt layouts. You can build a display normally and everything will be resized when you resize the window.
In order to make the resizing correctly, you should specify for the fontscalemode of caLabel and caLineEdit the parameter “WidthAndHeight”.
When you convert MEDM displays with the utility adl2ui, this is done automatically.
When you do not want a window to be resized, you can specify -noResize on the command line.
Another enhancement existing since version 2.8 is the fact that you can hook a digit of the wheelswitch to the keyboard in order to modify it with the up and down keys.
2.8
All the changes have been documented in qtdefs.pri
2.5
Scales of Stripplot can now be changed during runtime. The caQtDM application normally limits the update rate of monitors to 5 Hz,
however now a JSON string can be written behind the channel name.
An example is given in the presentation “introduction to caQtDM”.
Color mode for calabel is now working (was forgotten). Also an icon is presented on the window bars.
A Windows distribution package allowing to work immediately with the designer and caQtDM has been build and can be downloaded here
(this package does not contain any sources, merely executables, work done by H.Brands at PSI).
2.3
Timebase of Stripplot was wrong and has been corrected. Some other compiler warnings have been eliminated and the building process was slightly modified.
2.1
When using correctly the layout possibilities offered by Qt, one can resize a window (you will find an example in
work/caQtDM/parser/proscanFiles/phaseslitsnew.ui
).Up to now when using “includes” only a placeholder could be seen in the designer. Now the included ui file is displayed inside the designer.
For polylines and polygones, a graphical editor is integrated into the designer. One can create segments by pressing the left mouse button when moving the
mouse and one can delete the last created segment by pressing the right mouse button.
The graphical entities (rectangles, circles, ellipses, lines, arrows, triangles) can be rotated by specifying a tilt angle.
2.0
The major changes in this version are changes for stability (in the previous version sometimes crashes occurred) and the introduction
of soft pv’s. A variable can be defined, calculated and used as a normal pv.
All the features of medm used for the cartesian plots are implemented now. The caCartesian plot background can be transparent so that a camera image can be
underlaid. The limits of the x and y axes can be changed by specifiying pv’s instead of values when using channel limits. The stripplot widget has been
modified while the behaviour was not quite correct. The message button and textentry were not working well and have been corrected. Labels can be transparent too.
A camera widget has been introduced. At PSI we can now display are usual cameras bw and color. You can easily modify the code to treat other formats
of camera waveforms.
caQtDM gives the number of connected and unconnected channels, furthermore a list of unconnected channels with their file location can be shown.
caQtDM is now protected against ui description file syntax errors;
caQtDM supports the command line parameters -attach -noMsg -display -macro -x -noStyles -dg. -x has no effect but suppresses the error message when
keeping the medm command line parameters.
caQtDM runs in native mode on linux as well as on microsoft windows.
caQtDM Custom Widgets#
The custom widgets used in caQtDM have been divided into three categories, as was done in MEDM. MEDM users are used to these categories and we have therefore kept the categorisation in Graphics, Controller and Monitors.
- Graphics:
Items such as frames, labels, graphical entities like rectangles, triangles, lines, …, images and composite objects (called here includes, while included from other
.ui
files.- Monitors:
Objects that monitor the state or values of process variables through display of values, plots, tables, thermometers, dials, …
- Controllers:
Objects that change the values of process variables through many different objects. You will find here an exact description of them with their properties.
For all
objects, you have normally their geometry (position and size),
size policy and some other properties like tooltips. It has to be noted
that for many widgets their stylesheet will be overwritten in order to
get the representation that is requested when specifying for example
background, foreground, border colors or other properties. The
stylesheet can be influenced in some cases by specifying a stylesheet
for the mainwindow or in stylesheet.qss
, a stylesheet found in the
caQtDM path. The adl2ui
converter uses normally this stylesheet to
integrate these defaults into the generated .ui
file. You may delete
this stylesheet or change it to your convenience. However as mentioned
before, many styles will be overwritten.
Graphics |
Monitors |
Controllers |
---|---|---|
caGraphics: Rectangle, Circle, Arc, Triangle, Line, Arrow |
||
caPolyLine: polyline and polygon |
||
caLabel: text |
||
caImage: any image format, mostly used for animated gif |
||
caInclude: the equivalent to composite of MEDM |
||
caDoubleTabWidget: a general purpose widget |
||
Their main properties are described below. It must be noted that through inheritance of Objects, other properties exist that are not necessary relevant here.
all monitor objects#
caLineEdit
, the most used graphical object for data monitoring#
is the equivalent of the Text Update in MEDM.
Geometry is used for any objectDescription:
- channel:
QString: this string represents the control system process variable
- foreground:
QColor: color used for the foreground
- background:
QColor: color used for the background
- colorMode:
Default
Show the object in colors given by stylesheets.
Static
Show the object in colors given by the properties background and foreground.
Alarm_Default
Show the object in alarm colors based on the severity of the associated process variable. (green, yellow, red, white or gray). The foregound or the background are given by the stylesheets depending on the alarmHandling specifying if alarm handling is done on the foreground or on the background.
Alarm
as Alarm_Default, but the foreground or background color is taken from the properties background or foreground
- framePresent:
boolean: specifies if a border will be drawn around the object, frameLineWidth must be different from zero in order to see the border
- frameColor:
QColor: color used for the border
- frameLineWidth:
Integer: linewidth of the border
- alarmHandling:
when colormode is set to alarm, it can be specified here if the foreground or the background will show alarm colors.
- precision:
Integer: precision in case of precisionMode=User
- precisionMode:
Channel
Precision specified by the control system will be used
User
Precision specified by the user will be used
- limitsMode:
Channel
Limits specified by the control system will be used (HOPR, LOPR for EPICS)
User
Limits specified by the user will be used.
- maxValue:
float: maximum value used in case of limitsMode=User
- minValue:
float: minimum value used in case of limitsMode=User
- fontScaleMode:
None
No scaling will be done
Height
Text will be scaled to the height of its containing box
WidthAndHeight
Text will be scaled to the height and width of its scaling box; this should be used for a correct resizing of the display
- unitsEnabled:
boolean: when checked will append the unit to the value
- formatType:
decimal
value encoded in f format using precision from user or channel, in case of negative precision will switch to e format
exponential, engr_notation
value encoded in e format using absolaute precision from user or channel
compact
value encode in e or f format using absolaute precision from user or channel, format will switch to e format for values <1.0e-4
truncated, sexagesimal, sexagesimal_hms, sexagesimal_dms
not supported yet
hexadecimal
value will be encoded in hexadecimal format
octal
value will be encoded in octal format
string
will be treated as decimal format
caThermo
#
is the equivalent of the Bar Monitor in MEDM.
Geometry is used for any objectDescription:
- channel:
QString: this string represents the control system process variable
- foreground:
QColor: color used for the foreground
- background:
QColor: color used for the background
- colorMode:
Default
Show the object in colors given by stylesheets.
Static
Show the object in colors given by the properties background and foreground.
Alarm
Show the object in colors given by the properties background and foreground, but change the color of the pipe in case of alarm
- direction:
Up, Down, Left, Right
- look:
noLabel, noDeco, Outline, Limits, ChannelV; These property values are for compatibility with MEDM, and should be implemented later. Actually Outline, Limits and ChannelV will give you a scale when scalePosition is different from noScale; noLabel and noDeco will have no scale.
- logScale:
boolean: true or false
- limitsMode:
Channel
Limits specified by the control system will be usd (HOPR, LOPR for EPICS)
User
Limits specified by the user will be used.
- type:
Pipe, marker, PipefromCenter
- scalePosition:
Noscale, LeftScale, RightScale, TopScale, Bottomscale
- maxValue:
float: maximum value used in case of limitsMode=User
- minValue:
float: minimum value used in case of limitsMode=User
caLed
#
has no equivalent in MEDM.
Geometry is used for any objectDescription:
- channel:
QString: this string represents the control system process variable
- bitNr:
Integer: the bit that has to be considered
- falseColor:
QColor: color used when the bit is not set
- trueColor:
QColor: color used when the bit is set
- colorMode:
Static
Show the object in colors given by the properties background and foreground.
Alarm
Show the object in colors given by the properties background and foreground, but with alarm handling
caLinearGauge
#
is the equivalent of the Bar Monitor in MEDM.
Geometry is used for any object Description:
caCircularGauge
#
is the equivalent of the Meter Monitor in MEDM.
Geometry is used for any object Description:
caCartesianPlot
#
is the equivalent of the Cartesian plot in MEDM and will plot up to 6 curves
Geometry is used for any objectDescription:
- Title
QString: Titel of the plot
- TitleX
QString: Title of the X-axis
- TitleY
QString: Title of the Y-axis
- channels_1, channels_2, channels_3, channels_4, channels_5, channels_6
QString: these strings represents the control system process variables; each channelpair is composed of two channels separated by a semicolon. When specifying only one channel, you will have to put a semicolon in fron or at the end of the string in order to specify x or y, you will find in the table below how the cartesian plot behaves in case of array or scalars or when only one channel is specified.
- Style_1, Style_2, Style_3, Style_4, Style_5, Style_6:
NoCurve
no curve, only symbols will be drawn when they are specified
Lines
normal curve drawn with lines
Sticks
curve draw with sticks from the x base
Steps
curve drawn with steps
Dots
curve only dots are drawn
FillUnder
curve will be filled from the x base
ThinLines
curve draw with thin lines
HorSticks
curve drawn with sticks from the y base
- symbol_1, symbol_2, symbol_3, symbol_4, symbol_5, symbol_6:
NoSymbol
no symbol will be drawn
Ellipse
Diamond
Triangle
DTriangle
UTriangle
LTriangle
RTriangle
Cross
XCross
HLine
VLine
Star1
Star2
Hexagon
- color_1, color_2, color_3, color_4, color_5, color_6:
QColor: color used for the curve
- countNumOrChannel
QString: The Count for the Cartesian Plot may be an integer or the name of a process variable. If the value starts with a non-digit, then it is considered to be a process variable name, and the value of Count will come from the process variable. If the process variable is not found or its value is less than 1, Count will not be executed
- triggerChannel
QString: The Trigger Channel is a process variable that causes the entire plot to be updated. If there is a trigger channel, the plot is updated whenever the value of that process variable changes. Otherwise, each individual trace is updated whenever any of the data for that trace changes.
- eraseChannel
QString: The Erase Channel is a process variable that causes erasing of the plot. If there is an Erase Channel, the plot erases when the process variable turns either zero or non-zero, depending on the Erase Mode . The Erase Mode is only relevant if there is an erase channel.
- eraseMode:
ifnotzero
Erase the plot if the erase-channel process variable is not zero
ifzero
Erase the plot if the erase-channel process variable is zero
- plotMode:
PlotNPointsAndStop
Plot n points corresponding to the first n changes of the process variable, then do not plot any more points
PlotLastNPoints
Plot n points corresponding to the last n changes of the process variable, overwriting previous points.
- XaxisType/YaxisType:
linear
Use a linear axis
log10
Use a log axis
- XaxisScaling/YaxisScaling:
Auto
Let the graph routine decide on the axis range depending on the data
Channel
Get the axis range from the process variable
User
Specifically specify the minimum and maximum values for the axis.
- background:
QColor: color used for the background
- foreground:
QColor: color used for the foreground
- scaleColor:
QColor: color used for the scale if scales are specified
- gridColor:
QColor: color used for the grid if grid is specified
- XaxisEnabled:
bool: specifies if the x axis should be drawn
- YaxisEnabled:
bool: specifies if the y axis should be drawn
- grid:
bool: specifies if a grid should be drawn
- XaxisLimits:
QString: minimum value used in case of limitsMode=User; the values must be separated by a semicolon
- YaxisLimits:
QString: minimum value used in case of limitsMode=User; the values must be separated by a semicolon
in caQtDM curve can be zoomed with the mouse by pressing the left mouse button and selecting the area that has to be zoomed. The area is shown by a rubberband rectangle. Reset zoom can be chosen through the context menu. Translation can be done by pressing the middle mouse button and moving the mouse. Pressing the right mouse button will bring up a context menu (for pvInfo, resetting zoom and changing axes) A caQtDM Cartesian Plot has the same conventions as a MEDM Cartesian Plot. This plot is a very important tool used in control systems and its behaviour was taken from MEDM. The Cartesian consists of an X and one or two Y axes on which data can be plotted. The sets of data are called traces and consist of a set of (x, y) pairswith the properties shown above. The traces correspond to curves on the plot. Currently there can be up to six traces on a plot. Each trace can (but does not have to) have a process variable from which to get the x values and another from which to get the y values. These process variables can be array process variables, such as Waveforms, or they can be scalar process variables with only a single value. The variables have to be separated by a semicolon (see above). There are eight possible kinds of traces as seen in the following table. The traces for a given plot do not all have to be of the same kind - they can be mixed. (In the table Nx is the number of elements in the process variable specified for x, and Ny is the number of elements in the process variable specified for y. The letter n denotes a number greater than one, and a blank indicates no process variable is specified. The axis limits LOPR and HOPR denote the limits obtained from Channel Access for the process variable. Typically, these are the fields LOPR and HOPR in the associated record, but can be specified by the user with the properties XaxisScaling and YaxisScaling. Count is the specified Count for the Cartesian Plot, which is described in more detail below.)
Kinds of XY Traces
Nx
Ny
Type
Points
Xmin
Xmax
Ymin
Ymax
NPoints
n
n
X,Y Vector
x(i),y(i)
LOPR
HOPR
LOPR
HOPR
Min(Nx, Ny)
n
1
X Vector, Y Scalar
x(i),y
LOPR
HOPR
LOPR
HOPR
Nx
1
n
Y Vector, X Scalar
x, y(i)
LOPR
HOPR
LOPR
HOPR
Ny
n
X Vector
x(i),i
LOPR
HOPR
0
Count - 1
Nx
n
Y Vector
i,y(i)
0
Count - 1
LOPR
HOPR
Ny
1
1
X,Y Scalar
x(i),y(i)
LOPR
HOPR
LOPR
HOPR
Count
1
X Scalar
x(i),i
x(i),i
LOPR
HOPR
0
Count - 1
1
Y Scalar
i,y(i)
0
Count - 1
LOPR
HOPR
Count
If one of the process variables is an array with more than one element and if Count is a number greater than zero, then the specified Count is ignored and the value shown in the last column of the table is used. Under the same circumstances, if Count is a name, then it is used only if it is greater than 0 and less than what would be used if it were a number. That is, Count from a process variable can only restrict NPoints to a lower number than it would be otherwise. The points are plotted from i = 0 to NPoints - 1 and update as the values change. In the cases where one of the process variables is not specified, the history is plotted on that axis against values from 0 to NPoints - 1 on the other axis.
If one of the process variables is an array with more than one element and the CA server of the process variable supports dynamic arrays, then when a zero is specified for Count, the number of array elements will be set to the current number of valid elements in the array which may vary with subsequent array update events. In the remaining cases, where neither process variable is an array with more than one element, Count corresponds to a history of the process variable. (These are the cases where NPoints is shown as Count in the table.) Each time the process variable changes (or when either one changes, in the case of X, Y Scalar) a new point is plotted until there are Count points. The points are plotted from i = 0 to the lesser of Count -1 and the number of updates. When the Plot Mode is “plot n pts & stop,” no more points are plotted. When the Plot Mode is “plot last n pts,” the earliest point is discarded, the others are moved down, and the latest is plotted at the end. In the cases where one of the process variables is not specified, the history is plotted on that axis against values from 0 to Count - 1 on the other axis.
The above behaviour still has to be tested thoroughly. It appeared already that perhaps Count must be twice the value described above?
caStripPlot
#
is the equivalent of the StripChart Monitor in MEDM.
Geometry is used for any objectDescription:
- Title
QString: Titel of the plot
- TitleX
QString: Title of the X-axis
- TitleY
QString: Title of the Y-axis
- channels
QString: this string represents the control system process variables; the channels have to be separated by a semicolon.
- units
Millisecond
The update period is in milli-seconds.
second
The update period is in seconds.
minute
The update period is in minutes.
- Period
Integer: the timespan of the plot for the specified units
- XaxisType
TimeScale
The scale of the x-axis is given with hours:minutes:seconds
ValueScale
The scale of the x-axis is given with the values based on the period value
- YaxisType:
linear
Use a linear axis
log10
Use a log axis
- XaxisScalingMax_1 …..7/YaxisScalingMin_1, …..7:
Channel
Get the axis range from the process variable
User
Specifically specify the minimum and maximum values for the axis.
- Style_1 ….7:
Lines
normal curve
FillUnder
curve will be filled from the x base
- color_1 ….7:
QColor: color used for the curve
- XaxisLimitsMax_1 …..7/YaxisLimitsMin_1, …..7:
QString: minimum/maximum value used in case of limitsMode=User
- YaxisLimits:
QString: minimum value used in case of limitsMode=User; the values must be separated by a semicolon
- background:
QColor: color used for the background
- foreground:
QColor: color used for the foreground
- scaleColor:
QColor: color used for the scale if scales are specified
- gridColor:
QColor: color used for the grid if grid is specified
- XaxisEnabled:
bool: specifies if the x axis should be drawn
- YaxisEnabled:
bool: specifies if the y axis should be drawn
- LegendEnabled:
bool: specifies if the legend should be drawn
caByte
#
is the equivalent of the Byte Monitor in MEDM.
Geometry is used for any object Description:
caCamera
#
Description: The main idea of the camera widget is to display 2D data in a widget. This can be any data that has the one format that the widget can decode. The widget uses EPICS data types, but can use the data as a memory bob and decodes the data in various ways that are common for image encoding. Be aware that we can’t implement every way. We tested against two different vendors/color cameras (Basler acA4600-10uc/acA1300-30gc and Prosilica GC1660C) to cover most needed conversions. Be aware that the conversion matrixes between YUV and RGB are based on the used color room. We are using these functions:
- channelData
Image data channel. Typically a waveform with the data in different formats comming directly from the hardware.
- channelWidth
channel with the horizontal resolution in pixel
- channelHeight
channel with the vertical resolution in pixel
- simpleZoomedView
boolean to reduce the complexity of the widget to get an image only view
- Zoom
enables/disables the zoom bar on the right site of the widget
- automaticLevels
enables the scan over the image data to define the min and the max value. These values are needed to
- minLevel
define in the widget a static min level. This can be changed during runtime.
- maxLevel
define in the widget a static max level. This can be changed during runtime.
- colorMode
- Enum: how the data should be interpreted
Enum value
datatype
simple description
Mono
EPICS
data of the waveform used to generate the image from data defined in the EPICS data type
Mono12p
Binary
12 bit packed mono format
Mono10p
Binary
10 bit packed mono format (5 Byte)
Mono10Packed
Binary
10 bit packed mono format (3 Byte)
Mono8
Binary
8 bit mono data
RGB1_CA
EPICS
3 Layer RGB data pixel by pixel
RGB2_CA
EPICS
3 Layer RGB data line by line
RGB3_CA
EPICS
3 Layer RGB data image by image
BayerRG_8
Binary
8 bit Bayerpatternformat RGB
BayerGB_8
Binary
8 bit Bayerpatternformat GBR
BayerGR_8
Binary
8 bit Bayerpatternformat GRB
BayerBG_8
Binary
8 bit Bayerpatternformat BGR
BayerRG_12
Binary
12 bit Bayerpatternformat RGB
BayerGB_12
Binary
12 bit Bayerpatternformat GBR
BayerGR_12
Binary
12 bit Bayerpatternformat GRB
BayerBG_12
Binary
12 bit Bayerpatternformat BGR
RGB_8
Binary
8 bit RGB data
BGR_8
Binary
8 bit BGR data
RGBA_8
Binary
8 bit RGBA data
BGRA_8
Binary
8 bit BGRA data
YUV444
Binary
converted data from the colorshift data model to RGB (bit representation see packMode too)
YUV422
Binary
converted data from the colorshift data model to RGB (bit representation see packMode too)
YUV411
Binary
converted data from the colorshift data model to RGB (bit representation see packMode too)
YUV421
not yet supported image format
- colorModeOverwriteChannel
channel to select one of the color modes. The value of the channel has to be a string to let the widget seatch inside it enum list. This should be supported by the hardware IOC because this is hardware depended setting. If this is not available enable the combo boxes to do it manual
- packMode
packNo
no modification of the bit representation
MSB12Bit
for 12 bit color modes set most significant bit
LSB12Bit
for 12 bit color modes set least significant bit
Reversed
for YUV to reverse the decoding to VUY
- packingModeOverwriteChannel
channel to select one of the packing modes. The value of the channel has to be a string to let the widget seatch inside it enum list. This should be supported by the hardware IOC because this is hardware depended setting. If this is not available enable the combo boxes to do it manual
- showComboBoxes
enable/disable the visibility for changing the data interpretation from the user side
- ColorMap
- color map used to display experimental data to the 8Bit RGB world of a monitor
Maps
rough description
color_to_mono
grayscale images
mono_to_wavelength
different colors optimal for detector testing
mono_to_hot
red and yellow colloring
mono_to_heat
thermal representation
mono_to_jet
optimal for flow data
mono_to_custom
user defined color mapping
- customColorMap
QString: list of color values (value,r,g,b), seperated by a semicolon
- discreteCustomColorMap
QString: list of color values (value,r,g,b), seperated by a semicolon. This map is not smoothed over the value area.
- ROI_readChannelsList
edit list of 4 channels seperated by a semicolon to draw rectangle into the image
- ROI_readChannels
see the actual ROI_readChannelsList
- ROI_readmarkerType
- define the cursor marker for the selection
cursor
selection type
box
simple box
box_crosshairs
box with extra lines
line
line connection
arrow
arrow connection
- ROI_readType
- how the data from the channels are interpreted
type
description
none
data is ignored
xy_only
only the first 2 channels are used for a center
xy1_xy2
box with 2 coordinates
xyUpleft_xyLowright
box with a upper left and lower right version
xycenter_width_height
box with center coordinats and a size
- ROI_writeChannelsList
edit list of 4 channels seperated by a semicolon to write rectangle data into channels
- ROI_writeChannels
see the actual ROI_writeChannelsList
- ROI_writemarkerType
- define the cursor marker for the selection
cursor
selection type
box
simple box
box_crosshairs
box with extra lines
line
line connection
arrow
arrow connection
- ROI_writeType
- how the data is written to the channels
type
description
none
data is ignored
xy_only
only the first 2 channels are used for a center
xy1_xy2
box with 2 coordinates
xyUpleft_xyLowright
box with a upper left and lower right version
xycenter_width_height
box with center coordinats and a size
- channelXaverage
waveform channel to display a pixel wise plot into an image for the x-axis
- channelYaverage
waveform channel to display a pixel wise plot into an image for the y-axis
caCalc
#
- Description:
The idea of caCalc is to have a posibility to do calculations for supporting and optimizing the graphical interface. Thinks like complex visibility and specific data handling/distributions. It is NOT meant for a simple replacement for a real IOC. The advantage of caCalc is to open a connection between channel data and data transportation and modification of Qt. This Signal/Slot mechanisem helps to access deeper graphical functionalities, like moving widgets aaround or get control over the main window e.g. remote displays.
- variable
this string generates a process wide variable (softPV) inside caQtDM. This contains the value of the calculation. If this string is empty there will be an automatic name generated, everytime the panels is opened. To guarantee that this name is unique caQtDM is using the UUID generator.
- variableType
- this defines the output type of the softPV. The only decission you can made is sclar or vector.
scalar
a single double
vector
an array of doubles
- foreground
defines the foreground color of the widget
- background
defines the background color of the widget
- channels
if variableType is vector you can add a number of single channels to a list. caCalc is generating a softPV that can be used for plotting
- channelList
visualisation of all channels
- calc
this string represents the calculation that is executed when one of the 4 channels got a monitor. The calculation is exactly the same mechanisem like in the calc or the calcout record in EPICS. There are additional way to use caCalc.
EPICS calc string
%/regexp/ : to use Regular Expressions
%QRect : to use Siganl/Slot mechanisem to control positions and size. For this you need to add all 4 channel properties a data source
%P/ : to use Python for calculations (extra support is needed during build time, typically only Linux support)
inside the calculation macros can be used.
- channel
data source for A can be a channel that gets the data over a plugin or a softPV. The reason for the not name this property not channelA is the naming in the origin of EPICS records.
- channelB
datas source for the value B
- channelC
datas source for the value C
- channelD
datas source for the value D
- initialValue
this property initialize the widget with this value enterd here
- precision
the precision gives the accuarcy of the graphical display part of this widget
- eventsignal
if you are using the Signal/Slot mechanissen you must change this property. Otherwise there will be no signals emitted. ================= ==================== Never there will never a signal generated onFirstChange there will be one signal emitted at the first change onAnyChange on every change ther will be signal emitted, this frequency can be sometimes a problem. TriggerZeroToOne there will be only signals when the value before was rounded 0 and now the rounded value is 1 TriggerOneToZero there will be only a signal when the value was rounded 1 and is now rounded 0 ================= ====================
- buddy
Qt specific property because of the object characteristic of the caCalc widget
caWaterfallPlot
#
has no equivalent in MEDM.
Geometry is used for any object Description:
caBitNames
#
has no equivalent in MEDM.
Geometry is used for any object Description:
caTable
#
has no equivalent in MEDM.
Geometry is used for any object Description:
all graphical objects#
caLabel
#
is the equivalent of Text in MEDM.
Geometry is used for any object Description:
caGraphics
#
is the equivalent of all primary graphical objects (like circles, lines, arcs, triangles, arrows, …) in MEDM.
Geometry is used for any object Description:
caFrame
#
has no equivalent of Text in MEDM.
Geometry is used for any object Description:
caImage
#
is the equivalent of image in MEDM.
Geometry is used for any object Description: Qt supports many graphics format, try yours to see if it will be displayed. The most interesting format is however the animated GIF format. These GIF image files may include multiple frames, transparency, and most other features supported by the GIF format. If the GIF image file has multiple frames, caQtDM can choose to animate the images or to display a specified frame. The default is to animate if there is more than one frame. To display a specific frame, enter an expression for the Image Calc that returns a frame number. Frame numbers start with 0. The syntax for the Image Calc expression is the same as that for the Visibility property, and it uses channels A-D in the Dynamic Attribute. The only difference is that the CALC expression should return a frame number, not True or False. The value will be rounded to the nearest integer. Frame numbers that are too high will use the last frame, and frame numbers that are too small will use the first frame. The Image will be black in EXECUTE mode if the Image Calc expression is invalid. The visibility of the Image is determined in the usual way if there is a channel specified. A multiple-frame Image even with no process variables specified for the Dynamic Attribute does update with some speed. Use the Image Calc expression and the process variables in the Dynamic Attribute to specify when to display each color.
There is an EPICS extension called Simple GIF Animator (SGA) for linux/Unix that allows you to create and modify animated GIFs for use in caQTDM.
There are also many other GIF animators available, especially for Microsoft Windows. It does not make any difference which platform you use to create or manipulate the images. You cannot use SGA or most of the animators to create the images themselves, only to add, delete, and rearrange them plus modify some of the GIF parameters. There are many drawing and image editing programs that allow you to create and edit images. For UNIX, the GNU Image Manipulation Program (GIMP)is a good choice and is free.
caPolyLine
#
is the equivalent of Polyline and Polygone in MEDM.
Geometry is used for any object Description:
caInclude
#
is the equivalent of the Composite in MEDM
Geometry is used for any object Description: Composite objects are created by the designer as a new ui file to be included in a main file. For many operations they are treated as one object. Its uses also visibility (Color Mode, Visibility, Visibility Calc, Channels A-D) properties. One can specify macros. you can specify them by placing a semi-colon after the file name and entering them as on the command line.
caDoubleTabWidget
#
has no equivalent in MEDM and is not a controls object
Geometry is used for any object Description:
all controller objects#
caNumeric
#
is the equivalent of the Wheelswitch in MEDM
Geometry is used for any object Description: The WheelSwitch has arrow buttons above and below the digits that are used to change individual digits, and it also accepts keyboard input. The up and down arrow buttons are the main feature of the WheelSwitch. You click them to increment the digit. The arrow buttons can also be navigated and operated via the keyboard. You have to put the focus on the selected digit, which get surrounded with a red color. The cursor has to remain inside the widget otherwise the focus will be lost. The up and down arrow keys increment or decrement the selected digit. Clicking on an arrow button will increment or decrement the digit. The WheelSwitch will also accept input of a new value via the keyboard by double clicking on the value. Escape aborts the input. Type Enter to finish the input.
caApplyNumeric
#
is the equivalent of the Wheelswitch in MEDM
Geometry is used for any object Description: The same behaviour as the Wheelswitch, with the difference that the value will be applied when pressing the apply button.
caSlider
#
is the equivalent of the Wheelswitch in MEDM
<Geometry is used for any object Description:
caShellCommand
#
is the equivalent of the Shell command in MEDM
Geometry is used for any object Description:
caChoice
#
is the equivalent of the Choice Button in MEDM
Geometry is used for any object Description:
column
The buttons are arranged in a row. (This appears to be a mistake, which will not be corrected because of existing screens.)
row
The buttons are arranged in a column. (This appears to be a mistake, which will not be corrected because of existing screens.)
row column
The buttons are automatically arranged in rows and columns.
caTextEntry
#
is the equivalent of the Text Entry in MEDM
Geometry is used for any object Description:
caSpinBox
#
represents a simplified Wheelswitch
Geometry is used for any object Description:
Requirements#
caQtDM requires that Qt, qwt and EPICS are installed. Actually the suported version are Qt4.6 and above, qwt6.0 and above. Qt5 needs at least qwt6.1. The synoptic editor (designer) is part of Qt and the caQtDM objects are plugged into the designer. This help can be called from the designer by pressing F1 on any object and requires the assistant which is a part of Qt. caQtDM runs in principle on any plattform and has been tested for several linux flavours and also on Microsoft Windows. For MAC OS probably some work has to be done. Qt requires actually on linux normally X11 on Microsoft Windows the native window system.
caQtDM requires that Qt, qwt and EPICS are installed. Actually the suported version are Qt4.6 and above, qwt6.0 and above. Qt5 needs at least qwt6.1. The synoptic editor (designer) is part of Qt and the caQtDM objects are plugged into the designer. This help can be called from the designer by pressing F1 on any object and requires the assistant which is a part of Qt. caQtDM runs in principle on any plattform and has been tested for several linux flavours and also on Microsoft Windows. For MAC OS probably some work has to be done. Qt requires actually on linux normally X11 on Microsoft Windows the native window system.
Command Line Options#
caQtDM can be executed with the same options as MEDM; this to be compatible with its options. the following options are supported:
option |
meaning |
---|---|
|
describe the options |
|
has no effect (MEDM’s execute-only mode) |
|
attach to a running caQtDM |
|
iconize the main window |
|
will replace the default stylesheet with the specified file (works only when not attaching) |
|
prevent resizing, works only when not attaching |
|
apply macro substitution to replace occurrences of |
|
will load macro definitions from file |
|
specifies the geometry (location and size) of the synoptic display |
|
|
|
print file and exit |
|
will save image file and exit |
|
will override the default epics3 datasource |
|
e.g. -option “updatetype=direct” will set the updatetype to Direct options for bsread: * bsmodulo,bsoffset, * bsinconsistency(drop|keep-as-is|adjust-individual|adjust-global), * bsmapping(provide-as-is|drop|fill-null) * bsstrategy(complete-all|complete-latest) |
|
will look for files on the specified url and download them to a local directory |
|
will empty the local cache used for downloading |
Parameters in square brackets [] are optional.
Examples#
Start up, performing macro substitution of all occurrences of $(a)
and
$(c)
in the display file, xyz.ui
:
caQtDM -macro "a=b,c=d" xyz.adl &
Start up in execute mode; resize the display window corresponding to abc.adl to 100 by 100 pixels and move it to the location, x = 100 and y = 100; and move the display window corresponding to def.adl to x = 400 and y = 150:
caQtDM -dg 100x100+100+100 abc.ui &
Description Files#
With the Qt designer, you produce xml files with the extension .ui
.
These files are used as input for the synoptic viewer caQtDM. These
xml ascii file can be edited by hand, but care has to be taken while
caQtDM and Qt designer do not forgive any error. Qt designer will
however tell you at what line the mistake is produced.
The files are normally loaded from the current directory and/or from
the directory specified by the environment variable
CAQTDM_DISPLAY_PATH. The directories are specified with the separator
:
for linux and ;
for microsoft windows.
Connection Problems and Access Rights#
When caQtDM cannot connect the specified process variable normally white colors will be drawn. A list of unconnected process variables can be called through the menu of the main window of caQtDM. When a process variable is not writeable the cursor will change to some special sign.
Fonts#
The custom widgets make extensively use of the Qt font “Lucida Sans Typewriter”. If this font does not exist in some cases it will fall back to a font called “Monospace”. However the “Lucida” font is really the appropriated font to display numbers and it is warmly advised to have this font installed.
General Properties#
Geometry
All the widgets have geometry properties that can be set by the designer; these properties are normally at the top of the property sheet:
X Position |
x coordinate of the top left corner of the objectrelative to the display. |
Y Position |
y coordinate of the top left corner of the object relative to the display. |
Width |
Width of the object. |
Height |
Height of the object. |
Visibility
For the graphical objects except caDoubleTabWidget which is not a control widget
Color Mode |
Color Mode for the object. only for caGraphics, caLabel, and caPolyLine. See the Color Mode property |
Visibility |
Visibility mode for the object. See the Visibility Mode property. |
Visibility Calc |
A CALC expression that determines whether the object is displayed or not. The expression should return 0 for False and anything else for True. |
Channel A |
Name of the main process variable associated with the object. An A in the CALC expression is replaced by the value of this process variable, and the values corresponding to G through L are obtained from this process variable. |
Channel B |
Name of the second process variable associated with the object. A B in the CALC expression is replaced by the value of this process variable. |
Channel C |
Name of the third process variable associated with the object. A C in the CALC expression is replaced by the value of this process variable. |
Channel D |
Name of the fourth process variable associated with the object. A D in the CALC expression is replaced by the value of this process variable. |
See CALC Expressions for more details.
Color Mode
static |
Show the object in its normal colors. |
alarm |
Show the object in alarm colors based on the severity of the associated process variable. The alarm colors are Green for NO_ALARM, Yellow for MINOR_ALARM, Red for MAJOR_ALARM, White for INVALID_ALARM, and Gray if the alarm has an unknown value (because of an error in the record, for example). |
Visibility Mode
static |
The object is displayed always. Updating objects are always above non-updating objects. |
if not zero |
The object is displayed if the process variable is not zero. |
if zero |
The object is displayed if the object is zero. |
calc |
Use calc expression to determine the visability. |
Direction
For the Bar Monitor , Byte Monitor , Scale Monitor , and Slider
up |
Direction for the object is up or up/down. |
right |
Direction for the object is right or left/right. |
down |
Only used in the Bar Monitor. Otherwise, MEDM treats this the same as up. |
left |
Only used in the Bar Monitor. Otherwise, MEDM treats this the same as right. |
Label
For the Meter, Bar Monitor, Scale Monitor, and Slider.
none |
No extra features, except the limits are shown for the meter. You can eliminate the limits on the meter by resizing it vertically so they do not show. |
no decorations |
Same as none except for the Bar Monitor. For the Bar Monitor only the background and the bar show. This allows making bar graphs in MEDM. |
outline |
Show limits. |
limits |
Show limits and a box for the value (except there is no box for the Slider). |
channel |
Show limits, a box for the value, and the process variable name (except there is no box for the Slider). |
Text Align
horiz. left |
Align the text at the top left of the object. (Capital letters will line up with the top of the object, and the text will start at the left of the object.) |
horiz. centered |
Align the text at the top center of the object. (Capital letters will line up with the top of the object, and the text will be horizontally centered in the object.) |
horiz. right |
Align the text at the top right of the object. (Capital letters will line up with the top of the object, and the text will end at the right of the object.) |
vert. top |
No longer used. In |
vert. centered |
No longer used. In |
vert. bottom |
No longer used. In |
Text Format
For the Text Entry and Text Monitor . For all of the formats, the result depends on the number itself and the precision as returned from channel access for the process variable. The precision is typically the PREC field for the associated record. The PREC field is only determined when the process variable is connected, so subsequent changes to the PREC do not affect the format until the synoptic display is reloaded.
CALC Expressions
CALC expressions are used to determine visibility for graphical objects and to determine the frame number for the caImage, which also has a Dynamic Attribute. For visibility, the expression should return 0 for False, and anything else for True. For the frame number for the Image it should return a number, which will be rounded to the nearest integer. Frame numbers start with 0. The complete syntax of the CALC expression is described in detail in the Record Reference Manual found in the Epics Documentation under IOC software for any version of EPICS base, through at least Base 3.13. It is a case-independent C expression that can include functions such as ABS, SQR, MIN, MAX, CEIL, FLOOR, LOG, LOGE, EXP, SIN, SINH, ASIN, COS, COSH, ACOS, TAN, TANH, and ATAN, as well as the usual C operators, except that != is replaced by # and == is replaced by =. The letters A-L obtain their values from the Channels A-D and are replaced as follows.
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 are:
expression |
Show the object whenever the … |
---|---|
|
… value of Channel A is zero |
|
… value of Channel A is not zero |
|
… value of Channel A is 12 |
|
… value of Channel A is not 12 |
|
… values of Channels A, B, and C are all negative |
|
… main process variable is within 90% of its HOPR or LOPR limits |
|
… SEVERITY of the main process variable is not 0 |
Macro Substitution#
Strings of the form $(name) in a .adl
file can be replaced by some
other string, both on the command line and when calling a related
display. Specific directions for each of these
cases are given in the correspoonding sections of the manual. In
general, there is an argument string of the form
name1=value1[,name2=value2]...
. All occurrences of “$(name1)” in the
.adl
file are replaced with “value1”, then all occurences of $(name2)
are replaced by value2, etc. The substitition is recursive; that is,
if value1 contains an occurrence of $(name2), then when name2=value2
is processed, that occurrence will be replaced by value2.
Drag-And-Drop#
you may drag and drop an item to some destination, however there is no drag and drop possible between Qt and X11. When using KDE you may drag and drop to a konsole. For simple cut and paste, you can call the pv info box and get the variable you want to paste.
Main Window#
The main window of caQTDM present messages, a menu bar and a status bar. The menu bar has the following items:
Menu |
Open File |
calls a dialog box for opening a |
Reload |
will close and reload all displays; very handy during editing |
|
Exit |
will exit caQTDM |
|
About |
gives some information about the build and author |
|
PV |
will display a list of unconnected PV’s |
|
UpdataType |
Direct |
When caQtDM is in this mode, all the monitors will be displayed as soon as they come |
Timed |
When caQtDM is in this mode, all the monitors will be displayed will be displayed with a highest rate of 5Hz, however this rate can be set on a individual base by a JSON string after the channel (in designer) with the following syntax channel{“caqtdm_monitor”:{“maxdisplayrate”:20}}, where you can choose your display rate. |
The Status bar will display the following information: memory used by caQtDM, the number of connected and unconnected PV’s, the number of monitors per second, the number of displays per second and the monitor with the highest rate.
Help#
You may obtain help for any widget in the designer by pressing F1. For the caQtDM custom widgets the help file generated from this html file should be registered by the Qt assistant.
Resizing Displays#
Displays With caQtDM you can resize the synoptic display windows without using Qt layouts. You can build a display normally and everything will be resized when you resize the window. Furthermore you could try Qt designer layouts (for experts only)
Printing#
By pressing the right mouse button on the background of your synoptic display you may get a context menu with the item “Print”. Normally you should get a print dialog.
Environment Variables#
caQtDM uses the following environment variables:
form QT and EPICS Library:
|
to find the plugins of qt and others |
|
see EPICS Documentation |
|
see EPICS Documentation |
from caQtDM:
|
A colon-separated (semi-colon-separated on Mircosoft Windows) list of directories in which to look for display files. Only looks in the current working directory if not specified. Related Displays have to be in your current directory or in this path |
|
paths to look for ui and stylesheet files to download via http |
|
A list of commands for the Context Menu . See the Context Menu Customization for the format. |
|
for backwards…… |
|
Enviroment file for Mobile devices |
|
to exit caQtDM after some amount of time |
|
override all other find record settings (direct json http download) |
|
for autocompletion, the request URL |
|
search limitation for a facility |
|
search limit max number of entries |
|
if set to “false”, default unit replacements are disabled. |
|
define custom unit replacements. They are replaced after default replacements took place, if enabled.You can use unicode characters or hexadecimal / decimal utf-8 character codes, seperated by (,) , (=) and (;). |
from plugins:
|
point the bsread plugin to the dispatcher |
|
control the connection type of the bsread plugin |
|
point the bsread plugin static sources |
|
point the archiver plugin to a different archiver backend |