commit cee4bdef9839d2b1903776ad8c7f8f0c4e49d3cf Author: ebner Date: Tue Jul 8 08:18:09 2025 +0200 first commit diff --git a/icons/back.gif b/icons/back.gif new file mode 100644 index 0000000..a694ae1 Binary files /dev/null and b/icons/back.gif differ diff --git a/icons/blank.gif b/icons/blank.gif new file mode 100644 index 0000000..0ccf01e Binary files /dev/null and b/icons/blank.gif differ diff --git a/icons/folder.gif b/icons/folder.gif new file mode 100644 index 0000000..4826460 Binary files /dev/null and b/icons/folder.gif differ diff --git a/icons/image2.gif b/icons/image2.gif new file mode 100644 index 0000000..751faee Binary files /dev/null and b/icons/image2.gif differ diff --git a/icons/layout.gif b/icons/layout.gif new file mode 100644 index 0000000..c96338a Binary files /dev/null and b/icons/layout.gif differ diff --git a/icons/script.gif b/icons/script.gif new file mode 100644 index 0000000..d8a853b Binary files /dev/null and b/icons/script.gif differ diff --git a/icons/tar.gif b/icons/tar.gif new file mode 100644 index 0000000..4032c1b Binary files /dev/null and b/icons/tar.gif differ diff --git a/icons/text.gif b/icons/text.gif new file mode 100644 index 0000000..4c62390 Binary files /dev/null and b/icons/text.gif differ diff --git a/icons/unknown.gif b/icons/unknown.gif new file mode 100644 index 0000000..32b1ea2 Binary files /dev/null and b/icons/unknown.gif differ diff --git a/images/EPICS_small b/images/EPICS_small new file mode 100644 index 0000000..1d4a4b7 Binary files /dev/null and b/images/EPICS_small differ diff --git a/images/black b/images/black new file mode 100644 index 0000000..8624666 Binary files /dev/null and b/images/black differ diff --git a/images/men_at_work b/images/men_at_work new file mode 100644 index 0000000..d40d4ef Binary files /dev/null and b/images/men_at_work differ diff --git a/images/printer b/images/printer new file mode 100644 index 0000000..c3ef2ea Binary files /dev/null and b/images/printer differ diff --git a/images/psi_logo b/images/psi_logo new file mode 100644 index 0000000..ccbcda8 Binary files /dev/null and b/images/psi_logo differ diff --git a/images/space b/images/space new file mode 100644 index 0000000..e1e3800 Binary files /dev/null and b/images/space differ diff --git a/images/valid-html401.png b/images/valid-html401.png new file mode 100644 index 0000000..ec9bc0c Binary files /dev/null and b/images/valid-html401.png differ diff --git a/images/vcss.png b/images/vcss.png new file mode 100644 index 0000000..9b2f596 Binary files /dev/null and b/images/vcss.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..8eccd2c --- /dev/null +++ b/index.html @@ -0,0 +1,310 @@ + + + + + + +EPICS at the Paul Scherrer Institute + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 20.05.2019
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

EPICS at the Paul Scherrer Institute

+ + +

What's "EPICS"?

+

+EPICS means "Experimental Physics and Industrial Control System". +It is a collection of client/server software to build distributed +real-time control systems. +It is used by a number of scientific institutes, such as particle +accelerators or telescopes. +EPICS is maintained by the community of EPICS users. +It is free of charge. +Visit the EPICS home page. +

+ +

What's the Paul Scherrer Institute?

+

+The Paul Scherrer Institute +is a federal scientific research center in north Switzerland. +It is home of several EPICS controlled particle accelerators: +

    +
  • SLS, + "Swiss Light Source" or "Synchrotron-Lichtquelle Schweiz" +if you understand German
  • +
  • HIPA, + the high intensity proton accelerator
  • +
  • Proscan, +a medical proton accelerator for cancer treatment
  • +
  • SwissFEL, +the new Swiss Free Electrol Laser
  • +
+

+ +

EPICS Software

+

+This is a collection of EPICS drivers and other +software that have been developped or improved at the PSI. +

+ +

EPICS Training (in German and English)

+

+The section Control Systems of the PSI offers an +EPICS Training, +a one-day course on the Control System EPICS. +This course is customized for the PSI facilities.

+

In addition there are +lessons provided for programmers +to write his/her own EPICS client applications in C. +

+ + +
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 20.05.2019   +Source: /afs/psi.ch/project/epics/webhosting/index.php   + +
+ diff --git a/software.html b/software.html new file mode 100644 index 0000000..9108236 --- /dev/null +++ b/software.html @@ -0,0 +1,422 @@ + + + + + + +EPICS software + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 20.04.2023
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

EPICS software

+ +

+This is a collection of EPICS drivers and other +software that have been developed or improved at the SLS. +The list might be incomplete or outdated. +Use it at your own risk. +We do not take any responsibility for the functionality of the software. +That means, if a feature is missing you might contact the author. +But there is no guarantee when or even that the software will be fixed. +If the software has a bug, it's the same. +If the bug causes damage or injury, it's your problem. +

+ +

+This page is totally outdated and not really maintained.
+The software may not compile outside the PSI environment, maybe not even at PSI.
+You have been warned. +

+ +

Contents

+ + +

Drivers and Device Supports

+ +

Compatibility Header

+

+Download the compatibility header file that +translates many EPICS R3.14 functions back to R3.13/vxWorks and +allows to compile (some) R3.14 code for R3.13 systems. Documentation is +included in the file. +

+ +

Digital Power Supply Control

+

+The PSI Electrical Engineering Department developed a DSP regulated +power supply. The interface to the power supply controller is by a +fast optical fiber link via a in-house developed Industry Pack module. +The VME-EPICS driver for this module can be downloaded from it's own web-side: +dps.web.psi.ch. +

+ +

Encoders

+

+EPICS support for encoder cards manufactured by Kramert GmbH is documented under: +

+

+ +

Firewire camera support

+

+This is a R3.14 device support for Firewire (IEEE1394) cameras connected +to a Linux PC. +

+ +

General Purpose Memory Mapped Device Driver

+

+The GPMM driver is an EPICS generic driver to deal with any +type of the VME memory mapped card. +It allows easy integration of new cards to EPICS. +

+ +

generalTime

+

+The generalTime driver is a timekeeper for EPICS which manages a list +of prioritized time providers. Find more info here. +

+ +

IOC Monitoring

+

+This is an IOC monitoring application that runs on the IOC (EPICS + vxWorks) +and monitors the available resources. It extends the current vxstats +functionality and provide the data in a more readable way. +For example, instead of showing a string that includes all the boot +parameters, we have separated each individual boot parameter and provide +it as an independent EPICS channel. +Moreover, it additionally report network interface statistics and +channel access links. + +

IOC with built-in Octave core

+

+It is an IOC which has a built-in OCTAVE engine. +The EPICS channels, within the IOC-OCTAVE server, +can dynamically create OCTAVE variables and use OCTAVE functions. +

+ +

PC Monitoring

+

+A simplified version of the "IOC Monitoring" application, running on Linux hosts. +

+ +

PLC communication

+

+This driver is intended to connect a Siemens S7 PLC (programmable +logic controller) via TCP/IP to an EPICS IOC. However, it can be used for +any device sending and receiving blocks of process variables (PVs) in the +same way. +

+ +

StreamDevice

+

+This is a generic driver to talk to +"byte stream" (i.e. ASCII strings) controlled devices. +The driver is built on top of the "asyn" driver. +Thus, it supports any bus system that is supported by asyn +(e.g. serial line, TCP socket, GPIB). +It allows to specify the communication protocol without the +need to do C coding. + +The driver is available +on GitHub +

+ +

regDev Generic Register Device Driver

+

+This is a generic driver for abitrary register mapped devices. +It combines features of the older GPMM and of asynDriver. + +The driver is available +on GitHub +

+ +

VHQ Programmable Power Supply

+

+This is a VME hardware module which is a programmable High Voltage power supply in 2 slot width. +It supports a variable rate of change of output voltage, and has switchable polarity. +It includes integrated protection and control circuits with output overload and short circuit protection. It has a SHV connector on the front side for High Voltage connection. Documentation is available here VHQ Programmable Power Supply. +

+ +

iocsh Utilities

+

Tcl-IOC

+

+This replaces the EPICS iocsh with a Tcl shell. Tcl has much more +programming capabilities. All iocsh features are fully supported. +

+ +

VxWorks Utilities

+Under construction ... + +

Graphical User Interfaces

+

iocLogBrowser

+

+Simple tcl/tk program to browse log-files generated by the iocLogServer. +A wrapper script "iocLogger" to start/stop the iocLogServer is provided, too. +The programs need some customization to the local setup: +

+
    +
  • "iocLogBrowser": "subnets" are just files from different iocLogServers. +All iocLogServers should write to the same directory.
  • +
  • "iocLogger": adjust EPICS_IOC_LOG_FILE_NAME, EPICS_IOC_LOG_FILE_LIMIT, LOGSVRNAME, PATH and LD_LIBRARY_PATH +(the latter two only if you want to call the script from a cron job.)
  • +
+ + +

Useful Scripts

+Under construction ... +
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 20.04.2023   +Source: /afs/psi.ch/project/epics/webhosting/software/index.php   + +
+ diff --git a/software/CSDataQuick.html b/software/CSDataQuick.html new file mode 100644 index 0000000..b3f3b43 --- /dev/null +++ b/software/CSDataQuick.html @@ -0,0 +1,330 @@ + + + + + + +CSDataQuick + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Xiaoqiang Wang
+Phone: +41 56 310 3380
+Updated: 08.10.2021
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

CSDataQuick

+ + + +

This project brings EPICS control system data into QML/QtQuick programming.

+ +

Overview

+ +

+The QML module provides a CSData object to model CSDataQuick.Data control system data, and a collection +of visual QtQuick items to control/monitor the data. These visual items are ready to be used +inside the Qt Quick Designer by a drag-n-drop. +

+ +

+In addition it includes the following programs, +

    +
  • viewer
  • + This program can be used to display the created QML files. And as its name suggests, it can also parse ADL, EDL and UI files + and create the display with equivalent QtQuick items. +
  • builder
  • + This program can be used to build one time display panels on the fly. +
+

+ +

Checkout the documents to get started.

+ +

Downloads

+

+The source repository is on github. The source code tarball is available on the release page. +

+ +

anaconda users can install the package from paulscherrerinstitute channel +

+$ conda install -c paulscherrerinstitute csdataquick
+
+

+ +

+For users' convenience, ready-to-use binary packages are provided. They are self contained with Qt libraries builtin, +together with a stripped down Qt Creator to provide a Drag-n-drop QtQuick designer. + +

+ + + + + + + + + + + + + +
+ Linux 64bitWindows 64bitmacOS x86 64bit
1.2.1RHEL7 RPM: CSDataQuick and Qt Creator 4.9.2

+ Binary Tarball(Qt Creator 4.9.2 and Qt 5.9.9)
Installer(Qt Creator 4.9.2 and Qt 5.9.9)DMG Image(Qt Creator 4.12.4 and Qt 5.12.11)
+ +

+Note: On macOS Sierra or later, the app cannot be launched from Finder due to the Gatekeeper path randomization. +You could lift the limit by running the command +

xattr -r -d com.apple.quarantine /Applications/CSDataQuick
+

+
+Author: Xiaoqiang Wang   Phone: +41 56 310 3380   Email: xiaoqiang.wang@psi.ch   Updated: 08.10.2021   +Source: /afs/psi.ch/project/epics/webhosting/software/CSDataQuick/index.php   + +
+ diff --git a/software/CSDataQuick/docs.html b/software/CSDataQuick/docs.html new file mode 100644 index 0000000..dc1abe1 --- /dev/null +++ b/software/CSDataQuick/docs.html @@ -0,0 +1,98 @@ + + + + + + + CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+
+ + +
+

CSDataQuick provides an object model for control system data, which are normally scalar/array values with describing metadata, and a set of visual items to display and control the data. Given the declarative nature of Qt QML, this made it suitable to design traditional GUI using clear structural text. Moreover it enables the easy creation of dynamic, fluid GUI experience.

+

The content of the documentation:

+ +
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/adlparser-members.html b/software/CSDataQuick/docs/adlparser-members.html new file mode 100644 index 0000000..cd043ef --- /dev/null +++ b/software/CSDataQuick/docs/adlparser-members.html @@ -0,0 +1,143 @@ + + + + + + + List of All Members for ADLParser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for ADLParser

+

This is the complete list of members for ADLParser, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/adlparser.html b/software/CSDataQuick/docs/adlparser.html new file mode 100644 index 0000000..40d40a6 --- /dev/null +++ b/software/CSDataQuick/docs/adlparser.html @@ -0,0 +1,145 @@ + + + + + + + ADLParser Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

ADLParser Class

+ +

Parse MEDM ADL files. More...

+ +
+
Header: #include <ADLParser> +
Inherits: QCSParser
+ +

Public Functions

+
+ + +
ADLParser(QObject *parent = 0)
virtual ~ADLParser()
+ +

Reimplemented Public Functions

+
+ + + +
virtual QString description()
virtual QString extension()
virtual QString parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false)
+
    +
  • 3 public functions inherited from QCSParser
  • +
  • 32 public functions inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 2 properties inherited from QCSParser
  • +
  • 1 property inherited from QObject
  • +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Parse MEDM ADL files.

+

ADL (ASCII Display List) files are produced by MEDM (Motif Editor and Display Manager). All graphical objects are well supported.

+
+ +
+

Member Function Documentation

+ +

ADLParser::ADLParser(QObject *parent = 0)

+

Default constructs an instance of ADLParser.

+ +

[virtual] ADLParser::~ADLParser()

+

Destroys the instance of ADLParser. The destructor is virtual.

+ +

[virtual] QString ADLParser::description()

+

Reimplemented from QCSParser::description().

+ + +

[virtual] QString ADLParser::extension()

+

Reimplemented from QCSParser::extension().

+ + +

[virtual] QString ADLParser::parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false)

+

Reimplemented from QCSParser::parseDisplayFile().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/csdataquick-cpp.html b/software/CSDataQuick/docs/csdataquick-cpp.html new file mode 100644 index 0000000..3a8f450 --- /dev/null +++ b/software/CSDataQuick/docs/csdataquick-cpp.html @@ -0,0 +1,102 @@ + + + + + + + CSDataQuick C++ Classes | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSDataQuick C++ Classes

+ + +
+ +

CSData

+

QCSData provides the abstract of any control system data. Upon creation or QCSData::source change, QCSDataEngineManager will look for the registered QCSDataEngine reponsible for this type of data. The data engine will connect to the control system and fill the data object if successful.

+

The data engines are implemented using plugins. Here is a list of supported data engines.

+ + + +

QCSDataEngineCA

Connect to EPICS process variables (PV) via Channel Access (CA)

QCSDataEngineLocal

User configurable data

QCSDataEngineSim

Simulation data produced by math functions

+

+ +

Display File Parser

+

Different display files can be parsed through QCSParser interface and converted to the equivalent display in QML.

+

The various parsers are implemented using plugins and loaded by QCSParserManager. Here is a list of supported parsers.

+ + + + +

ADLParser

Parse MEDM ADL files

EDLParser

Parse EDM (Extensible Display Manager) files

QMLParser

Parse CSDataQuick QML files

UIParser

Parse caQtDM UI files

+

+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/csdataquick-qmlmodules.html b/software/CSDataQuick/docs/csdataquick-qmlmodules.html new file mode 100644 index 0000000..e1903a4 --- /dev/null +++ b/software/CSDataQuick/docs/csdataquick-qmlmodules.html @@ -0,0 +1,152 @@ + + + + + + + CSDataQuick QML Types | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSDataQuick QML Types

+ + +
+ +

Control System Data

+

CSData is modeled after the Process Variable (PV) as implemented in EPICS control system. It comprises a set of attributes (e.g. value, units, limits) and is indentified by a unique name CSData::source.

+

References to Process Variable, PV, Channel might still appear in the documents in place of CSData.

+
import CSDataQuick.Data 1.0
+
+ + + +

CSData

Object that represents control system data

CSDataAlarm

Object provides alarm information about the data

CSDataRange

This class provides limits information about the data

+ +

Visual Components

+
import CSDataQuick.Components 1.0
+

Most components name, style, function inspired by MEDM objects. Some document texts are literally copied and the designer item icons are converted from MEDM xpm data.

+

+

Base Types

+
+ + + + + +

BaseWindow

Base for all toplevel windows

CSControl

Basic type to all controls

CSGraphics

Basic type to all graphics shapes

CSMonitor

Basic type to all monitors

BaseItem

Base item which all visual items derive

+ +

Graphics

+
+ + + + + + + + +

CSArc

Display an arc curve

CSComposite

Display grouped items or include external files

CSImage

Show a static or dynamic image

CSOval

Display a circle or ellipse

CSPolygon

Display a polygon shape

CSPolyline

Display a polyline

CSRect

Display a rectangle

CSText

Display a text label

+ +

Monitors

+
+ + + + + + + + + + +

CS2DSscan

Display 2D sscan

CSADImage

Display an image from areaDetector

CSBar

Display a bar that expands or contracts when value changes

CSByte

Display bits of an unsigned integer

CSCartesianPlot

Display XY Plot

CSIndicator

Indicator displays the value on a scale

CSMJPEGVideo

Display a video from MJPEG video stream

CSMeter

Displays the value on a cirular dial panel

CSStripChart

Display a strip chart

CSTextUpdate

Display the value in given format

+ +

Controls

+
+ + + + + + + + + + + + +

CSChoiceButton

Display data's enumerate

CSMenu

Displays process variable's enumerate in drop-down menu

CSMessageButton

Displays a push button

CSRelatedDisplay

Brings up more displays

CSShellCommand

Run shell commands

CSSlider

Display a slider to control a PV

CSSpinBox

Display a spin box control

CSTextArea

Display an editable multiline text

CSTextEntry

Display an editable text

CSTextEntryArray

Display text entry for array data

CSToggleButton

Displays a checkbox to toggle a boolean value

CSWheelSwitch

Control a number with individual digit manipulation

+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/demos.html b/software/CSDataQuick/docs/demos.html new file mode 100644 index 0000000..1fa788f --- /dev/null +++ b/software/CSDataQuick/docs/demos.html @@ -0,0 +1,84 @@ + + + + + + + Demos and Gallery | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Demos and Gallery

+ + +
+
    +
  • First load the example EPICS database into an IOC
    $ cd examples/ioc
    +$ softIoc startup.script
    +
  • +
  • To have an overview of UI components
    $ qmlscene -I qml examples/widgets.qml
    +
  • +
  • To explore possible options for each component::
    $ qmlscene -I qml examples/gallery/main.qml
    +
  • +
+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/edlparser-members.html b/software/CSDataQuick/docs/edlparser-members.html new file mode 100644 index 0000000..f926648 --- /dev/null +++ b/software/CSDataQuick/docs/edlparser-members.html @@ -0,0 +1,143 @@ + + + + + + + List of All Members for EDLParser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for EDLParser

+

This is the complete list of members for EDLParser, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/edlparser.html b/software/CSDataQuick/docs/edlparser.html new file mode 100644 index 0000000..2614a99 --- /dev/null +++ b/software/CSDataQuick/docs/edlparser.html @@ -0,0 +1,150 @@ + + + + + + + EDLParser Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

EDLParser Class

+ +

Parse EDM (Extensible Display Manager) files. More...

+ +
+
Header: #include <EDLParser> +
Inherits: QCSParser
+ +

Public Functions

+
+ + +
EDLParser(QObject *parent = Q_NULLPTR)
virtual ~EDLParser()
+ +

Reimplemented Public Functions

+
+ + + +
virtual QString description()
virtual QString extension()
virtual QString parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false)
+
    +
  • 3 public functions inherited from QCSParser
  • +
  • 32 public functions inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 2 properties inherited from QCSParser
  • +
  • 1 property inherited from QObject
  • +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Parse EDM (Extensible Display Manager) files.

+

This parser only supports 4.0 version of EDL files. The unspported features are:

+
    +
  • CALC Pv
  • +
  • Dynamic color rules
  • +
  • Dynamic symbol
  • +
+
+ +
+

Member Function Documentation

+ +

EDLParser::EDLParser(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of EDLParser.

+ +

[virtual] EDLParser::~EDLParser()

+

Destroys the instance of EDLParser. The destructor is virtual.

+ +

[virtual] QString EDLParser::description()

+

Reimplemented from QCSParser::description().

+ + +

[virtual] QString EDLParser::extension()

+

Reimplemented from QCSParser::extension().

+ + +

[virtual] QString EDLParser::parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false)

+

Reimplemented from QCSParser::parseDisplayFile().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/images/ADImage.gif b/software/CSDataQuick/docs/images/ADImage.gif new file mode 100644 index 0000000..fad4564 Binary files /dev/null and b/software/CSDataQuick/docs/images/ADImage.gif differ diff --git a/software/CSDataQuick/docs/images/arc.png b/software/CSDataQuick/docs/images/arc.png new file mode 100644 index 0000000..a104690 Binary files /dev/null and b/software/CSDataQuick/docs/images/arc.png differ diff --git a/software/CSDataQuick/docs/images/areaDetector-control.png b/software/CSDataQuick/docs/images/areaDetector-control.png new file mode 100644 index 0000000..b21d0be Binary files /dev/null and b/software/CSDataQuick/docs/images/areaDetector-control.png differ diff --git a/software/CSDataQuick/docs/images/bar-fillMode.png b/software/CSDataQuick/docs/images/bar-fillMode.png new file mode 100644 index 0000000..db5dd38 Binary files /dev/null and b/software/CSDataQuick/docs/images/bar-fillMode.png differ diff --git a/software/CSDataQuick/docs/images/bar.png b/software/CSDataQuick/docs/images/bar.png new file mode 100644 index 0000000..25779a4 Binary files /dev/null and b/software/CSDataQuick/docs/images/bar.png differ diff --git a/software/CSDataQuick/docs/images/builder-display.png b/software/CSDataQuick/docs/images/builder-display.png new file mode 100644 index 0000000..08cedb9 Binary files /dev/null and b/software/CSDataQuick/docs/images/builder-display.png differ diff --git a/software/CSDataQuick/docs/images/builder-edit.png b/software/CSDataQuick/docs/images/builder-edit.png new file mode 100644 index 0000000..f1b16f2 Binary files /dev/null and b/software/CSDataQuick/docs/images/builder-edit.png differ diff --git a/software/CSDataQuick/docs/images/byte.png b/software/CSDataQuick/docs/images/byte.png new file mode 100644 index 0000000..bf79b91 Binary files /dev/null and b/software/CSDataQuick/docs/images/byte.png differ diff --git a/software/CSDataQuick/docs/images/cartesianplot.png b/software/CSDataQuick/docs/images/cartesianplot.png new file mode 100644 index 0000000..46d01d3 Binary files /dev/null and b/software/CSDataQuick/docs/images/cartesianplot.png differ diff --git a/software/CSDataQuick/docs/images/choicebutton.png b/software/CSDataQuick/docs/images/choicebutton.png new file mode 100644 index 0000000..73f666e Binary files /dev/null and b/software/CSDataQuick/docs/images/choicebutton.png differ diff --git a/software/CSDataQuick/docs/images/components-demo.png b/software/CSDataQuick/docs/images/components-demo.png new file mode 100644 index 0000000..0fdc7ad Binary files /dev/null and b/software/CSDataQuick/docs/images/components-demo.png differ diff --git a/software/CSDataQuick/docs/images/config-qmldesigner.png b/software/CSDataQuick/docs/images/config-qmldesigner.png new file mode 100644 index 0000000..ae83280 Binary files /dev/null and b/software/CSDataQuick/docs/images/config-qmldesigner.png differ diff --git a/software/CSDataQuick/docs/images/cookiebar-x.png b/software/CSDataQuick/docs/images/cookiebar-x.png new file mode 100644 index 0000000..6aea1e6 Binary files /dev/null and b/software/CSDataQuick/docs/images/cookiebar-x.png differ diff --git a/software/CSDataQuick/docs/images/doc_search.png b/software/CSDataQuick/docs/images/doc_search.png new file mode 100644 index 0000000..0d7bccd Binary files /dev/null and b/software/CSDataQuick/docs/images/doc_search.png differ diff --git a/software/CSDataQuick/docs/images/ico_getstarted.png b/software/CSDataQuick/docs/images/ico_getstarted.png new file mode 100644 index 0000000..79b2ed0 Binary files /dev/null and b/software/CSDataQuick/docs/images/ico_getstarted.png differ diff --git a/software/CSDataQuick/docs/images/ico_help.png b/software/CSDataQuick/docs/images/ico_help.png new file mode 100644 index 0000000..10f6786 Binary files /dev/null and b/software/CSDataQuick/docs/images/ico_help.png differ diff --git a/software/CSDataQuick/docs/images/ico_programming.png b/software/CSDataQuick/docs/images/ico_programming.png new file mode 100644 index 0000000..5225669 Binary files /dev/null and b/software/CSDataQuick/docs/images/ico_programming.png differ diff --git a/software/CSDataQuick/docs/images/ico_reference.png b/software/CSDataQuick/docs/images/ico_reference.png new file mode 100644 index 0000000..a522ac4 Binary files /dev/null and b/software/CSDataQuick/docs/images/ico_reference.png differ diff --git a/software/CSDataQuick/docs/images/indicator.png b/software/CSDataQuick/docs/images/indicator.png new file mode 100644 index 0000000..4532e4c Binary files /dev/null and b/software/CSDataQuick/docs/images/indicator.png differ diff --git a/software/CSDataQuick/docs/images/list_arrow.png b/software/CSDataQuick/docs/images/list_arrow.png new file mode 100644 index 0000000..7bb07b3 Binary files /dev/null and b/software/CSDataQuick/docs/images/list_arrow.png differ diff --git a/software/CSDataQuick/docs/images/list_expand.png b/software/CSDataQuick/docs/images/list_expand.png new file mode 100644 index 0000000..d214514 Binary files /dev/null and b/software/CSDataQuick/docs/images/list_expand.png differ diff --git a/software/CSDataQuick/docs/images/menu.png b/software/CSDataQuick/docs/images/menu.png new file mode 100644 index 0000000..cbbafd4 Binary files /dev/null and b/software/CSDataQuick/docs/images/menu.png differ diff --git a/software/CSDataQuick/docs/images/meter.png b/software/CSDataQuick/docs/images/meter.png new file mode 100644 index 0000000..00f45ea Binary files /dev/null and b/software/CSDataQuick/docs/images/meter.png differ diff --git a/software/CSDataQuick/docs/images/oval.png b/software/CSDataQuick/docs/images/oval.png new file mode 100644 index 0000000..6948ac1 Binary files /dev/null and b/software/CSDataQuick/docs/images/oval.png differ diff --git a/software/CSDataQuick/docs/images/polygon.png b/software/CSDataQuick/docs/images/polygon.png new file mode 100644 index 0000000..e5cf749 Binary files /dev/null and b/software/CSDataQuick/docs/images/polygon.png differ diff --git a/software/CSDataQuick/docs/images/polyline.png b/software/CSDataQuick/docs/images/polyline.png new file mode 100644 index 0000000..1f29f08 Binary files /dev/null and b/software/CSDataQuick/docs/images/polyline.png differ diff --git a/software/CSDataQuick/docs/images/rect.png b/software/CSDataQuick/docs/images/rect.png new file mode 100644 index 0000000..bd7d01f Binary files /dev/null and b/software/CSDataQuick/docs/images/rect.png differ diff --git a/software/CSDataQuick/docs/images/relateddisplay.png b/software/CSDataQuick/docs/images/relateddisplay.png new file mode 100644 index 0000000..998d7b0 Binary files /dev/null and b/software/CSDataQuick/docs/images/relateddisplay.png differ diff --git a/software/CSDataQuick/docs/images/shellcommand.png b/software/CSDataQuick/docs/images/shellcommand.png new file mode 100644 index 0000000..219eb4d Binary files /dev/null and b/software/CSDataQuick/docs/images/shellcommand.png differ diff --git a/software/CSDataQuick/docs/images/slider.png b/software/CSDataQuick/docs/images/slider.png new file mode 100644 index 0000000..a55aead Binary files /dev/null and b/software/CSDataQuick/docs/images/slider.png differ diff --git a/software/CSDataQuick/docs/images/sscan.png b/software/CSDataQuick/docs/images/sscan.png new file mode 100644 index 0000000..fcb3a08 Binary files /dev/null and b/software/CSDataQuick/docs/images/sscan.png differ diff --git a/software/CSDataQuick/docs/images/stripchart.png b/software/CSDataQuick/docs/images/stripchart.png new file mode 100644 index 0000000..f56306d Binary files /dev/null and b/software/CSDataQuick/docs/images/stripchart.png differ diff --git a/software/CSDataQuick/docs/images/text.png b/software/CSDataQuick/docs/images/text.png new file mode 100644 index 0000000..f1d97ec Binary files /dev/null and b/software/CSDataQuick/docs/images/text.png differ diff --git a/software/CSDataQuick/docs/images/textarea.png b/software/CSDataQuick/docs/images/textarea.png new file mode 100644 index 0000000..dd2214f Binary files /dev/null and b/software/CSDataQuick/docs/images/textarea.png differ diff --git a/software/CSDataQuick/docs/images/textentry.png b/software/CSDataQuick/docs/images/textentry.png new file mode 100644 index 0000000..1591e3f Binary files /dev/null and b/software/CSDataQuick/docs/images/textentry.png differ diff --git a/software/CSDataQuick/docs/images/textentryarray.png b/software/CSDataQuick/docs/images/textentryarray.png new file mode 100644 index 0000000..c2b1487 Binary files /dev/null and b/software/CSDataQuick/docs/images/textentryarray.png differ diff --git a/software/CSDataQuick/docs/images/textupdate.png b/software/CSDataQuick/docs/images/textupdate.png new file mode 100644 index 0000000..3c1c11a Binary files /dev/null and b/software/CSDataQuick/docs/images/textupdate.png differ diff --git a/software/CSDataQuick/docs/images/wheelswitch.png b/software/CSDataQuick/docs/images/wheelswitch.png new file mode 100644 index 0000000..c5859f3 Binary files /dev/null and b/software/CSDataQuick/docs/images/wheelswitch.png differ diff --git a/software/CSDataQuick/docs/index.html b/software/CSDataQuick/docs/index.html new file mode 100644 index 0000000..73a6140 --- /dev/null +++ b/software/CSDataQuick/docs/index.html @@ -0,0 +1,98 @@ + + + + + + + CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+
+ + +
+

CSDataQuick provides an object model for control system data, which are normally scalar/array values with describing metadata, and a set of visual items to display and control the data. Given the declarative nature of Qt QML, this made it suitable to design traditional GUI using clear structural text. Moreover it enables the easy creation of dynamic, fluid GUI experience.

+

The content of the documentation:

+ +
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/installation.html b/software/CSDataQuick/docs/installation.html new file mode 100644 index 0000000..1430b3d --- /dev/null +++ b/software/CSDataQuick/docs/installation.html @@ -0,0 +1,147 @@ + + + + + + + Installation | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Installation

+ + +
+ +

Binary pacakges

+ +

Packages bundled with Qt Creator

+

To facilitate the usage, packages bundled with Qt Creator are available at http://epics.web.psi.ch/software/CSDataQuick/downloads. The packages are self-contained, including Qt libraries, EPICS base libraries, and a stripped down version of Qt Creator.

+ +

Anaconda Packages

+

Anaconda is a Python distribution. It provides a reproducible way to deploy binary packages, not limited to Python. This module provides packages for linux-64, win-64 and osx-64 platform.

+
$ conda install -c paulscherrerinstitute csdataquick
+

On Windows, if the module is not to be used by Python applications, the EPICS dll libraries have to be in path

+
> set PATH=%PATH%;C:\Miniconda3\epics\windows-x64
+ +

Dependencies

+
    +
  • Qt 5.6 or higher
  • +
  • EPICS base 3.14.12 or higher
  • +
  • Git
  • +
  • cmake 2.8.10 or higher
  • +
+

On RHEL/Centos/SL 6.x, install qt5 from EPEL repository,

+
# yum install yum-conf-epel
+# yum --enablerepo=epel install qt5-qtdeclarative-devel
+# yum --enablerepo=epel install qt5-qtquickcontrols
+

In the following instructions, EPICS base is assumed to be in C:\epics\base-3.14.12 on Windows and /usr/local/epics/base on macOS or Linux. And the EPICS_BASE environment variable is pointing to it. The EPICS_HOST_ARCH environment variable is assumed to be

+
+ + + + +
OSEPICS_HOST_ARCH
Windowswindows-x64
macOSdarwin-x86
Linuxlinux-x86_64
+

Note: If it is going to be used in Qt Quick Designer, different setup might be required on Windows.

+ +

macOS or Linux

+
    +
  • Get the source from github
    $ git clone https://github.com/xiaoqiangwang/CSDataQuick
    +
  • +
  • Create an out-of-source build directory
    $ mkdir CSDataQuick-build
    +$ cd CSDataQuick-build
    +
  • +
  • Use cmake to config the build
    $ cmake ../CSDataQuick
    +
  • +
  • Start the build process
    $ make
    +
  • +
+ +

Windows

+
    +
  • Get the source from github
    > git clone https://github.com/xiaoqiangwang/CSDataQuick
    +
  • +
  • Create an out-of-source build directory
    > mkdir CSDataQuick-build
    +> cd CSDataQuick-build
    +
  • +
  • Add Visual C++, Qt SDK, EPICS base to the PATH
    > set PATH=%PATH%;C:\Qt\5.9.4\msvc2015_64\bin;C:\epics\base-3.14.12\bin\windows-x64
    +> call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
    +
  • +
  • Use cmake to config the build
    > "C:\Program Files\CMake\bin\cmake" -DCMAKE_BUILD_TYPE=Release -G "NMake Makefiles" ..\CSDataQuick
    +
  • +
  • Start the build process
    > nmake
    +
  • +
+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/issues.html b/software/CSDataQuick/docs/issues.html new file mode 100644 index 0000000..50825f5 --- /dev/null +++ b/software/CSDataQuick/docs/issues.html @@ -0,0 +1,86 @@ + + + + + + + Problems and Fixes | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Problems and Fixes

+ + +
+

This is a collection of known problems, and hopfully their fixes.

+
    +
  • QtQuick could perform badly or not at all on systems without decent OpenGL driver. This is also true through X11 remote session or Windows remote desktop. For Qt 5.7 and above, the workaround is to use software render.
    $ export QMLSCENE_DEVICE=softwarecontext
    +

    For Qt 5.6, this software render plugin has to be installed manually.

    +
    $ git clone https://github.com/qt/qtdeclarative-render2d.git
    +$ cd qtdeclarative-render2d
    +$ git checkout 5.6.0
    +$ qmake
    +$ [sudo] make install
    +
  • +
+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/new-dataengine.html b/software/CSDataQuick/docs/new-dataengine.html new file mode 100644 index 0000000..0cbd08a --- /dev/null +++ b/software/CSDataQuick/docs/new-dataengine.html @@ -0,0 +1,76 @@ + + + + + + + Add a new data engine | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Add a new data engine

+ + +
+

Writting a new data engine is bascilly to derive from QCSDataEngine and implement the pure virtual methods. Please refer to the builtin simulation data engine for example.

+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/new-parser.html b/software/CSDataQuick/docs/new-parser.html new file mode 100644 index 0000000..936212c --- /dev/null +++ b/software/CSDataQuick/docs/new-parser.html @@ -0,0 +1,76 @@ + + + + + + + Add a new display file parser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Add a new display file parser

+ + +
+

Writting a new display file parser is bascilly to derive from QCSParser and implement the pure virtual methods.

+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/new-visual-item.html b/software/CSDataQuick/docs/new-visual-item.html new file mode 100644 index 0000000..b6e8e62 --- /dev/null +++ b/software/CSDataQuick/docs/new-visual-item.html @@ -0,0 +1,167 @@ + + + + + + + Add a new visual item | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Add a new visual item

+ + +
+

Suppose you want to have a new edit control, which postpones writting its value to the data engine until an apply button is clicked.

+ +

Create the visual item

+

This new item fits to the controls category of visual items. So we start with CSControl as the root item, and call it ApplyEdit.qml.

+
import QtQuick 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.4
+import CSDataQuick.Components 1.0
+
+CSControl {
+    id: root
+    width: 150
+    height: 20
+}
+

The TextInput and apply Button could be inside a horizontal RowLayout. The TextInput expands horizontally to take all free space.

+
RowLayout {
+    anchors.fill: parent
+
+    TextInput {
+        id: input
+        Layout.fillWidth: true
+    }
+    Button {
+        id: apply
+        text: 'Apply'
+    }
+}
+

And then in the Button clicked signal handler, we set the input value to the data engine.

+
Button {
+    id: apply
+    text: 'Apply'
+    onClicked: csdata.setValue(input.text)
+}
+

Now in you can simply use it like this elsewhere

+
ApplyEdit {
+    source: 'ao'
+}
+ +

Add it to the components library

+

This new item is automatically available if you put it in your current directory. This is very convenient for prototyping and testing. Eventually you might decide it is ready to be shared by creating a components library, e.g. AwesomeItems.

+

First you create a directory named AwesomeItems, and place the ApplyEdit.qml file inside. Still inside the directory, create a file qmldir with the following content

+
module AwesomeItems
+
+ApplyEdit  1.0 ApplyEdit.qml
+

By default the qml serarch path is limited to builtin paths. Extra paths can be incuded by setting QML_IMPORT_PATH environment variable. Suppose the full path is /your/modules/repository/AwesomeItems, then QML_IMPORT_PATH will be the containing path.

+
export QML_IMPORT_PATH=/your/modules/repository
+

Now you can access AwesomeItems library as

+
import AwesomeItems 1.0
+
+ApplyEdit {
+    source: 'ao'
+}
+ +

Make it available in designer

+

Create a directory designer under AwesomeItems, and within a file awesomeitems.metainfo with the following content:

+
MetaInfo {
+    Type {
+        name: "AwesomeItems.ApplyEdit"
+
+        ItemLibraryEntry {
+            name: "ApplyEdit"
+            category: "AwesomeItems"
+            version: "1.0"
+            requiredImport: "AwesomeItems"
+        }
+    }
+}
+

The property editor panel could also be customized, create a file ApplyEditSpecifics.qml.

+
import QtQuick 2.1
+import CSDataQuick.Components.designer 1.0
+
+Column {
+    anchors.left: parent.left
+    anchors.right: parent.right
+
+    DataSourceSection {}
+    ColorSection {}
+    DynamicAttributeSection {}
+}
+ +

Further

+

The item is only made for demonstrating the process. To use it for real, there are still improvements to done. For example the text input and button background color, the input text color are not connected to the CSControl attributes, and the data value is not updated to text input field.

+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/programs.html b/software/CSDataQuick/docs/programs.html new file mode 100644 index 0000000..4533200 --- /dev/null +++ b/software/CSDataQuick/docs/programs.html @@ -0,0 +1,190 @@ + + + + + + + Viewer and Builder | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Viewer and Builder

+ + +
+ +

Viewer

+

Viewer parses an MEDM ASCII Display List(ADL) file, EDM (EDL) file or caQtDM (UI) file and creates an equivalent display using CSDataQuick. Of course it accepts QML file as well. It can be a drop-in replacement to MEDM, EDM and caQtDM in execute mode.

+

This document contains texts from MEDM Reference Manual when applicable.

+ +

Command Line

+
+ + + + + + + + + + + + +
OptionMeaning
-h, --helpDisplays usage.
-v, --versionDisplays version information.
-x, --executeOpen in execute mode. (This is the default.)
-c, --convertOpen in conversion mode. The display list files are parsed and converted to QML files with the same base name in the current directory.
-e, --editOpen in editor mode. (Not implemented.)
-l, --localDo not transfer operation to an existing viewer, and do not allow transfer of operation from any other viewer. (This is the default.)
-a, --attachTransfer operation to an existing viewer if there is one which is accepting transfers, or have this one assume responsibility for accepting transfers if there is not one. This can lead to more efficient operation and is appropriate if many screens are running on one display, such as in a control room. You must give the first viewer time to establish itself before attempting to attach to it.
-cleanupIgnore any existing viewer and take over responsibility for accepting remote transfers.
--noMsgDo not create the main window.
-m, --macro name=valueApply macro substitution to replace occurences of $(name) with value in all command-line specified display list files.
--dg, --displayGeometrySpecify the geometry (location and size) of the display window. The geometry syntax is similar to the X Windows geometry option.
+

Start up two displays:

+
$ csdq_viewer adc.adl bded.qml &
+

Start up in execute mode, performing macro substitution of all occurrences of $(a) and $(c) in the display file, xyz.adl:

+
$ csdq_viewer -x -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:

+
$ csdq_viewer -x -dg 100x100+100+100 abc.adl &
+ +

Context Popup Menu

+

Context popup menu is invoked by mouse right click anywhere on the background.

+
+ + + + + + + + +
MenuFunction
PrintPrints the display.
ReloadReopen the display.
CloseClose the display.
Main WindowPops up the main windows. This is useful if you canno find it.
Dsiplay ListBrings up a dialog box with a list of the file names of all the displays currently open. The displays are grouped by file names. And the same file name with different macro substitution will be displayed under the same group. Click on the macro substitution will raise the display.
Data EnginesBrings up a dialog box with a table of CSData objects created by all displays.
ExecuteSubmenu configured by MEDM_EXEC_LIST.
+ +

Execute Menu

+

This menu is configured by MEDM_EXEC_LIST environment variable. This variable is of the form:

+
name1; program1[[:name2; program2]...]
+

The items between colons represent each menu item. All of the characters up to the first semi-colon in each item are the text that appears on the menu. The remaining characters represent the system command that will be executed when the item is selected. Note that on UNIX, if the command is not run in the background (using & at the end), it will hold up MEDM until it finishes. On WIN32, if a colon is followed by a backslash (\), then it will be assumed that it is part of a path name and it will not be counted as a menu-item delimiter.

+

The system command can include the following special characters:

+
+ + + + +
&AThe full path name of the display file associated with the display.
&TThe short name of the file. (This should be the same as the title of the display.)
&XThe X window id of the display screen. This can be used with commands like Xwd, for example.
&?Truncate the command at this point and prompt the user to finish or otherwise edit the command.
+ +

Environment Variables

+
+ + + +
VariableUsage
    +
  • EPICS_DISPLAY_PATH
  • +
  • EDMDATAFILES
  • +
  • CAQTDM_DISPLAY_PATH
  • +
  • QML_DISPLAY_PATH
  • +
+
A colon-separated (semi-colon-separated on WIN32) list of directories in which to look for display files that do not have absolute path names or names that begin with "./" or "../". Only looks in the current working directory if not specified.
MEDM_EXEC_LISTA list of commands for the Execute-Mode Popup Menu. See the Execute Menu for the format.
+ +

Differences to MEDM

+
    +
  • Command line options
      +
    • -cmap, -displayFont and -bigMousePointer are not applicable.
    • +
    • -dg option can only appear once before display files. This makes it effectly only applicable to one display file.
    • +
    +
  • +
  • Resizing displays. The contents of the display are not scaled at all.
  • +
  • Execute Menu. The &P special character is not handled.
  • +
  • Drag-And-Drop. It does not support drag-and-drop. But the CSData source can be copied via context menu Copy Source.
  • +
+ +

Differences to EDM

+
    +
  • Command line options
      +
    • -x, -m options are supported.
    • +
    • Use -attach in place of -server.
    • +
    • Any other options are not supported.
    • +
    +
  • +
  • Pv types CALC and LOG are not supported.
  • +
  • Dynamic colors are not supported.
  • +
+ +

Differences to caQtDM

+
    +
  • Widgets not supported: caCalc, caClock, caDoubleTabWidget, caTable, caMimeDisplay, caWaterfallPlot
  • +
  • Widgets with equivalents but difficult to substitute automatically: caCamera -> CSADImage, caScan2D -> CS2DSscan
  • +
  • Connection (signal/slot) definition not supported. But this can easily achieved in QML.
  • +
+ +

builder

+

builder is a program to build one-time displays. User enters the CSData source and choose the visual item type.

+

The created items will be organised into a grid.

+

+

See also Execute Menu.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdata-members.html b/software/CSDataQuick/docs/qcsdata-members.html new file mode 100644 index 0000000..3c60860 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdata-members.html @@ -0,0 +1,186 @@ + + + + + + + List of All Members for QCSData | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSData

+

This is the complete list of members for QCSData, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdata.html b/software/CSDataQuick/docs/qcsdata.html new file mode 100644 index 0000000..a2429b1 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdata.html @@ -0,0 +1,402 @@ + + + + + + + QCSData Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSData Class

+ +

This class represents control system data. More...

+ +
+
Header: #include <QCSData> +
Instantiated By: CSData
Inherits: QObject
+ +

Public Types

+
+ + + +
enum AccessFlag { NoAccess, ReadAccess, WriteAccess }
flags AccessFlags
enum FieldType { Invalid, String, Enum, Char, ..., Double }
+ +

Properties

+
+ +
+
+
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + + + + + + + + + + + + + + + + + + +
QCSData(QObject *parent = Q_NULLPTR)
~QCSData()
int accessRight() const
QCSDataAlarm *alarm()
bool connected() const
qulonglong count() const
QVariantMap extraProperties() const
QVariant extraProperty(const QString name)
FieldType fieldType() const
QString host() const
int precision() const
QCSDataRange *range()
void setExtraProperties(const QVariantMap properties)
void setSource(const QString source)
QString source() const
QStringList stateStrings() const
QDateTime timeStamp() const
QString units() const
QVariant value() const
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Signals

+
+ + + + + + + + + + + + + +
void accessRightChanged()
void alarmChanged()
void connectionChanged()
void countChanged()
void fieldTypeChanged()
void hostChanged()
void precisionChanged()
void rangeChanged()
void sourceChanged()
void stateStringsChanged()
void timeStampChanged()
void unitsChanged()
void valueChanged()
+
    +
  • 2 signals inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

This class represents control system data.

+

The class is modeled after the EPICS process variable for control system data, which normally is a scalar or array value with describing meta data. In this class these are all represented as properties.

+

It is the source property that connects it to the control system, i.e. data engines. The data engine manages the conntions to the control system, populates the data properties.

+
+

See also QCSDataEngine.

+ +
+

Member Type Documentation

+ +

enum QCSData::AccessFlag
flags QCSData::AccessFlags

+
+ + + +
ConstantValueDescription
QCSData::NoAccess0x00No access to the data.
QCSData::ReadAccess0x01Right to read.
QCSData::WriteAccess0x02Right to write.
+

The AccessFlags type is a typedef for QFlags<AccessFlag>. It stores an OR combination of AccessFlag values.

+ + +

enum QCSData::FieldType

+
+ + + + + + + + + +
ConstantValueDescription
QCSData::Invalid-1Invalid or disconnected data object
QCSData::String0String of 8bit charactors.
QCSData::Enum1An enumeration of choices
QCSData::Char28 bit char
QCSData::Short316 bit integer number
QCSData::Integer432 bit integer number
QCSData::Long564 bit integer number
QCSData::Float632 bit float number
QCSData::Double764 but float number
+ +
+
+

Property Documentation

+ +

accessRight : const int

+

This property holds the access right of the data.

+

This is a bitwise or of QCSData::AccessFlag.

+

Access functions:

+
+ +
int accessRight() const
+

Notifier signal:

+
+ +
void accessRightChanged()
+ + +

alarm : QCSDataAlarm * const

+

This property holds the alarm information.

+

Access functions:

+
+ +
QCSDataAlarm *alarm()
+

Notifier signal:

+
+ +
void alarmChanged()
+ + +

connected : const bool

+

This property indicates wether the data is connected to a valid source.

+

Access functions:

+
+ +
bool connected() const
+

Notifier signal:

+
+ +
void connectionChanged()
+ + +

count : const qulonglong

+

This property holds the number of elements of the data.

+

Access functions:

+
+ +
qulonglong count() const
+

Notifier signal:

+
+ +
void countChanged()
+ + +

extraProperties : QVariantMap

+

This property holds any other properties specific to this instance.

+

Access functions:

+
+ + +
QVariantMap extraProperties() const
void setExtraProperties(const QVariantMap properties)
+ + +

fieldType : const FieldType

+

This property holds native type of the data.

+

Access functions:

+
+ +
FieldType fieldType() const
+

Notifier signal:

+
+ +
void fieldTypeChanged()
+ + +

host : const QString

+

This property holds the host name where the data source exists.

+

Access functions:

+
+ +
QString host() const
+

Notifier signal:

+
+ +
void hostChanged()
+ + +

precision : const int

+

Precision of the data in case of float or double type.

+

Access functions:

+
+ +
int precision() const
+

Notifier signal:

+
+ +
void precisionChanged()
+ + +

range : QCSDataRange * const

+

This property holds the limits information.

+

Access functions:

+
+ +
QCSDataRange *range()
+

Notifier signal:

+
+ +
void rangeChanged()
+

See also QCSDataRange.

+ + +

source : QString

+

This property holds the data's source name.

+

The source name is of form "[engine://]data_id". engine:// selects the data engine where this data comes. If it is omitted, the default data engine is selected, which is EPICS channel access engine. data_id is the unique id to the data inside the selected data engine.

+

"ca://my_pv" or simply "my_pv" both specify the data comes from process variable my_pv.

+

Note: If empty source name is assigned, the data will be be disconnected from the data engine if connected, and reset to its initial state.

Access functions:

+
+ + +
QString source() const
void setSource(const QString source)
+

Notifier signal:

+
+ +
void sourceChanged()
+ + +

stateStrings : const QStringList

+

This property holds the string representation of data's enumerated states.

+

Access functions:

+
+ +
QStringList stateStrings() const
+

Notifier signal:

+
+ +
void stateStringsChanged()
+ + +

timeStamp : const QDateTime

+

This property holds the timestamp of data's last change.

+

Access functions:

+
+ +
QDateTime timeStamp() const
+

Notifier signal:

+
+ +
void timeStampChanged()
+ + +

units : const QString

+

This property holds the physical meaning of the data.

+

Access functions:

+
+ +
QString units() const
+

Notifier signal:

+
+ +
void unitsChanged()
+ + +

value : const QVariant

+

This property holds the value of the data.

+

The value can of scalar, array type or anything that the underlying data engine provides.

+

Access functions:

+
+ +
QVariant value() const
+

Notifier signal:

+
+ +
void valueChanged()
+ +
+
+

Member Function Documentation

+ +

QCSData::QCSData(QObject *parent = Q_NULLPTR)

+

Construct a data object with the given parent.

+ + +

QCSData::~QCSData()

+

Delete the data object and disconnect from data engine.

+ + +

QVariant QCSData::extraProperty(const QString name)

+

Gets a specific extra property name.

+

See also QCSData::extraProperties.

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataalarm-members.html b/software/CSDataQuick/docs/qcsdataalarm-members.html new file mode 100644 index 0000000..ee30f0b --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataalarm-members.html @@ -0,0 +1,139 @@ + + + + + + + List of All Members for QCSDataAlarm | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataAlarm

+

This is the complete list of members for QCSDataAlarm, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataalarm.html b/software/CSDataQuick/docs/qcsdataalarm.html new file mode 100644 index 0000000..b0d2c6b --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataalarm.html @@ -0,0 +1,189 @@ + + + + + + + QCSDataAlarm Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataAlarm Class

+ +

The CSDataAlarm class provides alarm information about the data. More...

+ +
+
Header: #include <QCSDataAlarm> +
Instantiated By: CSDataAlarm
Inherits: QObject
+ +

Public Types

+
+ +
enum Severity { NoAlarm, MinorAlarm, MajorAlarm, InvalidAlarm }
+ +

Properties

+ +
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + +
QCSDataAlarm(QObject *parent = Q_NULLPTR)
void setAlarm(Severity severity, int status, const QString message)
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Signals

+
+ +
void alarmChanged()
+
    +
  • 2 signals inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

The CSDataAlarm class provides alarm information about the data.

+
+ +
+

Member Type Documentation

+ +

enum QCSDataAlarm::Severity

+
+ + + + +
ConstantValueDescription
QCSDataAlarm::NoAlarm0Normal state
QCSDataAlarm::MinorAlarm1Lowest alarm severity
QCSDataAlarm::MajorAlarm2Highest alarm severity
QCSDataAlarm::InvalidAlarm3Invalid data or no communication.
+ +
+
+

Property Documentation

+ +

message : const QString

+

This property holds the alarm message.

+

Notifier signal:

+
+ +
void alarmChanged()
+ + +

severity : const Severity

+

This property holds the alarm severity.

+

Notifier signal:

+
+ +
void alarmChanged()
+

See also QCSDataAlarm::Severity.

+ + +

status : const int

+

This property holds the alarm status.

+

The actual meaning depends on data engine.

+

Notifier signal:

+
+ +
void alarmChanged()
+ +
+
+

Member Function Documentation

+ +

QCSDataAlarm::QCSDataAlarm(QObject *parent = Q_NULLPTR)

+

Construct alarm information object with the given parent.

+ + +

void QCSDataAlarm::setAlarm(Severity severity, int status, const QString message)

+

Set the alarm severity, status and message.

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataengine-members.html b/software/CSDataQuick/docs/qcsdataengine-members.html new file mode 100644 index 0000000..a91e299 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataengine-members.html @@ -0,0 +1,144 @@ + + + + + + + List of All Members for QCSDataEngine | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataEngine

+

This is the complete list of members for QCSDataEngine, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataengine.html b/software/CSDataQuick/docs/qcsdataengine.html new file mode 100644 index 0000000..7e3e5a0 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataengine.html @@ -0,0 +1,196 @@ + + + + + + + QCSDataEngine Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataEngine Class

+ +

The QCSDataEngine class defines the interface of data engine. More...

+ +
+
Header: #include <QCSDataEngine> +
Inherits: QObject
Inherited By:

QCSDataEngineCA, QCSDataEngineLocal, and QCSDataEngineSim

+
+ +

Properties

+ +
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + + + + + + + +
QCSDataEngine(QObject *parent)
virtual ~QCSDataEngine()
virtual ObjectModel *allData() = 0
virtual void close(QCSData *data) = 0
virtual void create(QCSData *data) = 0
virtual QString description() = 0
virtual QString name() = 0
virtual void setValue(QCSData *data, const QVariant value) = 0
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Signals

+
+ +
void allDataChanged()
+
    +
  • 2 signals inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

The QCSDataEngine class defines the interface of data engine.

+

This is the base class for data engines, which define the interface to create, delete and interact with QCSData objects.

+

Data engines are loaded as plugins on demand and provide zero, one or more data sources which are identified by name.

+
+ +
+

Property Documentation

+ +

allData : ObjectModel * const

+

ObjectModel that contains all QCSData objects created by this data engine.

+

Access functions:

+
+ +
virtual ObjectModel *allData() = 0
+

Notifier signal:

+
+ +
void allDataChanged()
+ + +

description : const QString

+

Descriptive text of this data engine.

+

Access functions:

+
+ +
virtual QString description() = 0
+ + +

name : const QString

+

Name of the data engine as used in the data source scheme.

+

Access functions:

+
+ +
virtual QString name() = 0
+

See also QCSData::source.

+ +
+
+

Member Function Documentation

+ +

QCSDataEngine::QCSDataEngine(QObject *parent)

+

Default constructs an instance of QCSDataEngine.

+ +

[virtual] QCSDataEngine::~QCSDataEngine()

+

Destroys the instance of QCSDataEngine. The destructor is virtual.

+ +

[pure virtual] void QCSDataEngine::close(QCSData *data)

+

Closes the data object's connection to the source.

+

The data engine must implements this to release the connection to the source and remove it from allData.

+ + +

[pure virtual] void QCSDataEngine::create(QCSData *data)

+

Connects the source to the data object.

+

The data engine must implements this to check whether the data source is valid, and if so add it to allData. The data engine possibly retrieves the information from the source and populates data properties.

+ + +

[pure virtual] void QCSDataEngine::setValue(QCSData *data, const QVariant value)

+

Sets a new value for the data's source.

+

The data engine must implements this to accept requests to change the data source's value.

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataengineca-members.html b/software/CSDataQuick/docs/qcsdataengineca-members.html new file mode 100644 index 0000000..491d970 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataengineca-members.html @@ -0,0 +1,150 @@ + + + + + + + List of All Members for QCSDataEngineCA | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataEngineCA

+

This is the complete list of members for QCSDataEngineCA, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataengineca.html b/software/CSDataQuick/docs/qcsdataengineca.html new file mode 100644 index 0000000..8e44b02 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataengineca.html @@ -0,0 +1,169 @@ + + + + + + + QCSDataEngineCA Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataEngineCA Class

+ +

Connect to EPICS process variables (PV) via Channel Access (CA). More...

+ +
+
Header: #include <QCSDataEngineCA> +
Inherits: QCSDataEngine
+ +

Public Functions

+
+ + +
QCSDataEngineCA(QObject *parent = Q_NULLPTR)
virtual ~QCSDataEngineCA()
+ +

Reimplemented Public Functions

+
+ + + + + + +
virtual ObjectModel *allData()
virtual void close(QCSData *data)
virtual void create(QCSData *data)
virtual QString description()
virtual QString name()
virtual void setValue(QCSData *data, const QVariant value)
+ +

Additional Inherited Members

+ + + +
+

Detailed Description

+

Connect to EPICS process variables (PV) via Channel Access (CA).

+

This data engine source has a ca:// scheme, followed by the PV name. And since this is the default data engine, the ca:// scheme can be omitted.

+

If the PV value is of array type, the data type might be up casted to either int or double. This is because the qml engine transparent handles QVector<int> and QVector<double> Sequence Type to JavaScript Array. To always return the native data type, set the extraProperties:

+
QCSData data = new QCSData();
+data->setExtraProperty("UseNativeType", true);
+data->setSource("my_array_pv");
+

Note: it creates a preemptive channel access context, but anyway has a 100ms timer to flush the io to improve the IO efficiency.

+
+ +
+

Member Function Documentation

+ +

QCSDataEngineCA::QCSDataEngineCA(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of QCSDataEngineCA.

+ +

[virtual] QCSDataEngineCA::~QCSDataEngineCA()

+

Destroys the instance of QCSDataEngineCA. The destructor is virtual.

+ +

[virtual] ObjectModel *QCSDataEngineCA::allData()

+

Reimplemented from QCSDataEngine::allData().

+ + +

[virtual] void QCSDataEngineCA::close(QCSData *data)

+

Reimplemented from QCSDataEngine::close().

+ + +

[virtual] void QCSDataEngineCA::create(QCSData *data)

+

Reimplemented from QCSDataEngine::create().

+

Creates the EPICS channel.

+

It calls ca_create_channel with a connection callback. In the callback, it calls ca_create_subscription to monitor value, alarm and property changes.

+ + +

[virtual] QString QCSDataEngineCA::description()

+

Reimplemented from QCSDataEngine::description().

+ + +

[virtual] QString QCSDataEngineCA::name()

+

Reimplemented from QCSDataEngine::name().

+

Returns the source scheme ca.

+ + +

[virtual] void QCSDataEngineCA::setValue(QCSData *data, const QVariant value)

+

Reimplemented from QCSDataEngine::setValue().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginelocal-members.html b/software/CSDataQuick/docs/qcsdataenginelocal-members.html new file mode 100644 index 0000000..a0cdce0 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginelocal-members.html @@ -0,0 +1,150 @@ + + + + + + + List of All Members for QCSDataEngineLocal | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataEngineLocal

+

This is the complete list of members for QCSDataEngineLocal, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginelocal.html b/software/CSDataQuick/docs/qcsdataenginelocal.html new file mode 100644 index 0000000..ca3dcb8 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginelocal.html @@ -0,0 +1,174 @@ + + + + + + + QCSDataEngineLocal Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataEngineLocal Class

+ +

User configurable data. More...

+ +
+
Header: #include <QCSDataEngineLocal> +
Inherits: QCSDataEngine
+ +

Public Functions

+
+ + +
QCSDataEngineLocal(QObject *parent = Q_NULLPTR)
virtual ~QCSDataEngineLocal()
+ +

Reimplemented Public Functions

+
+ + + + + + +
virtual ObjectModel *allData()
virtual void close(QCSData *data)
virtual void create(QCSData *data)
virtual QString description()
virtual QString name()
virtual void setValue(QCSData *data, const QVariant value)
+ +

Additional Inherited Members

+ + + +
+

Detailed Description

+

User configurable data.

+

This data engine source has the form loc://<name>[.{"field":"value"}]. The trailing part after . is a JSON string. It could be used to configure the data and has the following fields:

+
+ + + + + +
FieldDescription
typeData type. Any of enum, string, int and double.
valueInitial value.
enumsArray of state strings for enum type.
precisionPrecision of a double typed value.
+

The data is not signaled as connected until it gets configured. If already configured, the second configurtion takes no effect.

+
loc://real.{"type": "double", "value": 3.14, "precision": 2}
+loc://integer.{"type": "int", "value": 3}
+loc://string.{"type": "string", "value": "string message"}
+loc://enum.{"type": "enum", "enums": ["off", "on"], "value": 1}
+
+ +
+

Member Function Documentation

+ +

QCSDataEngineLocal::QCSDataEngineLocal(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of QCSDataEngineLocal.

+ +

[virtual] QCSDataEngineLocal::~QCSDataEngineLocal()

+

Destroys the instance of QCSDataEngineLocal. The destructor is virtual.

+ +

[virtual] ObjectModel *QCSDataEngineLocal::allData()

+

Reimplemented from QCSDataEngine::allData().

+ + +

[virtual] void QCSDataEngineLocal::close(QCSData *data)

+

Reimplemented from QCSDataEngine::close().

+ + +

[virtual] void QCSDataEngineLocal::create(QCSData *data)

+

Reimplemented from QCSDataEngine::create().

+ + +

[virtual] QString QCSDataEngineLocal::description()

+

Reimplemented from QCSDataEngine::description().

+ + +

[virtual] QString QCSDataEngineLocal::name()

+

Reimplemented from QCSDataEngine::name().

+

Returns the source scheme loc.

+ + +

[virtual] void QCSDataEngineLocal::setValue(QCSData *data, const QVariant value)

+

Reimplemented from QCSDataEngine::setValue().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginemanager-members.html b/software/CSDataQuick/docs/qcsdataenginemanager-members.html new file mode 100644 index 0000000..0ec3885 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginemanager-members.html @@ -0,0 +1,139 @@ + + + + + + + List of All Members for QCSDataEngineManager | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataEngineManager

+

This is the complete list of members for QCSDataEngineManager, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginemanager.html b/software/CSDataQuick/docs/qcsdataenginemanager.html new file mode 100644 index 0000000..3b6610c --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginemanager.html @@ -0,0 +1,156 @@ + + + + + + + QCSDataEngineManager Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataEngineManager Class

+ +

Singleton object to load/query data engines. More...

+ +
+
Header: #include <QCSDataEngineManager> +
Inherits: QObject
+ +

Properties

+
    +
  • engines : QList<QObject *> const
  • +
+
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + + +
~QCSDataEngineManager()
QCSDataEngine *engineForName(QString source) const
QList<QObject *> engines() const
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Static Public Members

+
+ +
QCSDataEngineManager *instance()
+
    +
  • 10 static public members inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Singleton object to load/query data engines.

+

The engine manager loads all data engine plugins in path ../plugins/csdataengine relative to the library itself.

+
+ +
+

Property Documentation

+ +

engines : QList<QObject *> const

+

List of all available data engines.

+

Access functions:

+
+ +
QList<QObject *> engines() const
+ +
+
+

Member Function Documentation

+ +

QCSDataEngineManager::~QCSDataEngineManager()

+

Destroys the instance of QCSDataEngineManager.

+ +

QCSDataEngine *QCSDataEngineManager::engineForName(QString source) const

+

Returns the data engine registered for the scheme of source. If no scheme specified, the default engine is returned, i.e. "ca".

+ + +

[static] QCSDataEngineManager *QCSDataEngineManager::instance()

+

Returns the singleton instance

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginesim-members.html b/software/CSDataQuick/docs/qcsdataenginesim-members.html new file mode 100644 index 0000000..779ea85 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginesim-members.html @@ -0,0 +1,150 @@ + + + + + + + List of All Members for QCSDataEngineSim | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataEngineSim

+

This is the complete list of members for QCSDataEngineSim, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdataenginesim.html b/software/CSDataQuick/docs/qcsdataenginesim.html new file mode 100644 index 0000000..9ea47f1 --- /dev/null +++ b/software/CSDataQuick/docs/qcsdataenginesim.html @@ -0,0 +1,169 @@ + + + + + + + QCSDataEngineSim Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataEngineSim Class

+ +

Simulation data produced by math functions. More...

+ +
+
Header: #include <QCSDataEngineSim> +
Inherits: QCSDataEngine
+ +

Public Functions

+
+ + +
QCSDataEngineSim(QObject *parent = Q_NULLPTR)
virtual ~QCSDataEngineSim()
+ +

Reimplemented Public Functions

+
+ + + + + + +
virtual ObjectModel *allData()
virtual void close(QCSData *data)
virtual void create(QCSData *data)
virtual QString description()
virtual QString name()
virtual void setValue(QCSData *data, const QVariant value)
+ +

Additional Inherited Members

+ + + +
+

Detailed Description

+

Simulation data produced by math functions.

+

This data engine source has a sim:// scheme, followed by the data name. The following data names are available:

+
+ + + + + +
Data nameData typeData CountUpdateDescription
randomdouble11 Hzradom number between 0.0 and 1.0.
sindouble11 Hzsinous function of an interal integer counter.
wavedouble201 Hzsinous of an integer array, in which the first element is the internal counter.
enumenum1PassiveEnum value with two states, OFF and ON.
+
+ +
+

Member Function Documentation

+ +

QCSDataEngineSim::QCSDataEngineSim(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of QCSDataEngineSim.

+ +

[virtual] QCSDataEngineSim::~QCSDataEngineSim()

+

Destroys the instance of QCSDataEngineSim. The destructor is virtual.

+ +

[virtual] ObjectModel *QCSDataEngineSim::allData()

+

Reimplemented from QCSDataEngine::allData().

+ + +

[virtual] void QCSDataEngineSim::close(QCSData *data)

+

Reimplemented from QCSDataEngine::close().

+ + +

[virtual] void QCSDataEngineSim::create(QCSData *data)

+

Reimplemented from QCSDataEngine::create().

+ + +

[virtual] QString QCSDataEngineSim::description()

+

Reimplemented from QCSDataEngine::description().

+ + +

[virtual] QString QCSDataEngineSim::name()

+

Reimplemented from QCSDataEngine::name().

+

Returns the source scheme sim.

+ + +

[virtual] void QCSDataEngineSim::setValue(QCSData *data, const QVariant value)

+

Reimplemented from QCSDataEngine::setValue().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdatarange-members.html b/software/CSDataQuick/docs/qcsdatarange-members.html new file mode 100644 index 0000000..65cbe3b --- /dev/null +++ b/software/CSDataQuick/docs/qcsdatarange-members.html @@ -0,0 +1,138 @@ + + + + + + + List of All Members for QCSDataRange | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSDataRange

+

This is the complete list of members for QCSDataRange, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsdatarange.html b/software/CSDataQuick/docs/qcsdatarange.html new file mode 100644 index 0000000..5760eda --- /dev/null +++ b/software/CSDataQuick/docs/qcsdatarange.html @@ -0,0 +1,160 @@ + + + + + + + QCSDataRange Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSDataRange Class

+ +

This class provides limits information about the data. More...

+ +
+
Header: #include <QCSDataRange> +
Instantiated By: CSDataRange
Inherits: QObject
+ +

Properties

+ +
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + +
QCSDataRange(QObject *parent = Q_NULLPTR)
void setRange(double lower, double upper)
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Signals

+
+ +
void rangeChanged()
+
    +
  • 2 signals inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

This class provides limits information about the data.

+
+ +
+

Property Documentation

+ +

lower : const double

+

This property holds the lower limit.

+

Notifier signal:

+
+ +
void rangeChanged()
+ + +

upper : const double

+

This property holds the upper limit.

+

Notifier signal:

+
+ +
void rangeChanged()
+ +
+
+

Member Function Documentation

+ +

QCSDataRange::QCSDataRange(QObject *parent = Q_NULLPTR)

+

Construct a range object with the given parent.

+ + +

void QCSDataRange::setRange(double lower, double upper)

+

Set the lower and upper limits .

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsparser-members.html b/software/CSDataQuick/docs/qcsparser-members.html new file mode 100644 index 0000000..edc830b --- /dev/null +++ b/software/CSDataQuick/docs/qcsparser-members.html @@ -0,0 +1,140 @@ + + + + + + + List of All Members for QCSParser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSParser

+

This is the complete list of members for QCSParser, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsparser.html b/software/CSDataQuick/docs/qcsparser.html new file mode 100644 index 0000000..09984df --- /dev/null +++ b/software/CSDataQuick/docs/qcsparser.html @@ -0,0 +1,161 @@ + + + + + + + QCSParser Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSParser Class

+ +

The QCSParser class defines the interface of display file parser. More...

+ +
+
Header: #include <QCSParser> +
Inherits: QObject
Inherited By:

ADLParser, EDLParser, QMLParser, and UIParser

+
+ +

Properties

+ +
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + + + + +
QCSParser(QObject *parent)
virtual ~QCSParser()
virtual QString description() = 0
virtual QString extension() = 0
virtual QString parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false) = 0
+
    +
  • 32 public functions inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

The QCSParser class defines the interface of display file parser.

+

This is the base class for display file parsers, which parses various display files and output equivalent QML files.

+

Pasers are loaded as plugins on demand and parse zero, one or more types of file.

+
+ +
+

Property Documentation

+ +

description : const QString

+

Descriptive text of this file parser.

+

Access functions:

+
+ +
virtual QString description() = 0
+ + +

extension : const QString

+

File extension supported by this parser.

+

Access functions:

+
+ +
virtual QString extension() = 0
+ +
+
+

Member Function Documentation

+ +

QCSParser::QCSParser(QObject *parent)

+

Default constructs an instance of QCSParser.

+ +

[virtual] QCSParser::~QCSParser()

+

Destroys the instance of QCSParser. The destructor is virtual.

+ +

[pure virtual] QString QCSParser::parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial = false)

+

Parse the given display file.

+

The file parser must implements this to parse the given filename with macros substitution. The returned QML representation should be a standard QML source, unless partial is specified in which only the item definitions are returned excluding import statements and root item.

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsparsermanager-members.html b/software/CSDataQuick/docs/qcsparsermanager-members.html new file mode 100644 index 0000000..39cc2c3 --- /dev/null +++ b/software/CSDataQuick/docs/qcsparsermanager-members.html @@ -0,0 +1,138 @@ + + + + + + + List of All Members for QCSParserManager | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QCSParserManager

+

This is the complete list of members for QCSParserManager, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qcsparsermanager.html b/software/CSDataQuick/docs/qcsparsermanager.html new file mode 100644 index 0000000..ab94464 --- /dev/null +++ b/software/CSDataQuick/docs/qcsparsermanager.html @@ -0,0 +1,151 @@ + + + + + + + QCSParserManager Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QCSParserManager Class

+ +

Singleton object to load/query file parsers. More...

+ +
+
Header: #include <QCSParserManager> +
Inherits: QObject
+ +

Properties

+
    +
  • parsers : QList<QCSParser *> const
  • +
+
    +
  • 1 property inherited from QObject
  • +
+ +

Public Functions

+
+ + +
~QCSParserManager()
QCSParser *parserForExtension(QString extension) const
+
    +
  • 32 public functions inherited from QObject
  • +
+ +

Static Public Members

+
+ +
QCSParserManager *instance()
+
    +
  • 10 static public members inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Singleton object to load/query file parsers.

+

The parser manager loads all parser plugins in path ../plugins/parser relative to the library itself.

+
+ +
+

Property Documentation

+ +

parsers : QList<QCSParser *> const

+

List of display file parsers.

+ +
+
+

Member Function Documentation

+ +

QCSParserManager::~QCSParserManager()

+

Destroys the instance of QCSParserManager.

+ +

[static] QCSParserManager *QCSParserManager::instance()

+

Returns the singleton instance

+ + +

QCSParser *QCSParserManager::parserForExtension(QString extension) const

+

Returns the file parser registered for the file extension.

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition-members.html new file mode 100644 index 0000000..9eafacd --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for ArrowPosition | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for ArrowPosition

+

This is the complete list of members for ArrowPosition, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition.html b/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition.html new file mode 100644 index 0000000..df0685c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-arrowposition.html @@ -0,0 +1,112 @@ + + + + + + + ArrowPosition QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

ArrowPosition QML Type

+ + +

Enums of where the arrow is placed. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+ArrowPosition : enumeration

+
    +
  • ArrowPosition.None
  • +
  • ArrowPosition.Start
  • +
  • ArrowPosition.End
  • +
  • ArrowPosition.Both
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-baseitem-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-baseitem-members.html new file mode 100644 index 0000000..8f212cb --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-baseitem-members.html @@ -0,0 +1,81 @@ + + + + + + + List of All Members for BaseItem | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for BaseItem

+

This is the complete list of members for BaseItem, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-baseitem.html b/software/CSDataQuick/docs/qml-csdataquick-components-baseitem.html new file mode 100644 index 0000000..b9899d5 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-baseitem.html @@ -0,0 +1,182 @@ + + + + + + + BaseItem QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

BaseItem QML Type

+ + +

Base item which all visual items derive. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherited By:

CS2DSscan, CSADImage, CSCartesianPlot, CSComposite, CSControl, CSGraphics, CSMJPEGVideo, CSMonitor, CSRelatedDisplay, CSShellCommand, and CSStripChart

+
+ +

Properties

+ + +

Attached Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+background : color

+

Color used to fill background.

+
+
+ +
+
+ + +

+cursorType : enumeration

+

Mouse cursor shape.

+
+
+ +
+
+ + +

+dynamicAttribute : DynamicAttribute

+

Configure item's visibility and color

+
+
+ +
+
+ + +

+foreground : color

+

Color used to draw outline, text.

+

This is also the color fill graphics item.

+
+
+ +
+
+ + +

+limits : Limits

+

Configure the operation range and data precision

+
+
+ +
+
+ + +

+window : Window

+

Window which contains this item.

+
+
+

Attached Property Documentation

+ +
+
+ + +

+BaseItem.filePath : string

+

This attached property holds the absolute file path of the display in which this item resides.

+

It is attached to each instance of BaseItem. This property maybe give the items awareness of the global context.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-basewindow-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-basewindow-members.html new file mode 100644 index 0000000..00ac6d4 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-basewindow-members.html @@ -0,0 +1,84 @@ + + + + + + + List of All Members for BaseWindow | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for BaseWindow

+

This is the complete list of members for BaseWindow, including inherited members.

+ +

The following members are inherited from Rectangle.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-basewindow.html b/software/CSDataQuick/docs/qml-csdataquick-components-basewindow.html new file mode 100644 index 0000000..b17f780 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-basewindow.html @@ -0,0 +1,117 @@ + + + + + + + BaseWindow QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

BaseWindow QML Type

+ + +

Base for all toplevel windows. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

Rectangle

+
+ +

Properties

+ + + +

Detailed Description

+

In addition to Window, it records the file path this window represents and the macro expansion. Also it implements a context menu,

+
    +
  • Print - capture a screenshot of the current window and send it to printer
  • +
  • Close - close the current window
  • +
  • Main Window - popup the main window if any registered
  • +
  • Display List - popup the window to display windows opened
  • +
  • Data Engines - popup the window to display data engine information
  • +
+

Note: This is actually a Rectangle type, because Window derived types cannot be used in Qt Quick Designer.

+ +

Property Documentation

+ +
+
+ + +

+title : string

+

This property holds the window title

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-colormode-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-colormode-members.html new file mode 100644 index 0000000..35f55cf --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-colormode-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for ColorMode | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for ColorMode

+

This is the complete list of members for ColorMode, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-colormode.html b/software/CSDataQuick/docs/qml-csdataquick-components-colormode.html new file mode 100644 index 0000000..0b112c0 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-colormode.html @@ -0,0 +1,112 @@ + + + + + + + ColorMode QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

ColorMode QML Type

+ + +

Enums of dynamic color rules. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+

This class holds the enums of the dynamic color rules.

+ +

Property Documentation

+ +
+
+ + +

+ColorMode : enumeration

+
+ + + +
ColorMode.StaticShow the object in its normal colors.
ColorMode.AlarmShow 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).
ColorMode.DiscreteSame as ColorMode.Static
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan-members.html new file mode 100644 index 0000000..ea11ba3 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan-members.html @@ -0,0 +1,90 @@ + + + + + + + List of All Members for CS2DSscan | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CS2DSscan

+

This is the complete list of members for CS2DSscan, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan.html b/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan.html new file mode 100644 index 0000000..6ce6a41 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cs2dsscan.html @@ -0,0 +1,184 @@ + + + + + + + CS2DSscan QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CS2DSscan QML Type

+ + +

Display 2D sscan. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

sscan is a flexible way to move positioners through a series of positions and record detector data at each of the positions.

+

The following PVs are relavent:

+
+ + + + + + + + + + + + + +
SSCAN PVDescription
$(X)CPTCurrent point of X dimension
$(X)NPTSNumber of points of X dimension
$(X)PnSPStart point of positioner n of X dimension
$(X)PnEPEnd point of positioner n of X dimension
$(X)EXSCExecute scan flag of X dimension
$(Y)CPTCurrent point of Y dimension
$(Y)NPTSNumber of points of Y dimension
$(Y)PnSPStart point of positioner n of Y dimension
$(Y)PnEPEnd point of positioner n of Y dimension
$(Y)EXSCExecute scan flag of Y dimension
$(X)DnnDAEnd of scan detector array of X dimension
$(X)DnnCVCurrent detector value of X dimension
+
CS2DSscan {
+    scanX: 'MTEST:scan1'
+    scanY: 'MTEST:scan2'
+}
+

+

Property Documentation

+ +
+
+ + +

+detX : int

+

This property holds the sscan record detector number of X dimension

+
+
+ +
+
+ + +

+posX : int

+

This property holds the sscan record positioner number of X dimension

+
+
+ +
+
+ + +

+posY : int

+

This property holds the sscan record positioner number of Y dimension

+
+
+ +
+
+ + +

+scanX : string

+

This property holds the sscan record prefix of X dimension

+
+
+ +
+
+ + +

+scanY : string

+

This property holds the sscan record prefix of X dimension

+
+
+ +
+
+ + +

+title : string

+

This property holds the graph title

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csadimage-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csadimage-members.html new file mode 100644 index 0000000..a74a234 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csadimage-members.html @@ -0,0 +1,85 @@ + + + + + + + List of All Members for CSADImage | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSADImage

+

This is the complete list of members for CSADImage, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csadimage.html b/software/CSDataQuick/docs/qml-csdataquick-components-csadimage.html new file mode 100644 index 0000000..84ef080 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csadimage.html @@ -0,0 +1,121 @@ + + + + + + + CSADImage QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSADImage QML Type

+ + +

Display an image from areaDetector. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

areaDetector is a generic EPICS framework to integrate detectors. The detector data is internally represented as a NDArray structure. The plugin NDPluginStdArrays makes it available as EPICS PVs.

+

Because EPICS PV only supports 1-D waveform. To reconstruct the image. The following PVs are relavent:

+
+ + + + + +
areaDetector PVDescription
$(P)$(R)ArraySize0_RBVFirst dimension of NDArray data
$(P)$(R)ArraySize1_RBVSecond dimension of NDArray data
$(P)$(R)ArraySize2_RBVThird dimension of NDArray data
$(P)$(R)DataType_RBVData type of NDArray data
+
CSADImage {
+    interval: 200
+    source: '13SIM1:image1:'
+}
+

+

Property Documentation

+ +
+
+ + +

+source : string

+

This property holds the NDPluginStdArrays prefix. e.g. 13SIM1:image1:

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csarc-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csarc-members.html new file mode 100644 index 0000000..d07f1bd --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csarc-members.html @@ -0,0 +1,96 @@ + + + + + + + List of All Members for CSArc | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSArc

+

This is the complete list of members for CSArc, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csarc.html b/software/CSDataQuick/docs/qml-csdataquick-components-csarc.html new file mode 100644 index 0000000..aa13916 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csarc.html @@ -0,0 +1,147 @@ + + + + + + + CSArc QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSArc QML Type

+ + +

Display an arc curve. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

The arc is drawn beginning at begin and extending span degrees counter clockwise. Negative span will effectively draw in clockwise. An arrow can be drawn by either or both ends depending on arrowPosition.

+
 CSArc {
+     begin: 45
+     span:  225
+}
+

+

Property Documentation

+ +
+
+ + +

+arrowPosition : int

+

This property indicates where the arrow is draw.

+

See also ArrowPosition.

+
+
+ +
+
+ + +

+begin : real

+

This property holds the start of the arc in degrees.

+
+
+ +
+
+ + +

+closure : int

+

This property indicates how to close the gap.

+
+
+ +
+
+ + +

+span : real

+

This property holds the length of the arc in degrees.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csbar-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csbar-members.html new file mode 100644 index 0000000..485f7a8 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csbar-members.html @@ -0,0 +1,94 @@ + + + + + + + List of All Members for CSBar | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSBar

+

This is the complete list of members for CSBar, including inherited members.

+ +

The following members are inherited from CSMonitor.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csbar.html b/software/CSDataQuick/docs/qml-csdataquick-components-csbar.html new file mode 100644 index 0000000..edeecb3 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csbar.html @@ -0,0 +1,186 @@ + + + + + + + CSBar QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSBar QML Type

+ + +

Display a bar that expands or contracts when value changes. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSMonitor

+
+ +

Properties

+ + + +

Detailed Description

+

The Bar Monitor can have several decorations as specified by the labelStyle. It can go up, down, left, or right, as specified by the direction property. It can start from the edge or from the center, as specified by the fillMode property. The Bar Monitor with the labelStyle set to LabelStyle.None can be used to make bar graphs.

+
 CSBar {
+     source: 'catest'
+     labelStyle: LabelStyle.Outline
+     direction: Direction.Up
+}
+

+

Property Documentation

+ +
+
+ + +

+direction : enumeration

+

Indicate the maximumValue position.

+
    +
  • Direction.Up
  • +
  • Direction.Right
  • +
  • Direction.Down
  • +
  • Direction.Left
  • +
+

By Direction.Up, the minimumValue is at the bottom and maximumValue at the top. And by Direction.Right, the minimumValue is at the left and maximumValue at the right. The other two reverse the direction.

+
+
+ +
+
+ + +

+fillMode : enumeration

+

Set the bar start postion.

+
    +
  • FillMode.FromEdge - the default
  • +
  • FillMode.FromCenter
  • +
+

If the fill mode is FillMode.Edge, the bar starts from where the minimum value is. And the length, in percentage, is calculated by (value - minimumValue) / (maximumValue - minimumValue).

+

In FillMode.Center mode, the bar starts from where the middle point is, i.e. (maximumValue - minimumValue) / 2. And the length, in percentage, is calculated by (value - middleValue) / (maximumValue - minimumValue) / 2. If the value is less than middle point, the bar is towards minimum value.

+
Row {
+    CSBar {
+        source: 'catest'
+        labelStyle: LabelStyle.Outline
+        fillMode: FillMode.FromEdge
+    }
+    CSBar {
+        source: 'catest'
+        labelStyle: LabelStyle.Outline
+        fillMode: FillMode.FromCenter
+    }
+}
+

+
+ +
+
+ + +

+label : enumeration

+

The decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the process variable name.
  • +
+
+
+ +
+
+ + +

+labelStyle : int

+

The decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the process variable name.
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csbyte-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csbyte-members.html new file mode 100644 index 0000000..5aec8d6 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csbyte-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSByte | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSByte

+

This is the complete list of members for CSByte, including inherited members.

+ +

The following members are inherited from CSMonitor.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csbyte.html b/software/CSDataQuick/docs/qml-csdataquick-components-csbyte.html new file mode 100644 index 0000000..6d8795f --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csbyte.html @@ -0,0 +1,137 @@ + + + + + + + CSByte QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSByte QML Type

+ + +

Display bits of an unsigned integer. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSMonitor

+
+ +

Properties

+ + + +

Detailed Description

+

It display values in binary. It masks off the lower 32 bits and treats them as an unsigned integer. The bit set is filled with foreground color, and the unset bit is filled with background color.

+
CSByte {
+    source: 'calc'
+}
+

+

Property Documentation

+ +
+
+ + +

+end : int

+

This property indicates the ending bit to be displayed at the right or bottom. The integer is in the range 0-31. The ending bit can be smaller than starting bit, which causes the direction to appear reversed.

+
+
+ +
+
+ + +

+orientation : int

+
    +
  • Qt.Horizontal: Start Bit at the left and End Bit at the right
  • +
  • Qt.Vertical: Start Bit at the top and End Bit at the bottom
  • +
+
+
+ +
+
+ + +

+start : int

+

This property indicates the starting bit to be displayed at the left or top. The integer is in the range 0-31,

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot-members.html new file mode 100644 index 0000000..acb5d23 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot-members.html @@ -0,0 +1,96 @@ + + + + + + + List of All Members for CSCartesianPlot | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSCartesianPlot

+

This is the complete list of members for CSCartesianPlot, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot.html new file mode 100644 index 0000000..1ea106c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscartesianplot.html @@ -0,0 +1,270 @@ + + + + + + + CSCartesianPlot QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSCartesianPlot QML Type

+ + +

Display XY Plot. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

A Cartesian Plot 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) pairs, a color, and a Y axis indicator. The traces correspond to curves on the plot.

+

Currently there can be up to eight traces on a plot. The first trace is plotted on the Y1 axis, and the remaining traces (if any) are all plotted on the Y2 axis. But the Y axis, Y or Y2, can be selected for each trace. The X and Y1 axes may have a label, but the Y2 axis does not. Each trace can (but does not have to) have a CSData from which to get the x values and another from which to get the y values. These CSData can be of array type, such as Waveforms record in EPICS, or they can be of scalar type with only a single value.

+

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 CSData specified for x, and Ny is the number of elements in the CSData specified for y. The letter n denotes a number greater than one, and a blank indicates no CSData is specified. The axis limits LOPR and HOPR denote the limits obtained from CSData. Typically, these are the fields LOPR and HOPR in the associated record. Count is the specified Count for the Cartesian Plot, which is described in more detail below.

+
+ + + + + + + + + +
NxNyTypePoints
nnX Vector, Y Vectorx(i), y(i)
n1X Vector, Y Scalarx(i), y
1nX Scalar, Y Vectorx, y(i)
nX Vectorx(i), i
nY Vectori, y(i)
11X Scalar, Y Scalarx, y
1X Scalarx, i
1Y Scalari, y
+

Mouse interactions include,

+
+ + + + +
ClickSelect the trace for zooming/panning.
Double ClickReset the zoom
WheelZoom the selected trace's axes. If the mouse hovers over a certain axis, only that axis gets zoomed.
DragPan view of the selected trace.
+

+

Property Documentation

+ +
+
+ + +

+count : int

+

Number of points

+
+
+ +
+
+ + +

+countSource : string

+

Source from where to get number of points.

+

This may be an integer or the data source. If the value is of non-number form, then it is considered to be a data source, and the value of count will come from the data source. Otherwise the count is the converted number.

+
+
+ +
+
+ + +

+eraseMode : int

+
    +
  • 0: Erase the plot if the erase-channel CSData is not zero.
  • +
  • 1: Erase the plot if the erase-channel CSData is zero.
  • +
+
+
+ +
+
+ + +

+eraseOldest : bool

+
    +
  • false: Plot n points corresponding to the first n changes of the data, then do not plot any more points.
  • +
  • true: Plot n points corresponding to the last n changes of the data, overwriting previous points.
  • +
+
+
+ +
+
+ + +

+eraseSource : string

+

The erase source is a CSData object that causes erasing of the plot. If there is an erase source, the plot erases when the CSData value turns either zero or non-zero, depending on the eraseMode.

+
+
+ +
+
+ + +

+legendVisible : bool

+

This property indicates whether the legend is visible.

+
+
+ +
+
+ + +

+model : var

+

Trace list model.

+

The model can be ListModel or JSON object array. In any case, each element contains the following properties,

+
    +
  • label - trace label
  • +
  • xchannel - data source for x
  • +
  • ychannel - data source for y
  • +
  • color - line color
  • +
+

Note: Only in the form of JSON object array, it can be used in Qt Quick Designer

+
+
+ +
+
+ + +

+plotStyle : int

+
    +
  • 0: Plot the data as points.
  • +
  • 1: Plot the data as lines.
  • +
  • 2: Plot the data as lines which are filled under (or over) from the line to the axis.
  • +
+
+
+ +
+
+ + +

+title : string

+

This property holds the graph title

+
+
+ +
+
+ + +

+triggerSource : string

+

Source of the trigger. If configured, whenever the value of the trigger data changes, the entire plot will be updated.

+
+
+ +
+
+ + +

+xLabel : string

+

This property holds the X axis label

+
+
+ +
+
+ + +

+yLabel : string

+

This property holds the Y axis label

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton-members.html new file mode 100644 index 0000000..81ac4c7 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSChoiceButton | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSChoiceButton

+

This is the complete list of members for CSChoiceButton, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton.html b/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton.html new file mode 100644 index 0000000..da54d0e --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cschoicebutton.html @@ -0,0 +1,141 @@ + + + + + + + CSChoiceButton QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSChoiceButton QML Type

+ + +

Display data's enumerate. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

The Choice Button is used for ENUM data type and is a means for picking the ENUM choices via buttons.

+
CSChoiceButton {
+    source: 'bo'
+    stacking: Stacking.Row
+}
+

+

Property Documentation

+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : int

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+stacking : int

+

This property holds the layout for the choice buttons. Default is Stacking.Column.

+
    +
  • Stacking.Column: The buttons are arranged in a column
  • +
  • Stacking.Row: The buttons are arranged in a row
  • +
  • Stacking.RowColumn: The buttons are automatically arranged in rows and columns
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite-members.html new file mode 100644 index 0000000..6388dad --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite-members.html @@ -0,0 +1,86 @@ + + + + + + + List of All Members for CSComposite | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSComposite

+

This is the complete list of members for CSComposite, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite.html new file mode 100644 index 0000000..839b3dd --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscomposite.html @@ -0,0 +1,127 @@ + + + + + + + CSComposite QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSComposite QML Type

+ + +

Display grouped items or include external files. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

A Composite is a group of any items. These items can be created directly. Or it can be made to get its items from an external ADL or QML file specified by source.

+

The Composite will ignore things like the display and colormap in the ADL file and just use the items in it. The positions of the items will be adjusted so the upper left corner of the bounding box of all of them is at the specified x and y values of the Composite. The specified height and width of the Composite are adjusted to those of the bounding box.

+

If the file has macros, you can specify them by macro. If you do not specify any, any existing macros in the current file which uses this Composite will be passed to the file. If you use this feature, those macros will not be passed, and only the ones you specify with macro will be used instead.

+
BaseWindow {
+    CSComposite {
+        source: 'controls.adl'
+    }
+}
+ +

Property Documentation

+ +
+
+ + +

+macro : string

+

This property holds the macro substitution for the external source file,

+
+
+ +
+
+ + +

+source : string

+

This property holds the external source file to load components.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol-members.html new file mode 100644 index 0000000..d901187 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol-members.html @@ -0,0 +1,87 @@ + + + + + + + List of All Members for CSControl | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSControl

+

This is the complete list of members for CSControl, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol.html b/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol.html new file mode 100644 index 0000000..979304d --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cscontrol.html @@ -0,0 +1,134 @@ + + + + + + + CSControl QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSControl QML Type

+ + +

Basic type to all controls. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
Inherited By:

CSChoiceButton, CSMenu, CSMessageButton, CSSlider, CSSpinBox, CSTextArea, CSTextEntry, CSTextEntryArray, CSToggleButton, and CSWheelSwitch

+
+ +

Properties

+ + + +

Detailed Description

+

CSControl is the base type for all control types. It defines all the attributes that are common across controls.

+ +

Property Documentation

+ +
+
+ + +

+alarmColor : color

+

This property holds the color based on the severity of the associated CSData.

+

It is one of the ColorMap.invalid_alarm, ColorMap.minor_alarm, ColorMap.major_alarm and ColorMap.no_alarm.

+
+
+ +
+
+ + +

+colorMode : int

+

This property indicates how foreground color changes.

+

See also ColorMode.

+
+
+ +
+
+ + +

+source : string

+

This property holds the data source string

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics-members.html new file mode 100644 index 0000000..ed75895 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics-members.html @@ -0,0 +1,89 @@ + + + + + + + List of All Members for CSGraphics | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSGraphics

+

This is the complete list of members for CSGraphics, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics.html b/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics.html new file mode 100644 index 0000000..94b7cf3 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csgraphics.html @@ -0,0 +1,158 @@ + + + + + + + CSGraphics QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSGraphics QML Type

+ + +

Basic type to all graphics shapes. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
Inherited By:

CSArc, CSImage, CSOval, CSPolygon, CSPolyline, CSRect, and CSText

+
+ +

Properties

+ + + +

Detailed Description

+

CSGraphics is the base type for all graphics types. It defines all the attributes that are common across graphics shapes.

+ +

Property Documentation

+ +
+
+ + +

+alarmColor : color

+

This property holds the color based on the severity of the associated CSData.

+

It is one of the ColorMap.invalid_alarm, ColorMap.minor_alarm, ColorMap.major_alarm and ColorMap.no_alarm.

+
+
+ +
+
+ + +

+colorMode : int

+

This property indicates how foreground color changes.

+

See also ColorMode.

+
+
+ +
+
+ + +

+edgeStyle : int

+

This property holds the outline style.

+

See also EdgeStyle.

+
+
+ +
+
+ + +

+fillStyle : int

+

This property indicates whether draw outline only or fill the shape.

+

See also FillStyle.

+
+
+ +
+
+ + +

+lineWidth : int

+

This property holds the outline width.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csimage-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csimage-members.html new file mode 100644 index 0000000..7b4dda5 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csimage-members.html @@ -0,0 +1,94 @@ + + + + + + + List of All Members for CSImage | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSImage

+

This is the complete list of members for CSImage, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csimage.html b/software/CSDataQuick/docs/qml-csdataquick-components-csimage.html new file mode 100644 index 0000000..5b46547 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csimage.html @@ -0,0 +1,128 @@ + + + + + + + CSImage QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSImage QML Type

+ + +

Show a static or dynamic image. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

The image can be any any image format supported by Qt, loaded from any URL scheme supported by Qt. The image is scaled to fit item size.

+

If the image file has multiple frames, the designer 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 imageCalc that returns a frame number.

+
CSImage {
+    source: 'LED.gif'
+    dynamicAttribute.channel: 'catest'
+    imageCalc: 'A*10'
+}
+ +

Property Documentation

+ +
+
+ + +

+imageCalc : string

+

For multiple-frame images, the frame to display is defined by this expression.

+

The syntax for the imageCalc expression is the same as that for the DynamicAttribute. The only difference is that the expression should return a frame number, not True or False. The Image will be black if the expression is invalid.

+

Frame numbers start with 0. 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.

+
+
+ +
+
+ + +

+source : url

+

This property holds the URL that refers to the source image.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csindicator-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csindicator-members.html new file mode 100644 index 0000000..7d5c771 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csindicator-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSIndicator | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSIndicator

+

This is the complete list of members for CSIndicator, including inherited members.

+ +

The following members are inherited from CSMonitor.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csindicator.html b/software/CSDataQuick/docs/qml-csdataquick-components-csindicator.html new file mode 100644 index 0000000..452dd6f --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csindicator.html @@ -0,0 +1,158 @@ + + + + + + + CSIndicator QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSIndicator QML Type

+ + +

The Indicator displays the value on a scale. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSMonitor

+
+ +

Properties

+ + + +

Detailed Description

+

The Indicator can have several decorations as specified by the labelStyle. It can go up, down, left, or right, as specified by the direction property. It is very much like CSBar monitor, except that the value is represented by an indicator.

+
CSIndicator {
+    source: 'catest'
+    labelStyle: LabelStyle.Outline
+    colorMode: ColorMode.Alarm
+}
+

See also CSBar.

+ +

Property Documentation

+ +
+
+ + +

+direction : int

+

This property indicates the maximumValue position.

+
    +
  • Direction.Up
  • +
  • Direction.Right
  • +
  • Direction.Down
  • +
  • Direction.Left
  • +
+

By Direction.Up, the minimumValue is at the bottom and maximumValue at the top. And by Direction.Right, the minimumValue is at the left and maximumValue at the right. The other two reverse the direction.

+
+
+ +
+
+ + +

+label : enumeration

+

This property holds the decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the process variable name.
  • +
+
+
+ +
+
+ + +

+labelStyle : int

+

This property holds the decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the process variable name.
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmenu-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmenu-members.html new file mode 100644 index 0000000..06083b8 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmenu-members.html @@ -0,0 +1,90 @@ + + + + + + + List of All Members for CSMenu | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSMenu

+

This is the complete list of members for CSMenu, including inherited members.

+
    +
+

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmenu.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmenu.html new file mode 100644 index 0000000..c8b236f --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmenu.html @@ -0,0 +1,95 @@ + + + + + + + CSMenu QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSMenu QML Type

+ + +

Displays process variable's enumerate in drop-down menu. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ + +

Detailed Description

+

The Menu is used for ENUM data and is a means for picking the ENUM choices via a menu. Note that if the colorMode is alarm, the foreground color, not the background color, is set to the alarm colors. The background color should be choosen to contrast with all the alarm colors.

+
CSMenu {
+    source: 'bo'
+}
+

+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-members.html new file mode 100644 index 0000000..0d7b3ea --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-members.html @@ -0,0 +1,97 @@ + + + + + + + List of All Members for CSMessageButton | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSMessageButton

+

This is the complete list of members for CSMessageButton, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-obsolete.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-obsolete.html new file mode 100644 index 0000000..3c7c652 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton-obsolete.html @@ -0,0 +1,99 @@ + + + + + + + Obsolete Members for CSMessageButton | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Obsolete Members for CSMessageButton

+

The following members of QML type CSMessageButton are obsolete. They are provided to keep old source code working. We strongly advise against using them in new code.

+ +

Properties

+ +

Property Documentation

+ +
+
+ + +

+offMessage : alias

+

Use releaseMessage instead.

+
+
+ +
+
+ + +

+onMessage : alias

+

Use pressMessage instead.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton.html new file mode 100644 index 0000000..db0c4f7 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmessagebutton.html @@ -0,0 +1,157 @@ + + + + + + + CSMessageButton QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSMessageButton QML Type

+ + +

Displays a push button. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

The Message Button sets the CSData value when the button is pressed or released.

+ +

Property Documentation

+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : enumeration

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+pressMessage : string

+

This property holds the value to set to the CSData object when button is pressed.

+

This value should be commensurate with the type of the process variable. (It is not wise to send a non-numeric string to a DOUBLE type data, for example.)

+
+
+ +
+
+ + +

+releaseMessage : string

+

This property holds the value to set to the CSData object when button is released

+

This value should be commensurate with the type of the data. (It is not wise to send a non-numeric string to a DOUBLE type process variable, for example.)

+
+
+ +
+
+ + +

+text : string

+

This property holds the text on message button

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmeter-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmeter-members.html new file mode 100644 index 0000000..b550f70 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmeter-members.html @@ -0,0 +1,91 @@ + + + + + + + List of All Members for CSMeter | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSMeter

+

This is the complete list of members for CSMeter, including inherited members.

+ +

The following members are inherited from CSMonitor.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmeter.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmeter.html new file mode 100644 index 0000000..b0a9929 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmeter.html @@ -0,0 +1,120 @@ + + + + + + + CSMeter QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSMeter QML Type

+ + +

Displays the value on a cirular dial panel. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSMonitor

+
+ +

Properties

+ + + +

Detailed Description

+

The value of the dta is displayed by a needle within an arc.

+
CSMeter {
+    source: 'catest'
+    labelStyle: LabelStyle.Outline
+}
+

+

Property Documentation

+ +
+
+ + +

+labelStyle : int

+

The decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the data source name.
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo-members.html new file mode 100644 index 0000000..c27362e --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo-members.html @@ -0,0 +1,85 @@ + + + + + + + List of All Members for CSMJPEGVideo | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSMJPEGVideo

+

This is the complete list of members for CSMJPEGVideo, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo.html new file mode 100644 index 0000000..187a2b7 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmjpegvideo.html @@ -0,0 +1,112 @@ + + + + + + + CSMJPEGVideo QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSMJPEGVideo QML Type

+ + +

Display a video from MJPEG video stream. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

This is not related to CSData, but provided for convenience. Note: The MJPEG stream header must specify Content-Length

+
CSMJPEGVideo {
+    source: ''
+}
+ +

Property Documentation

+ +
+
+ + +

+source : string

+

This property holds the url to the MJPEG stream.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor-members.html new file mode 100644 index 0000000..cb0921c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor-members.html @@ -0,0 +1,87 @@ + + + + + + + List of All Members for CSMonitor | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSMonitor

+

This is the complete list of members for CSMonitor, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor.html b/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor.html new file mode 100644 index 0000000..f1d4245 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csmonitor.html @@ -0,0 +1,133 @@ + + + + + + + CSMonitor QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSMonitor QML Type

+ + +

Basic type to all monitors. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
Inherited By:

CSBar, CSByte, CSIndicator, CSMeter, and CSTextUpdate

+
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+alarmColor : color

+

This property holds the color based on the severity of the associated CSData.

+

It is one of the ColorMap.invalid_alarm, ColorMap.minor_alarm, ColorMap.major_alarm and ColorMap.no_alarm.

+
+
+ +
+
+ + +

+colorMode : int

+

This property indicates how foreground color changes.

+

See also ColorMode.

+
+
+ +
+
+ + +

+source : string

+

This property holds the data source string

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csoval-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csoval-members.html new file mode 100644 index 0000000..6bcba7c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csoval-members.html @@ -0,0 +1,90 @@ + + + + + + + List of All Members for CSOval | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSOval

+

This is the complete list of members for CSOval, including inherited members.

+

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csoval.html b/software/CSDataQuick/docs/qml-csdataquick-components-csoval.html new file mode 100644 index 0000000..3d699c8 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csoval.html @@ -0,0 +1,104 @@ + + + + + + + CSOval QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSOval QML Type

+ + +

Display a circle or ellipse. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ + +

Detailed Description

+

The ellipse is drawn always within the item boundary.

+
Row {
+    spacing: 5
+    CSOval {
+        width: 50
+        height: 50
+    }
+    CSOval {
+        width: 100
+        height: 50
+        fillStyle: FillStyle.Outline
+    }
+}
+

+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon-members.html new file mode 100644 index 0000000..c359218 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSPolygon | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSPolygon

+

This is the complete list of members for CSPolygon, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon.html b/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon.html new file mode 100644 index 0000000..8c279cc --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cspolygon.html @@ -0,0 +1,130 @@ + + + + + + + CSPolygon QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSPolygon QML Type

+ + +

Display a polygon shape. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

Draws the polygon defined by the points array. The first point is implicitly connected to the last point.

+
Row {
+    spacing: 5
+    CSPolygon {
+        width: 100
+        height: 100
+        points: [
+            Qt.point(10.0, 80.0), Qt.point(20.0, 10.0),
+            Qt.point(80.0, 30.0),Qt.point(90.0, 70.0)
+        ]
+    }
+    CSPolygon {
+        width: 100
+        height:100
+        points: [
+            Qt.point(10.0, 80.0),Qt.point(20.0, 10.0),
+            Qt.point(80.0, 30.0),Qt.point(90.0, 70.0)
+        ]
+        fill: FillStyle.Outline
+        edge: EdgeStyle.Dash
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+points : list<point>

+

This property holds the trace of the polygon as a list of points.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline-members.html new file mode 100644 index 0000000..933f1f0 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline-members.html @@ -0,0 +1,94 @@ + + + + + + + List of All Members for CSPolyline | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSPolyline

+

This is the complete list of members for CSPolyline, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline.html b/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline.html new file mode 100644 index 0000000..7bfd275 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cspolyline.html @@ -0,0 +1,130 @@ + + + + + + + CSPolyline QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSPolyline QML Type

+ + +

Display a polyline. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

Draws the polyline defined by the points array. Note that unlike CSPolygon, the last point is not connected to the first, unless the first point is repeated at the end.

+
CSPolyline {
+    width: 100
+    height: 100
+    points: [
+        Qt.point(10.0, 80.0),Qt.point(20.0, 10.0),
+        Qt.point(80.0, 30.0),Qt.point(90.0, 70.0)
+    ]
+}
+

See also CSPolygon.

+ +

Property Documentation

+ +
+
+ + +

+arrowPosition : int

+

This property indicates where the arrow is draw.

+

See also ArrowPosition.

+
+
+ +
+
+ + +

+points : list<point>

+

This property holds the trace of the polyline as a list of points.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csrect-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csrect-members.html new file mode 100644 index 0000000..50cd195 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csrect-members.html @@ -0,0 +1,94 @@ + + + + + + + List of All Members for CSRect | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSRect

+

This is the complete list of members for CSRect, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csrect.html b/software/CSDataQuick/docs/qml-csdataquick-components-csrect.html new file mode 100644 index 0000000..b89cce6 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csrect.html @@ -0,0 +1,140 @@ + + + + + + + CSRect QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSRect QML Type

+ + +

Display a rectangle. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

The rectangle is drawn always within the item boundary.

+
Row {
+    spacing: 5
+    CSRect {
+        width: 100
+        height: 100
+    }
+    CSRect {
+        width: 100
+        height: 100
+        lineWidth: 5
+        fillStyle: FillStyle.Outline
+    }
+    CSRect {
+        width: 150
+        height: 30
+        radiusX: 10
+        radiusY: 10
+        fillStyle: FillStyle.Outline
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+radiusX : real

+

the x radius of the ellipses defining the corners of the rounded rectangle

+
+
+ +
+
+ + +

+radiusY : real

+

the y radius of the ellipses defining the corners of the rounded rectangle

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay-members.html new file mode 100644 index 0000000..fdc9629 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay-members.html @@ -0,0 +1,89 @@ + + + + + + + List of All Members for CSRelatedDisplay | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSRelatedDisplay

+

This is the complete list of members for CSRelatedDisplay, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay.html b/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay.html new file mode 100644 index 0000000..3dec53a --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csrelateddisplay.html @@ -0,0 +1,191 @@ + + + + + + + CSRelatedDisplay QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSRelatedDisplay QML Type

+ + +

Brings up more displays. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

The Related Display provides a means of bringing up more displays. It is by default a menu button that has a graphic consisting of two overlapping squares and a label. But it can also be a group of buttons layout in a row or column. This visual reprsentation is set by property visual.

+

The model denote the related displays that can be displayed. If there is only one related display specified in the menu, then the two overlapping squares and/or label appear in the middle of the button, and the related display is activated immediately without bringing up a menu.

+

It is not activated until the button is released, so you can depress the button to check if there is more than one menu item or not, then abort by releasing the button away from the Related Display. If there is more than one item on the menu, the squares and/or label are at the left of the button.

+

The new display can be configured by "replace" property to always replace the parent. When the parent display is replaced by the new display, its upper-left corner should be at the former position of the parent, unless the new display was already in existence. In that case the existing display is popped up, and its position is not changed.

+
Row {
+    spacing: 10
+    CSRelatedDisplay {
+        width: 100
+        height: 25
+        label: 'More ...'
+        model: ListModel {
+            ListElement {label:'Monitors'; file: 'monitors.adl'; replace: true;}
+            ListElement {label:'Graphics'; file: 'graphics.adl'; replace: true;}
+        }
+    }
+    CSRelatedDisplay {
+        width: 100
+        height: 60
+        visual: RelatedDisplayVisual.Column
+        model: [
+            {"label":"Monitors", "file":"monitor.adl", "macro":"", "replace":true},
+            {"label":"Controls", "file":"control.adl", "macro":"", "replace":true}
+        ]
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : int

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+label : string

+

This property holds the text displayed on the button.

+

Normally there are two overlapping squares on the button to denote a Related Display control. However, if the label text begins with "-" (for example "-My Label"), the overlapping squares will not appear.

+
+
+ +
+
+ + +

+model : var

+

This property holds the related display list model

+

The model contains entries to display files. It can be ListModel or JSON object array. In either case, each entry contains the following.

+
    +
  • label: text description
  • +
  • file: display file name
  • +
  • macro: macro substitution
  • +
  • replace: replace the parent display if true
  • +
+

Note: Only in the form of JSON object array, it can be used in Qt Quick Designer

+
+
+ +
+
+ + +

+visual : int

+
    +
  • RelatedDisplayVisual.Menu: Use a pull down menu for the choices.
  • +
  • RelatedDisplayVisual.Row: Use a row of buttons for the choices.
  • +
  • RelatedDisplayVisual.Column: Use a column of buttons for the choices.
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand-members.html new file mode 100644 index 0000000..bc7ff1d --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand-members.html @@ -0,0 +1,88 @@ + + + + + + + List of All Members for CSShellCommand | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSShellCommand

+

This is the complete list of members for CSShellCommand, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand.html b/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand.html new file mode 100644 index 0000000..28b4f42 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csshellcommand.html @@ -0,0 +1,163 @@ + + + + + + + CSShellCommand QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSShellCommand QML Type

+ + +

Run shell commands. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

It is a menu button that usually has a graphic consisting of an “!†and a label. The model denote the commands that can be executed. If there is only one command specified in the menu, then the “!†and/or label appear in the middle of the button, and the command is activated immediately without bringing up a menu. If there is more than one item on the menu, the “!†and/or label are at the left of the button.

+

It is not activated until the button is released, so you can depress the button to check if there is more than one menu item or not, then abort by releasing the button away from the Shell Command.

+

If the command contains a “?â€, then the rest of the command will be ignored, and a dialog box will prompt the user to complete (or otherwise edit) the command.

+
CSShellCommand {
+    width: 150
+    height: 25
+    label: 'Shell Commands'
+    model: ListModel {
+        ListElement {label: 'ls'; command: 'ls'}
+        ListElement {label: 'xterm'; command: 'xterm'}
+        ListElement {label: 'run anything'; command: '?';}
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : enumeration

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+label : string

+

This property holds the text on the button.

+

The Label is the optional label that appears on the button. Normally, whether there is a label or not, there is a “!†symbol on the button to denote a Shell Command control. However, if the label text begins with "-" (for example "-My Label"), the “!†symbol will not appear.

+
+
+ +
+
+ + +

+model : var

+

The property holds the command list model.

+

The model can be ListModel or JSON object array. In any case, each element contains two properties:

+
    +
  • label - the label on the menu item in the menu that is brought up when the Shell Command button is pressed.
  • +
  • command - the string in command will be executed as a system command when the menu item with that label is selected.
  • +
+

The GUI will block until the command is executed, so it is almost always wise to include an “&†at the end of the command so that it will execute in the background.

+

Note: Only in the form of JSON object array, it can be used in Qt Quick Designer

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csslider-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csslider-members.html new file mode 100644 index 0000000..e9758d4 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csslider-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSSlider | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSSlider

+

This is the complete list of members for CSSlider, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csslider.html b/software/CSDataQuick/docs/qml-csdataquick-components-csslider.html new file mode 100644 index 0000000..0063c81 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csslider.html @@ -0,0 +1,164 @@ + + + + + + + CSSlider QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSSlider QML Type

+ + +

Display a slider to control a PV. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

Dragging the Slider handle transmits values. The sensitivity with which values can be selected this way depends on the range of the slider.

+

The left and right arrow keys are operational when direction is Direction.Left or Direction.Right, and the up and down arrow keys are operational when direction is Direction.Up or Direction.Down. The arrow keys only function when the focus is on the slider button or the space on either side of it.

+
Row {
+    spacing: 5
+    CSSlider {
+        width: 150
+        height: 20
+        anchors.verticalCenter: parent.verticalCenter
+        source: 'catest'
+    }
+    CSSlider {
+        width: 150
+        height: 50
+        source: 'catest'
+        labelStyle: LabelStyle.Limits
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+direction : int

+

Indicate the maximumValue position.

+
    +
  • Direction.Up
  • +
  • Direction.Right
  • +
  • Direction.Down
  • +
  • Direction.Left
  • +
+

By Direction.Up, the minimumValue is at the bottom and maximumValue at the top. And by Direction.Right, the minimumValue is at the left and maximumValue at the right. The other two reverse the direction.

+
+
+ +
+
+ + +

+labelStyle : int

+

The decoration mode.

+
    +
  • LabelStyle.Frame - No extra features.
  • +
  • LabelStyle.None - Same as LabelStyle.Frame.
  • +
  • LabelStyle.Outline - Show the limits.
  • +
  • LabelStyle.Limits - Show limits and a box for the value.
  • +
  • LabelStyle.Channel - In addition to LabelStyle.Limits, show the process variable name.
  • +
+
+
+ +
+
+ + +

+stepSize : real

+

This property indicates the amount of vaue to increament or decrement.

+

Clicking Btn1 in the space on either side of the slider button increments or decrements the value by an amount equal to the stepSize.

+

Clicking Ctrl-Btn1 in the space on either side increments or decrements the value by an amount equal to 10 times stepSize

+

In addition, the arrow keys increment or decrement the value by an amount equal to stepSize, and the Ctrl-Arrow keys increment or decrement the value by an amount equal to 10 times stepSize.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox-members.html new file mode 100644 index 0000000..811c25e --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox-members.html @@ -0,0 +1,91 @@ + + + + + + + List of All Members for CSSpinBox | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSSpinBox

+

This is the complete list of members for CSSpinBox, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox.html b/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox.html new file mode 100644 index 0000000..42762f1 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csspinbox.html @@ -0,0 +1,110 @@ + + + + + + + CSSpinBox QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSSpinBox QML Type

+ + +

Display a spin box control. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

It allows the user to choose a value by clicking the up or down buttons, or by pressing up or down on the keyboard. The user can also type the value in manually.

+

The font used depends on the item height using function UtilsJS::getBestFontSize.

+ +

Property Documentation

+ +
+
+ + +

+unitsVisible : bool

+

This property indicates whether to display the physical units if available

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart-members.html new file mode 100644 index 0000000..f4eaa81 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart-members.html @@ -0,0 +1,91 @@ + + + + + + + List of All Members for CSStripChart | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSStripChart

+

This is the complete list of members for CSStripChart, including inherited members.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart.html b/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart.html new file mode 100644 index 0000000..1139d6e --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-csstripchart.html @@ -0,0 +1,203 @@ + + + + + + + CSStripChart QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSStripChart QML Type

+ + +

Display a strip chart. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

BaseItem

+
+ +

Properties

+ + + +

Detailed Description

+

A strip chart acquires the data and updates the plot in fixed period. period and units together define the time span.

+
CSStripChart {
+    model: ListModel {
+        ListElement {
+            channel: 'catest'
+            color: 'red'
+        }
+        ListElement {
+            channel: 'catest2'
+            color: 'blue'
+        }
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+legendVisible : bool

+

This property indicates whether the legend is visible.

+
+
+ +
+
+ + +

+model : var

+

This property holds the data list model.

+

The model can be ListModel or JSON object array. In any case, each element contains the following properties,

+
    +
  • channel - the data source to monitor.
  • +
  • label - the descriptive text.
  • +
  • color - the color of the line for that channel,
  • +
  • loprSrc - the lower range source.
  • +
  • loprDefault - the default lower range.
  • +
  • hoprSrc - the upper range source.
  • +
  • hoprDefault - the default upper range.
  • +
+

Note: Only in the form of JSON object array, it can be used in Qt Quick Designer

+
+
+ +
+
+ + +

+period : int

+

This property holds the period of time between updates

+
+
+ +
+
+ + +

+title : string

+

This property holds the title of the plot, displayed on top.

+
+
+ +
+
+ + +

+units : int

+

This property holds the time axis units.

+
    +
  • TimeUnit.MilliSecond
  • +
  • TimeUnit.Second
  • +
  • TimeUnit.Minute
  • +
+
+
+ +
+
+ + +

+xLabel : string

+

This property holds the lable of x axis, shown below the axis.

+
+
+ +
+
+ + +

+yLabel : string

+

This property holds the label of y axis, show next to the axis.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstext-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstext-members.html new file mode 100644 index 0000000..f264ffe --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstext-members.html @@ -0,0 +1,96 @@ + + + + + + + List of All Members for CSText | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSText

+

This is the complete list of members for CSText, including inherited members.

+ +

The following members are inherited from CSGraphics.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstext.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstext.html new file mode 100644 index 0000000..b81e9d7 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstext.html @@ -0,0 +1,160 @@ + + + + + + + CSText QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSText QML Type

+ + +

Display a text label. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSGraphics

+
+ +

Properties

+ + + +

Detailed Description

+

It can display both plain and rich text in HTML-style markup.

+

The font property can specify the font family, pixelSize, weight, style etc. If unspecified font family is returned from function UtilsJS::getBestFontSize.

+

If fontSizeMode is Text.Fit, the font pixelSize will fit within the item width and height. If fontSizeMode is Text.FixedSize, Text.VerticalFit or Text.HorizontalFit, the text may extend beyond the height and width specified for the Text item or may not use up all the specified height and width. The text typically does not fill all of the specified height for the Text item.

+
Column {
+    spacing: 5
+    CSText {
+        width: 100
+        height: 20
+        text: 'Plain Text'
+    }
+    CSText {
+        width: 100
+        height: 20
+        text: '<b>Rich</b> <i>Text</i>'
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+align : enumeration

+

Sets the horizontal alignment of the text within the item width.

+

The valid values for horizontalAlignment are Text.AlignLeft, Text.AlignRight, Text.AlignHCenter and Text.AlignJustify.

+
+
+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : enumeration

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+text : string

+

This property holds the text to display.

+

It can be plain text or richt text defined using HTML markup.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea-members.html new file mode 100644 index 0000000..743a90c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea-members.html @@ -0,0 +1,91 @@ + + + + + + + List of All Members for CSTextArea | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSTextArea

+

This is the complete list of members for CSTextArea, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea.html new file mode 100644 index 0000000..a4a2ba1 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextarea.html @@ -0,0 +1,114 @@ + + + + + + + CSTextArea QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSTextArea QML Type

+ + +

Display an editable multiline text. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

It can be used to edit a multiline text. The CSData object could be of char array type. To confirm the changes, use the Apply context menu.

+
 CSTextArea {
+    width: 100
+    height: 80
+    source: 'wavec'
+}
+

+

Property Documentation

+ +
+
+ + +

+font : font

+

This property holds the font group property used to display the text

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry-members.html new file mode 100644 index 0000000..f4c2952 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry-members.html @@ -0,0 +1,92 @@ + + + + + + + List of All Members for CSTextEntry | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSTextEntry

+

This is the complete list of members for CSTextEntry, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry.html new file mode 100644 index 0000000..6900b78 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentry.html @@ -0,0 +1,156 @@ + + + + + + + CSTextEntry QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSTextEntry QML Type

+ + +

Display an editable text. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

The Text Entry provides a means of displaying the value of a process variable in an entry box, where it can be edited and changed. The value is not sent until Return is pressed with the focus in the entry box. If the focus leaves the entry box before Return is pressed, the value of the process variable is not changed and the current value is restored into the entry box. The resulting value of the process variable is shown when and only when the cursor leaves the entry box. The value after leaving the entry box can be used to verify that the input was accepted.

+

If the native format of the process variable associated with the Text Entry is DBR_STRING or DBR_CHAR, then the string entered in the Text Entry will be sent to the process variable.

+

If the native type is DBR_ENUM, then it will first try to match the entered string to one of the state strings of the process variable. If that fails, it will try to interpret the string as a number representing one of the state strings and send that number to the process variable.

+

For the native types for which a number is meaningful, the behavior of the Text Entry will depend on the format of the Text Entry. If the Text Entry has a format of octal, then numbers may be input with or without a leading 0 and will be interpreted as octal. That is, entering either 010 or 10 results in 8 decimal. Entering 8 is an error. The numbers will be displayed with a leading 0 when they are updated. Similarly, if the Text Entry is formatted to hexadecimal, then numbers may be input with or without a leading 0x or 0X and will be interpreted as hexadecimal. In this case, 0x10, 010 or 10 will result in 16 decimal. In all other formats, input values will be interpreted as decimal unless they begin with 0x or 0X, in which case they are interpreted as hexadecimal. Input numbers with a leading 0 in these formats will not be interpreted as octal because of the chance for error or confusion. If you want to input octal, you must format the Text Entry to octal.

+
Column {
+    CSTextEntry {
+        width: 80
+        height: 25
+        source: 'bo'
+    }
+    CSTextEntry {
+        width: 200
+        height: 25
+        source: 'wavec'
+    }
+    CSTextEntry {
+        width: 80
+        height: 25
+        source: 'catest'
+        format: TextFormat.Decimal
+    }
+    CSTextEntry {
+        width: 80
+        height: 25
+        source: 'catest'
+        format: TextFormat.Hexadecimal
+    }
+    CSTextEntry {
+        width: 80
+        height: 25
+        source: 'catest'
+        format: TextFormat.Octal
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+align : enumeration

+

Sets the horizontal alignment of the text within the item width.

+

The valid values for horizontalAlignment are Text.AlignLeft, Text.AlignRight, Text.AlignHCenter and Text.AlignJustify. The font used depends on the item height using function UtilsJS::getBestFontSize.

+
+
+ +
+
+ + +

+format : int

+

This property indicates how the data value is formated to text display.

+

For all of the formats, the result depends on the number and the precision in limits.

+

See also TextFormat.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray-members.html new file mode 100644 index 0000000..43c9db4 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray-members.html @@ -0,0 +1,97 @@ + + + + + + + List of All Members for CSTextEntryArray | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSTextEntryArray

+

This is the complete list of members for CSTextEntryArray, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray.html new file mode 100644 index 0000000..e5af12d --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextentryarray.html @@ -0,0 +1,196 @@ + + + + + + + CSTextEntryArray QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSTextEntryArray QML Type

+ + +

Display text entry for array data. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

Functionally it is the same as CSTextEntry, only that it allows to display and change an array data. Each array element is displayed in a text entry box, formatted using format and align.

+

The entries can be arranged either into a column or into a row. stacking

+

An sub-array can be selected using index and count.

+

label can be assigned for each array element. By default it is the element index.

+
Column {
+    CSTextEntryArray {
+        source: 'x'
+        count: 5
+    }
+    CSTextEntryArray {
+        source: 'y'
+        count: 5
+        stacking: Stacking.Row
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+align : int

+

Sets the horizontal alignment of the text within the item width.

+

The valid values for horizontalAlignment are Text.AlignLeft, Text.AlignRight, Text.AlignHCenter and Text.AlignJustify. The font used depends on the item height using function UtilsJS::getBestFontSize.

+
+
+ +
+
+ + +

+count : int

+

This property holds the number of elements starting from index

+
+
+ +
+
+ + +

+format : int

+

This property indicates how the data value is formated to text display.

+

For all of the formats, the result depends on the number and the precision in limits.

+

See also TextFormat.

+
+
+ +
+
+ + +

+index : int

+

This property holds the start index of the array data

+
+
+ +
+
+ + +

+label : var

+

This property holds the label texts to the elements

+
+
+ +
+
+ + +

+labelVisible : bool

+

This property indicates whether to show the element label or not.

+
+
+ +
+
+ + +

+stacking : int

+

Set the layout for the text entries. Default is Stacking.Column.

+
    +
  • Stacking.Row: The entries are arranged in a row
  • +
  • Stacking.Column: The entries are arranged in a column
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate-members.html new file mode 100644 index 0000000..6c2f7f2 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate-members.html @@ -0,0 +1,95 @@ + + + + + + + List of All Members for CSTextUpdate | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSTextUpdate

+

This is the complete list of members for CSTextUpdate, including inherited members.

+ +

The following members are inherited from CSMonitor.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate.html new file mode 100644 index 0000000..5707f2e --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstextupdate.html @@ -0,0 +1,172 @@ + + + + + + + CSTextUpdate QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSTextUpdate QML Type

+ + +

Display the value in given format. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSMonitor

+
+ +

Properties

+ + + +

Detailed Description

+

The value is format to string using format.

+

The font property can specify the font family, pixelSize, weight, style etc. If unspecified font family is returned from function UtilsJS::getBestFontSize.

+

If fontSizeMode is Text.Fit, the font pixelSize will fit within the item width and height. If fontSizeMode is Text.FixedSize, Text.VerticalFit or Text.HorizontalFit, the text may extend beyond the height and width specified for the Text item or may not use up all the specified height and width. The text typically does not fill all of the specified height for the Text item.

+
Row {
+    spacing: 5
+    CSTextUpdate {
+        width: 100
+        height: 20
+        source: 'catest.SCAN'
+    }
+    CSTextUpdate {
+        width: 100
+        height: 20
+        source: 'catest'
+    }
+}
+

+

Property Documentation

+ +
+
+ + +

+align : enumeration

+

Set the horizontal alignment of the text within the item width.

+

The valid values for horizontalAlignment are Text.AlignLeft, Text.AlignRight, Text.AlignHCenter and Text.AlignJustify.

+
+
+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : enumeration

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+format : int

+

This property indicates how the data value is formated to text display.

+

For all of the formats, the result depends on the number and the precision in limits.

+

See also TextFormat.

+
+
+ +
+
+ + +

+unitsVisible : bool

+

This property indicates whether to display the physical units if available

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton-members.html new file mode 100644 index 0000000..de77301 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton-members.html @@ -0,0 +1,93 @@ + + + + + + + List of All Members for CSToggleButton | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSToggleButton

+

This is the complete list of members for CSToggleButton, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton.html b/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton.html new file mode 100644 index 0000000..85f74d5 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cstogglebutton.html @@ -0,0 +1,132 @@ + + + + + + + CSToggleButton QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSToggleButton QML Type

+ + +

Displays a checkbox to toggle a boolean value. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

The Toggle Button sets the CSData value when the button is checked or cleared.

+ +

Property Documentation

+ +
+
+ + +

+font : font

+

The text font.

+
+
+ +
+
+ + +

+fontSizeMode : enumeration

+

This property specifies how the font size of the displayed text is determined.

+

See also fontSizeMode.

+
+
+ +
+
+ + +

+text : string

+

This property holds a textual description of the button.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch-members.html new file mode 100644 index 0000000..c3970d9 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch-members.html @@ -0,0 +1,91 @@ + + + + + + + List of All Members for CSWheelSwitch | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSWheelSwitch

+

This is the complete list of members for CSWheelSwitch, including inherited members.

+ +

The following members are inherited from CSControl.

+ +

The following members are inherited from BaseItem.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch.html b/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch.html new file mode 100644 index 0000000..80bee4a --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-cswheelswitch.html @@ -0,0 +1,127 @@ + + + + + + + CSWheelSwitch QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSWheelSwitch QML Type

+ + +

Control a number with individual digit manipulation. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
Inherits:

CSControl

+
+ +

Properties

+ + + +

Detailed Description

+

The WheelSwitch displays a number value. It has arrow buttons above and below the digits that are used to change individual digits. The up and down arrow buttons are the main feature of the WheelSwitch. You click them to increment the digit. Only the buttons that give allowable values, that is, those between the limits in effect and allowed by the format, are visible at any time.

+

The arrow buttons can also be navigated and operated via the keyboard. The up and down arrow keys increment or decrement the selected digit. The left and right arrows keys move the selected digit. The selected digit should be highlighted when the pointer is inside the WheelSwitch. Clicking on an arrow button moves the selected digit to that digit, in addition to incrementing or decrementing the digit.

+

The WheelSwitch will also accept input of a new value via the keyboard. When you start typing, the arrow buttons will disappear and what you type will be displayed. A minus sign can be typed at any time and toggles having a minus sign at the front of the number. Typing a plus sign will delete a minus sign. Backspace or Delete should delete the last character. (This is the only way to correct a typing mistake.) The arrow keys cannot be used to move within the input. Escape aborts the input. If the pointer leaves the WheelSwitch while you are in input mode, that will also abort the input. Type Enter to finish the input. If the number entered is invalid for the format or the limits, it will not be accepted.

+

If the number is larger than the format will hold or outside the low and high limits, the digits are replaced by astericks, but a minus sign remains if the value is negative.

+

The limits and precision can be changed via the DataLimits dialog.

+
CSWheelSwitch {
+    width: 150
+    height: 30
+    anchors.centerIn: parent
+    source: 'catest'
+    format: 'PV Value: % 5.2f'
+}
+

+

Property Documentation

+ +
+
+ + +

+format : string

+

The format used to display the number

+

The Format is a string of characters that specifies how the value will be formatted. Its syntax is based on the format specification used in the C language, but is more limited. Valid formats are of the form “xxx%[space|+]m.nfyyyâ€. They consist of an arbitrary string of characters xxx (the prefix), followed by a % sign, followed by a flag, which can be a space or blank, followed by an integer m representing the total number of digits including the sign and the decimal point, followed by a decimal point, followed by an integer n representing the number of digits after the decimal point, followed by an f, followed by an arbitrary string of characters yyy (the postfix). If the flag is +, then the sign is always shown when the value is displayed. If the flag is a space, then the sign is shown only when the number is negative. The format, apart from the prefix and postfix, is interpreted as it is in the C language, but all the options allowed by C are not available. The WheelSwitch will check your format and suggest an alternative if it does not like it. If the Format is not specified, then the WheelSwitch calculates it based on the low and high limits and the precision.

+
+ + + + +
% 6.2f%+6.2fTime: % 6.2f sec
10.00+10.00Time: 10.00 sec
99.00+99.00Time: 99.00 sec
-99.00-99.00Time: -99.00 sec
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute-members.html new file mode 100644 index 0000000..31a1f76 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute-members.html @@ -0,0 +1,84 @@ + + + + + + + List of All Members for DynamicAttribute | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for DynamicAttribute

+

This is the complete list of members for DynamicAttribute, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute.html b/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute.html new file mode 100644 index 0000000..81eddd3 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-dynamicattribute.html @@ -0,0 +1,226 @@ + + + + + + + DynamicAttribute QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

DynamicAttribute QML Type

+ + +

Specifies items visibility. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+

Four process variables can be speficied for the calculation.

+ +

Property Documentation

+ +
+
+ + +

+altCalc : string

+

An alternative expression with the same syntax as visibilityCalc.

+
+
+ +
+
+ + +

+altCalcResult : string

+

Result from altCalc expression.

+
+
+ +
+
+ + +

+channel : string

+

Name of the main process variable

+
+
+ +
+
+ + +

+channelB : string

+

Name of the second process variable

+
+
+ +
+
+ + +

+channelC : string

+

Name of the third process variable

+
+
+ +
+
+ + +

+channelD : string

+

Name of the forth process variable

+
+
+ +
+
+ + +

+connected : bool

+

Whether all process variables are connected

+
+
+ +
+
+ + +

+visibility : bool

+

true or false as determined by visibilityMode and visibilityCalc.

+
+
+ +
+
+ + +

+visibilityCalc : string

+

An expression that determines whether the object is displayed or not. The expression should return 0 for false and anything else for true. The following symbols can be used in the expression.

+
    +
  • A - main process variable value
  • +
  • B - second process variable value
  • +
  • C - third process variable value
  • +
  • D - forth process variable value
  • +
  • E - Not used
  • +
  • F - Not used
  • +
  • G - main process variable element count
  • +
  • H - main process variable upper limit
  • +
  • I - main process variable alarm status
  • +
  • J - main process variable alarm severity
  • +
  • K - main process variable precision
  • +
  • L - main process variable lower limit
  • +
+
+
+ +
+
+ + +

+visibilityMode : enumeration

+
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle-members.html new file mode 100644 index 0000000..eb3d6ca --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for EdgeStyle | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for EdgeStyle

+

This is the complete list of members for EdgeStyle, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle.html b/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle.html new file mode 100644 index 0000000..41450fb --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-edgestyle.html @@ -0,0 +1,110 @@ + + + + + + + EdgeStyle QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

EdgeStyle QML Type

+ + +

Enums of the outline style. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+EdgeStyle : enumeration

+
    +
  • EdgeStyle.Solid
  • +
  • EdgeStyle.Dash
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle-members.html new file mode 100644 index 0000000..c9ec381 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for FillStyle | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for FillStyle

+

This is the complete list of members for FillStyle, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle.html b/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle.html new file mode 100644 index 0000000..8c5e930 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-fillstyle.html @@ -0,0 +1,110 @@ + + + + + + + FillStyle QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

FillStyle QML Type

+ + +

Enums of the item filling style. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+FillStyle : enumeration

+
    +
  • FillStyle.Solid
  • +
  • FillStyle.Outline
  • +
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-textformat-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-textformat-members.html new file mode 100644 index 0000000..0efacdd --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-textformat-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for TextFormat | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for TextFormat

+

This is the complete list of members for TextFormat, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-textformat.html b/software/CSDataQuick/docs/qml-csdataquick-components-textformat.html new file mode 100644 index 0000000..a39d051 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-textformat.html @@ -0,0 +1,121 @@ + + + + + + + TextFormat QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

TextFormat QML Type

+ + +

Enums of supported text format. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+

This class holds the enums of the supported text format.

+

See also Utils::convert.

+ +

Property Documentation

+ +
+
+ + +

+TextFormat : enumeration

+
+ + + + + + + + + + + +
TextFormat.DecimalThe text is a number with or without a decimal point, but not in exponential notation. E.g.10000.00 or 10000. Very large numbers, which do not fit in the allocated space for text, are converted to exponential regardless. It is what is returned by the EPICS routine cvtDoubleToString().
TextFormat.ExponentialThe text is in exponential notation. E.g. 1.00e+04.
TextFormat.EngNotationThe text is in engineering notation. E.g. 10.00e+03.
TextFormat.CompactThe text is supposedly in the most compact form of decimal or exponential. (Similar to the %g format in C.) The form may not be the most compact, however. It is what is returned by the EPICS routine cvtDoubleToCompactString().
TextFormat.TruncatedThe text is truncated to the largest integer. E.g. 10000.
TextFormat.HexadecimalThe text is truncated to the nearest integer and shown in hexadecimal. E.g. 0x3e8. Input is interpreted as hexadecimal.
TextFormat.OctalThe text is truncated to the nearest integer and shown in octal. E.g. 01750. Input is interpreted as octal.
TextFormat.StringThis is the same as decimal except that for large numbers or precision, it can be in exponential format. It is what is returned by the EPICS routine cvtDoubleToString().
TextFormat.SexagesiamlThe text is in degrees or hours, minutes, and seconds with colons between the three fields. E.g. 12:45:10.2. The degrees or hours field is the integer part of the number, and the fractional part is expressed as an integer number of minutes and seconds plus fractions of a second. The example, 12:45:10.2, is the number 12.752833 expressed as 12 degrees or hours, 45 minutes, and 10.2 seconds. The precision determines the number of digits after the first colon. For precisions of 0, 1, 2, 3, 4, 5, and 6 the number above would be expressed as 13, 12:5, 12:45, 12:45:1, 12:45:10, 12:45:10.2, and 12:45:10.20, respectively. On input colons may be replaced by spaces or omitted, and a decimal point may be used. The inputs 10.75, 10:45, 10.45.0, and 10 45 00 are all treated as a quarter to eleven. The inputs ‑1, :‑1, and ::‑1 are interpreted as ‑1:00:00, ‑:01:00, and ‑0:00:01, respectively.
TextFormat.SexagesimalDMSThis is the same as sexagesimal except that the number is assumed to be in radians and is expressed as degrees, minutes, and seconds with 2p radians representing 360 degrees. On input the number is multiplied by 180/p and then converted to sexagesimal as above. On output the number is converted as sexagesimal above and then multiplied by p/180 to get radians.
TextFormat.SexagesimalHMSThis is the same as sexagesimal except that the number is assumed to be in radians and is expressed as hours, minutes, and seconds with 2p radians representing 24 hours. On input the number is multiplied by 12/p and then converted to sexagesimal as above. On output the number is converted as sexagesimal above and then multiplied by p/12 to get radians.
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-utils-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-utils-members.html new file mode 100644 index 0000000..8e7661a --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-utils-members.html @@ -0,0 +1,97 @@ + + + + + + + List of All Members for Utils | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for Utils

+

This is the complete list of members for Utils, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-utils.html b/software/CSDataQuick/docs/qml-csdataquick-components-utils.html new file mode 100644 index 0000000..0e14a78 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-utils.html @@ -0,0 +1,374 @@ + + + + + + + Utils QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Utils QML Type

+ + +

Helper functions. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Methods

+ + + +

Detailed Description

+

This is a group of helper functions, which are called by QML components.

+ +

Method Documentation

+ +
+
+ + +

+double calculate(expression, input)

+

Evalute an expression based on given input variables. This calls postfix and calcPerform functions from EPICS base.

+
+
+ +
+
+ + +

+string convert(TextFormat format, real value, int precision)

+

Convert a number value with given format. This routine calls cvsFast functions from EPICS base and also functions from MEDM for certain special formats.

+
+
+ +
+
+ + +

+copyToClipboard(text)

+

Copy the text to the global clipboard.

+
+
+ +
+
+ + +

+Window createComponentByFile(display, filePath, macro)

+

Create a qml component from a file with given filePath with macro expansion.

+

It calls parser library to create the qml source, and then call QQmlComponent to create an instance. The QQmlEngine used is which display was created in.

+
+
+ +
+
+ + +

+Window createDisplay(qml, display, filePath)

+

Create a top level window based on qml source, represented by filePath. The QQmlEngine used is which display was created in.

+
+
+ +
+
+ + +

+Window createDisplayByFile(display, filePath, macro)

+

Create a top level window from a file with given filePath with macro expansion. The file can be either ADL or QML.

+

It calls parser library to create the qml source, and then calls Utils::createDisplay to actually create the display window. The QQmlEngine used is which display was created in.

+
+
+ +
+
+ + +

+string currentDateTime()

+

Return the current time in the form of "yyyy-MM-dd HH:mm:ss".

+
+
+ +
+
+ + +

+bool execute(program)

+

Execute a program. If program ends with "&", the new process will be detached. Otherwise it will wait for the new process to finish and return the exit code.

+

See also QProcess::startDetached() and QProcess::execute().

+
+
+ +
+
+ + +

+string format(format, number)

+

Format a number with given format,

+

See also QString::asprintf().

+
+
+ +
+
+ + +

+string formatString(data, format, precision)

+

Convert control system data according to format and precision.

+
+
+ +
+
+ + +

+var getProperty(object, name)

+

Returns the value of the object's name property.

+
+
+ +
+
+ + +

+url isDisplayFile(fileName)

+

Check wether fileName is a supported display file.

+
+
+ +
+
+ + +

+point mapToGlobal(item, point)

+

Maps the given point in this item's coordinate system to the equivalent point within global screen coordinate system, and returns the mapped coordinate.

+

This is an equivalent implementation of QQuickItem::mapToGlobal that first appeared in Qt 5.7.

+
+
+ +
+
+ + +

+string openUrl(url)

+

Open the given url,

+

See also QDesktopServices::openUrl().

+
+
+ +
+
+ + +

+Window parentWindow(item)

+

Return the parent window for item.

+
+
+ +
+
+ + +

+double parse(int format, QString textValue)

+

Parse a numeric value in format from textValue. This is the opposite of Utils::convert.

+
+
+ +
+
+ + +

+list<object> parseExecList()

+

Return the command list defined by MEDM_EXEC_LIST environment variable. Each command object contains the following property,

+
    +
  • label - menu text
  • +
  • command - system command
  • +
+
+
+ +
+
+ + +

+object parseX11Geometry(geometry)

+

Parse a token of a X11 geometry specification, e.g. "200x100+10-20". The returned map contains the following fields,

+
    +
  • xOffset - x offset
  • +
  • yOffset - y offset
  • +
  • corner - the corner from where the offset counts, see Qt::Corner.
  • +
  • width - window width
  • +
  • height - window height
  • +
+
+
+ +
+
+ + +

+int qtVersion()

+

Return the QT_VERSION macro.

+
+
+ +
+
+ + +

+resizeChildItems(parent, rw, rh)

+

Resize all child items from parent by rw horizontally and rh vertically, and move their top left position as well.

+
+
+ +
+
+ + +

+url searchDisplayFile(fileName, filePath)

+

Search a display file with given fileName from the current directory, the filePath and environment variables specific to the display file type

+
    +
  • EPICS_DISPLAY_PATH (.adl)
  • +
  • EDMDATAFILES (.edl)
  • +
  • CAQTDM_DISPLAY_PATH (.ui)
  • +
  • QML_DISPLAY_PATH (.qml)
  • +
+
+
+ +
+
+ + +

+vectorGet(vector, array, index, count)

+

Get the subarray from a vector variant into array, starting at position index (default 0). If count is -1 (the default), all elements after index are included.

+

See also QVector::mid.

+
+
+ +
+
+ + +

+vectorSet(vector, value, index)

+

Set the index element from vector variant to value and return the modified copy.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs-members.html new file mode 100644 index 0000000..1749066 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs-members.html @@ -0,0 +1,79 @@ + + + + + + + List of All Members for UtilsJS | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for UtilsJS

+

This is the complete list of members for UtilsJS, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs.html b/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs.html new file mode 100644 index 0000000..1280c4d --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-utilsjs.html @@ -0,0 +1,161 @@ + + + + + + + UtilsJS QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

UtilsJS QML Type

+ + +

Javascript Utility Functions. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Methods

+ + + +

Detailed Description

+ +

Method Documentation

+ +
+
+ + +

+dumpCSData(data)

+

This function returns a printable string representation of the data object.

+
+
+ +
+
+ + +

+formatString(value, format, type, precision, states)

+

Format the value based on data type.

+
+ + + + + +
typeoutput
Enumstring at the value index from the states list.
Stringas it is.
Charstring by joinning the char array with ending null character removed.
Numberstring determined by format and precision.
+

See also Utils::convert.

+
+
+ +
+
+ + +

+getBestFontSize(item_height, with_frame)

+

Calculates the font size/family based on item height.

+

This function uses an imperically determined (item height, font size) table. Actually two sets of tables are defined. One for items without enclosing frame, e.g. CSText. One for items with a border frame, e.g. CSTextEntry. The reason for this manual tweak is to match MEDM displays.

+

The font family is either Dejavu Sans Mono for font size less than 20 or Helvetica otherwise.

+
+
+ +
+
+ + +

+popupDataLimitsDialog(parent)

+

This function popups up a dialog for user to configure the limits settings.

+
+
+ +
+
+ + +

+popupPromptDialog(parent, title, hint, input)

+

This function popups a dialog to obtains user's input.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode-members.html new file mode 100644 index 0000000..6c56923 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode-members.html @@ -0,0 +1,75 @@ + + + + + + + List of All Members for VisibilityMode | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for VisibilityMode

+

This is the complete list of members for VisibilityMode, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode.html b/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode.html new file mode 100644 index 0000000..ff1b050 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-visibilitymode.html @@ -0,0 +1,112 @@ + + + + + + + VisibilityMode QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

VisibilityMode QML Type

+ + +

Enums of how items visibility changes. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+VisibilityMode : enumeration

+
+ + + + +
VisibilityMode.StaticThe item is displayed always.
VisibilityMode.IfNotZeroThe object is displayed if the process variable is not zero.
VisibilityMode.IfZeroThe object is displayed if the object is zero.
VisibilityMode.CalcUse calc expression to determine the visability.
+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager-members.html b/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager-members.html new file mode 100644 index 0000000..b777ed1 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager-members.html @@ -0,0 +1,80 @@ + + + + + + + List of All Members for WindowManager | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for WindowManager

+

This is the complete list of members for WindowManager, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager.html b/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager.html new file mode 100644 index 0000000..515ec8b --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-components-windowmanager.html @@ -0,0 +1,182 @@ + + + + + + + WindowManager QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

WindowManager QML Type

+ + +

Singlton object to manage all opened windows. More...

+ +
+
Import Statement: import CSDataQuick.Components 1.0
+ +

Properties

+ + +

Methods

+ + + +

Detailed Description

+

Example:

+
ListView {
+    model: WindowManager.entries
+    delegate: Text {
+        text: model.modelData.filePath
+    }
+}
+ +

Property Documentation

+ +
+
+ + +

+entries : ListModel

+

The list of all opened windows. Each list element has the follow properties,

+
    +
  • filePath - absolute file path this window represents
  • +
  • macro - macro expansion used to create this window
  • +
  • window - the window instance
  • +
+
+
+

Method Documentation

+ +
+
+ + +

+appendWindow(window)

+

Append an opened window instance window.

+
+
+ +
+
+ + +

+closeAllWindow()

+

Close and delete all opened windows.

+
+
+ +
+
+ + +

+closeWindow(window)

+

Close and delete a window instance window.

+
+
+ +
+
+ + +

+Window findWindow(absFilePath, macro)

+

Search for a window instance opened with absFilePath and macro. It will return the found instance or null otherwise.

+
+
+ +
+
+ + +

+printWindow(window)

+

Grab a screenshot of window and send to printer.

+

The actual printing is performed by Qt Print Support.

+

See also QQuickWindow::grabWindow.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdata-members.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdata-members.html new file mode 100644 index 0000000..9778172 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdata-members.html @@ -0,0 +1,88 @@ + + + + + + + List of All Members for CSData | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSData

+

This is the complete list of members for CSData, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdata.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdata.html new file mode 100644 index 0000000..024de2c --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdata.html @@ -0,0 +1,262 @@ + + + + + + + CSData QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSData QML Type

+ + +

Object that represents control system data. More...

+ +
+
Import Statement: import CSDataQuick.Data 1.0
Instantiates: QCSData
+ +

Properties

+ + + +

Detailed Description

+

Example:

+
CSData {
+    id: voltagePV
+    source: 'MTEST:Voltage'
+    onValueChanged: console.log(timeStamp, ' voltage = ', value)
+}
+ +

Property Documentation

+ +
+
+ + +

+accessRight : int

+

This property holds the access right of the data.

+

This is a bitwise or of QCSData::AccessFlag.

+
+
+ +
+
+ + +

+alarm : CSDataAlarm

+

This property holds the alarm information.

+
+
+ +
+
+ + +

+connected : bool

+

This property indicates wether the data is connected to a valid source.

+
+
+ +
+
+ + +

+count : int

+

This property holds the number of elements of the data.

+
+
+ +
+
+ + +

+extraProperties : map

+

This property holds any other properties specific to this instance.

+
+
+ +
+
+ + +

+fieldType : enumeration

+

This property holds native type of the data.

+

See also QCSData::FieldType.

+
+
+ +
+
+ + +

+host : string

+

This property holds the host name where the data source exists.

+
+
+ +
+
+ + +

+precision : int

+

Precision of the data in case of float or double type.

+
+
+ +
+
+ + +

+range : CSDataRange

+

This property holds the limits information.

+
+
+ +
+
+ + +

+source : string

+

This property holds the data's source name.

+

The source name is of form "[engine://]data_id". engine:// selects the data engine where this data comes. If it is omitted, the default data engine is selected, which is EPICS channel access engine. data_id is the unique id to the data inside the selected data engine.

+

"ca://my_pv" or simply "my_pv" both specify the data comes from process variable my_pv.

+

Note: If empty source name is assigned, the data will be be disconnected from the data engine if connected, and reset to its initial state.

+
+ +
+
+ + +

+stateStrings : list

+

This property holds the string representation of data's enumerated states.

+
+
+ +
+
+ + +

+timeStamp : Date

+

This property holds the timestamp of data's last change.

+
+
+ +
+
+ + +

+units : string

+

This property holds the physical meaning of the data.

+
+
+ +
+
+ + +

+value : var

+

This property holds the value of the data.

+

The value can be of scalar, array type or anything that the underlying data engine provides. However it might be upcasted to QML Basic Types. In case of array type, the Javascript environment can only understand QVector<int>, QVector<double>.

+

Note: Qt 5.6 and below does not understand QVector type at all. It requires helper functions for element-wise operation.

See also Utils::vectorGet and Utils::vectorSet.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm-members.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm-members.html new file mode 100644 index 0000000..0498e4b --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm-members.html @@ -0,0 +1,77 @@ + + + + + + + List of All Members for CSDataAlarm | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSDataAlarm

+

This is the complete list of members for CSDataAlarm, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm.html new file mode 100644 index 0000000..e867259 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdataalarm.html @@ -0,0 +1,131 @@ + + + + + + + CSDataAlarm QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSDataAlarm QML Type

+ + +

The object provides alarm information about the data. More...

+ +
+
Import Statement: import CSDataQuick.Data 1.0
Instantiates: QCSDataAlarm
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+message : string

+

This property holds the alarm message.

+
+
+ +
+
+ + +

+severity : enumeration

+

This property holds the alarm severity.

+

See also QCSDataAlarm::Severity.

+
+
+ +
+
+ + +

+status : int

+

This property holds the alarm status.

+

The actual meaning depends on data engine.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange-members.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange-members.html new file mode 100644 index 0000000..05a4c67 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange-members.html @@ -0,0 +1,76 @@ + + + + + + + List of All Members for CSDataRange | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for CSDataRange

+

This is the complete list of members for CSDataRange, including inherited members.

+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange.html b/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange.html new file mode 100644 index 0000000..4bcbb07 --- /dev/null +++ b/software/CSDataQuick/docs/qml-csdataquick-data-csdatarange.html @@ -0,0 +1,118 @@ + + + + + + + CSDataRange QML Type | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

CSDataRange QML Type

+ + +

This class provides limits information about the data. More...

+ +
+
Import Statement: import CSDataQuick.Data 1.0
Instantiates: QCSDataRange
+ +

Properties

+ + + +

Detailed Description

+ +

Property Documentation

+ +
+
+ + +

+lower : real

+

This property holds the lower limit.

+
+
+ +
+
+ + +

+upper : real

+

This property holds the upper limit.

+
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qmlparser-members.html b/software/CSDataQuick/docs/qmlparser-members.html new file mode 100644 index 0000000..a9bc4e0 --- /dev/null +++ b/software/CSDataQuick/docs/qmlparser-members.html @@ -0,0 +1,143 @@ + + + + + + + List of All Members for QMLParser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for QMLParser

+

This is the complete list of members for QMLParser, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/qmlparser.html b/software/CSDataQuick/docs/qmlparser.html new file mode 100644 index 0000000..3e698b7 --- /dev/null +++ b/software/CSDataQuick/docs/qmlparser.html @@ -0,0 +1,145 @@ + + + + + + + QMLParser Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

QMLParser Class

+ +

Parse CSDataQuick QML files. More...

+ +
+
Header: #include <QMLParser> +
Inherits: QCSParser
+ +

Public Functions

+
+ + +
QMLParser(QObject *parent = Q_NULLPTR)
virtual ~QMLParser()
+ +

Reimplemented Public Functions

+
+ + + +
virtual QString description()
virtual QString extension()
virtual QString parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial)
+
    +
  • 3 public functions inherited from QCSParser
  • +
  • 32 public functions inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 2 properties inherited from QCSParser
  • +
  • 1 property inherited from QObject
  • +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Parse CSDataQuick QML files.

+

This parser actually only reads the QML file and performs macros expansion.

+
+ +
+

Member Function Documentation

+ +

QMLParser::QMLParser(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of QMLParser.

+ +

[virtual] QMLParser::~QMLParser()

+

Destroys the instance of QMLParser. The destructor is virtual.

+ +

[virtual] QString QMLParser::description()

+

Reimplemented from QCSParser::description().

+ + +

[virtual] QString QMLParser::extension()

+

Reimplemented from QCSParser::extension().

+ + +

[virtual] QString QMLParser::parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial)

+

Reimplemented from QCSParser::parseDisplayFile().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/releases.html b/software/CSDataQuick/docs/releases.html new file mode 100644 index 0000000..76d4252 --- /dev/null +++ b/software/CSDataQuick/docs/releases.html @@ -0,0 +1,182 @@ + + + + + + + Release Notes | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Release Notes

+ + +
+ +

1.2.1 (08-10-2021)

+ +

quick components

+
    +
  • Update QCustomPlot to 2.1
  • +
  • Various Qt 6 compatiblity changes
  • +
+ +

file plugins

+
    +
  • various caqtdm UI compatiblity changes
  • +
+ +

1.2.0 (21-06-2021)

+ +

core libs

+ + +

quick components

+
    +
  • BaseWindow and CSComposite propogate the geometry change to their child items.
  • +
  • Alias on/offMessage properties to press/releaseMessage and mark them obsolete. This is necessary to be able to read the property in quick designer.
  • +
  • Fix the binding loop error of CSTextUpdate implicitHeight.
  • +
  • Fix CSText and CSTextUpdate implicitHeight to 16px if fontSizeMode is Text.FixedSize.
  • +
  • Fix Stacking.RowColumn of CSChoiceButton. Now it tries to fit buttons in a square GridLayout.
  • +
  • Fix parsing of certain malformated MJPEG streams.
  • +
+ +

apps

+
    +
  • Add csdq_ prefix to applications.
  • +
  • Viewer will quit when the last window closes if not running in server mode.
  • +
  • Viewer will not show main window with -noMsg option.
  • +
+ +

build system

+
    +
  • Create cmake functions to build libs/plugins/apps.
  • +
+ +

1.1.0 (01-10-2018)

+ +

core libs

+
    +
  • Add a new type of data engine local. The source scheme is loc://<source>[.{json object}] The trailing json object could be used to configure the data type and value.
  • +
  • Refactor file parsing to be plugin based, supporting ADL, EDL, QML and UI files.
  • +
  • Refactor utils.cpp to a shared library.
  • +
+ +

quick components

+
    +
  • Re-implement UtilsJS.formatString and DynamicAttribute in C++.
  • +
  • dynamicAttribute and limits properties can be used in quick designer. The previouse workaround is removed, which means the previous designer generated files should be updated, by replacing "dynamicAttribute_" with "dynamicAttribute.", "limits_" with "limits.".
  • +
  • Add custom property editor for CSMJPEGVideo in quick designer.
  • +
  • Add font and fontSizeMode properties to CSText and CSTextUpdate for custom font selection.
  • +
+ +

apps

+
    +
  • Rename ADLViewer to Viewer since it displays more than just adl files.
  • +
+ +

1.0.0 (23-03-2018)

+
    +
  • Fix handling of empty CSData::source to disconnect and reset the data.
  • +
  • Save/restore main windows's geometry.
  • +
  • Optimise ca data engine to call ca_pend_io every 100ms. It used to call ca_flush_io for every operation.
  • +
  • Remove qmake project files and use cmake only.
  • +
  • Restructure documents.
  • +
  • Restructure and clean up source code.
  • +
+ +

1.0.0b2 (16-10-2017)

+
    +
  • Add package creation using CPack.
  • +
  • Add macro input prompt to ADLViewer open file dialog.
  • +
  • Add an option to draw arrows at the end of an CSPolyline item.
  • +
+ +

1.0.0b1 (15-09-2017)

+
    +
  • First public beta release.
  • +
+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/style/online.css b/software/CSDataQuick/docs/style/online.css new file mode 100644 index 0000000..bb949c8 --- /dev/null +++ b/software/CSDataQuick/docs/style/online.css @@ -0,0 +1,1752 @@ +#navbar { + position:fixed; + top:0; + left:0; + z-index:100; + background:#fff; + width:100% +} +#navbar .container { + overflow:visible +} +.fixed .container { + overflow:visible +} +.box-shadowed-nav #navbar { + border-bottom:1px solid #eee +} +#navbar .navbar-header { + position:relative +} +#navbar .navbar-toggle { + display:none; + float:right; + line-height:18px; + min-width:95px; + position:relative; + text-align:center; + border-left:1px solid #eee; + border-right:1px solid #eee; + padding:10px 0 10px 0 +} +#navbar .navbar-toggle:hover figure { + background:#5caa15 +} +#navbar .navbar-toggle span { + color:#bdbebf; + font-weight:300 +} +#navbar .navbar-toggle figure { + background:#7fc241; + border-radius:100%; + -webkit-border-radius:100%; + -moz-border-radius:100%; + transition:all 0.2s ease-in-out; + -webkit-transition:all 0.2s ease-in-out; + -moz-transition:all 0.2s ease-in-out; + -ms-transition:all 0.2s ease-in-out; + -o-transition:all 0.2s ease-in-out; + height:26px; + width:34px; + padding:8px 0 0 0; + margin-top:3px; + margin-left:auto; + margin-right:auto; + text-align:center +} +#navbar .navbar-toggle figure span.line { + display:inline-block; + width:1.125em; + height:0.1875em; + background:#fff; + transition:0.3s; + position:relative; + vertical-align:middle; + margin-top:-3px +} +#navbar .navbar-toggle figure span.line:before,#navbar .navbar-toggle figure span.line:after { + display:inline-block; + width:1.125em; + height:0.1875em; + background:#fff; + position:absolute; + left:0; + content:''; + -webkit-transform-origin:0.28571rem center; + transform-origin:0.28571rem center; + transition:0.3s; + -webkit-transition:0.3s; + -moz-transition:0.3s; + -ms-transition:0.3s; + -o-transition:0.3s +} +#navbar .navbar-toggle figure span.line:before { + top:6px +} +#navbar .navbar-toggle figure span.line:after { + top:-6px +} +#navbar .navbar-toggle.opened figure { + background:#5caa15 +} +#navbar .navbar-toggle.opened span { + color:#5caa15 +} +#navbar .navbar-toggle.opened span.line { + background:transparent +} +#navbar .navbar-toggle.opened span.line:before,#navbar .navbar-toggle.opened span.line:after { + -webkit-transform-origin:50% 50%; + -moz-transform-origin:50% 50%; + transform-origin:50% 50%; + top:0; + width:23px; + margin-left:-2px +} +#navbar .navbar-toggle.opened span.line:before { + transform:rotate3d(0, 0, 1, 45deg); + -webkit-transform:rotate3d(0, 0, 1, 45deg); + -moz-transform:rotate3d(0, 0, 1, 45deg); + -ms-transform:rotate3d(0, 0, 1, 45deg); + -o-transform:rotate3d(0, 0, 1, 45deg); + left:0 +} +#navbar .navbar-toggle.opened span.line:after { + transform:rotate3d(0, 0, 1, -45deg); + -webkit-transform:rotate3d(0, 0, 1, -45deg); + -moz-transform:rotate3d(0, 0, 1, -45deg); + -ms-transform:rotate3d(0, 0, 1, -45deg); + -o-transform:rotate3d(0, 0, 1, -45deg) +} +#navbar .navbar-oneQt { + display:inline; + float:left; + width:31px; + padding:20px 8px; + margin:0 15px 0 0 +} +#navbar .navbar-oneQt:before { + content:attr(data-icon); + position:absolute; + top:15px; + left:0; + color:#80c342; + font-family:'Qt Icons'; + line-height:1; + font-size:3.125em; + transition:all 0.2s ease-in-out; + -webkit-transition:all 0.2s ease-in-out; + -moz-transition:all 0.2s ease-in-out; + -ms-transition:all 0.2s ease-in-out; + -o-transition:all 0.2s ease-in-out +} +.navbar-oneQt { + color: #80c342 !important; +} +.navbar-oneQt:hover { + color: #80c342; +} +#navbar .navbar-menu { + width:auto; + float:left +} +.lt-ie9 #navbar { + border-bottom:1px solid #ddd +} +#mainmenu { + float:left; + list-style:none; + margin-left:16px +} +#mainmenu li { + float:left; + margin-left:0; + list-style-type:none !important +} +#mainmenu li a { + display:block; + padding:29px 0.7em; + font-size:1.125em; + font-weight:300; + line-height:20px; + height:80px; + color:#26282a; + text-decoration:none; + border:0px solid #80c342; + -webkit-transition:all 0.2s ease-in-out; + box-sizing:border-box; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + *behavior:url(http://epics.web.psi.ch/software/CSDataQuick/docs/style/boxsizing.htc) +} +#mainmenu li a:hover { + color:#5caa15; + border-bottom:4px solid #80C342 +} +#mainmenu li.current-menu-item a { + color:#5caa15; + border-bottom:4px solid #80C342 +} +#menuextras, #mainmenu, #menuextraslanguages { + margin-bottom:0 + } +#menuextras { + display:inline-block; + float:right; + list-style-type:none; + margin-right:0; + margin-left:0; + letter-spacing:-0.31em; + line-height:0 +} +#menuextras li { + letter-spacing:normal; + float:left; + display:inline-block +} +#menuextras li a { + display:inline-block; + text-align:center; + height:80px; + border-left:1px solid #eee; + padding-top:14px; + box-sizing:border-box; + overflow:hidden; + min-width:85px; + font-weight:100 +} +#menuextras li:last-child a { + border-right:1px solid #eee; +} +#menuextras li a:before { + display:inline-block; + font-family:'Qt Icons'; + content:attr(data-icon); + font-size:2.125em; + width:100%; + color:#80c342; + line-height:1; + transition:all 0.2s ease-in-out; + -webkit-transition:all 0.2s ease-in-out; + -moz-transition:all 0.2s ease-in-out; + -ms-transition:all 0.2s ease-in-out; + -o-transition:all 0.2s ease-in-out +} +#menuextras li a:hover:before { + color:#5caa15 +} +#menuextras .search.open a { + color:#006325 +} +#menuextras .search a { + border-right:1px solid #eee +} +#menuextras li a span { + color:#bdbebf; + display:inline-block; + overflow:hidden; + max-height:30px; + transition:max-height 0.2s ease-in-out; + -webkit-transition:max-height 0.2s ease-in-out; + -moz-transition:max-height 0.2s ease-in-out; + -ms-transition:max-height 0.2s ease-in-out; + -o-transition:max-height 0.2s ease-in-out; + line-height:1.4; + font-size:0.875em +} +@media (min-width: 1320px) { + .context .flowListDiv dl.flowList { + -webkit-column-count:3; + -moz-column-count:3; + column-count:3 + } +} +@media (min-width: 1120px) { + #navbar.fixed,#navbar.shadow_bottom { + -moz-box-shadow:0px 0px 8px rgba(0,0,0,0.2); + -webkit-box-shadow:0px 0px 8px rgba(0,0,0,0.2); + box-shadow:0px 0px 8px rgba(0,0,0,0.2) + } + #navbar.fixed #menuextras li a,#navbar.shadow_bottom #menuextras li a { + padding-top:9px; + height:50px + } + #navbar.fixed #menuextras li a span,#navbar.shadow_bottom #menuextras li a span { + max-height:0 + } + #navbar.fixed #menuextras li a:before,#navbar.shadow_bottom #menuextras li a:before { + font-size:30px + } + #navbar.fixed #mainmenu li a { + height:50px; + padding:14px 0.7em + } + #navbar.fixed #mainmenu li a:hover { + border-bottom:4px solid #5caa15 + } + #navbar.fixed .navbar-toggle { + padding:13px 14px 9px + } + #navbar.fixed #menuextras li.navbar-search { + padding:0px 0 + } + #navbar.fixed #menuextras ul.menuextraslinks,#navbar.fixed #menuextras ul.menuextraslanguages { + display:none + } + #navbar.fixed .navbar-oneQt:before { + font-size:35px; + top:7px + } + #navbar.fixed #mainmenu li.current-menu-item a { + border-bottom:4px solid #80C342 + } + .flowListDiv dl.flowList { + -webkit-column-count:2; + -moz-column-count:2; + column-count:2 + } +} +@media (max-width: 1120px) { + #navbar { + padding:0; + position:relative + } + #navbar .container { + max-width:100% + } + #navbar .menuextraslanguages { + bottom:10px !important; + right:0 + } + #navbar .menuextraslanguages li a { + color:#7fc241 !important + } + #navbar .menuextraslanguages li.active a,#navbar .menuextraslanguages li a:hover { + border-color:#7fc241 !important + } + #navbar .container { + padding:0 + } + #navbar .navbar-toggle { + display:block + } + #navbar .navbar-oneQt,#navbar.fixed .navbar-oneQt,#navbar .navbar-oneQt:hover { + margin-left:0; + height:26px; + width:22px; + padding:7px 20px 7px 15px + } + #navbar .navbar-oneQt:before { + left:20px + } + #navbar .navbar-menu { + max-height:0; + overflow:hidden; + width:100%; + border-top:1px solid #eee; + -webkit-transition:all 600ms ease-in-out; + -moz-transition:all 600ms ease-in-out; + -o-transition:all 600ms ease-in-out; + transition:all 600ms ease-in-out; + position:relative + } + #mainmenu { + float:none; + width:100%; + padding:0; + margin:0 + } + #mainmenu li { + float:none; + list-style:none + } + #mainmenu li:nth-child(odd) { + background:rgba(0,0,0,0) + } + #mainmenu li a,#navbar.fixed #mainmenu li a { + padding:10px; + border-left:3px solid #fff; + height:auto; + width:100% + } + #mainmenu li.current-menu-item a,#navbar.fixed #mainmenu li.current-menu-item a { + border-bottom:none; + border-left:3px solid #5caa15; + padding:10px + } + #mainmenu li a:hover { + border-bottom:0; + padding:10px; + border-left:3px solid #5caa15 + } + #navbar.fixed { + -moz-box-shadow:0px 0px 0px rgba(0,0,0,0); + -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0); + box-shadow:0px 0px 0px rgba(0,0,0,0) + } + .lt-ie9 #navbar.fixed { + border-bottom:none + } + #menuextras li.navbar-search { + padding:5px 0 + } + #footerbar .container { + padding:0 + } + body .main { + margin-top:0px + } + #footerbar .footer-main .footer-nav { + padding:3.9% 0 3.9% 3%; + border-bottom:1px solid #413d3b; + float:none; + display:block; + width:auto + } + #footerbar .footer-main .theqtcompany { + clear:both; + float:left; + margin:30px 0 28px 3% + } + #footerbar .footer-main .footer-social { + float:left; + padding:30px 0px 0px 3% + } + #footerbar #menu-footer-submenu { + clear:both; + float:none; + display:block; + padding:0px 0px 3.9% 3% + } + ul#menu-footer-submenu { + margin-left: 0 + } +} +.in-page-nav { + width:100%; + background:#eeeeee +} +.in-page-nav ul { + margin:0 auto; + letter-spacing:-0.31em; + max-width:1180px; + text-align:center +} +.in-page-nav ul li { + display:inline-block; + letter-spacing:normal +} +.in-page-nav ul li a { + color:#26282a; + padding:25px 10px; + display:inline-block +} +body.qt-account #navbar .navbar-oneQt { + width:auto; + height:auto +} +body.qt-account #navbar .navbar-oneQt:before { + left:0; + position:relative; + display:inline-block; + vertical-align:middle; + top:0; + margin-right:20px +} +body.qt-account #navbar .navbar-oneQt h2 { + margin:0; + color:#000; + display:inline-block; + vertical-align:middle +} +.landing header[role="banner"] { + background:#26282a +} +.landing header[role="banner"] figure { + max-width:1180px; + margin:auto; + position:relative +} +.landing header[role="banner"] figure img { + max-width:100% +} +.landing header[role="banner"] figcaption { + color:#fff; + position:absolute; + left:0px; + width:100%; + text-align:center +} +.landing header[role="banner"] figcaption.top { + top:0 +} +.landing header[role="banner"] figcaption.bottom { + bottom:0 +} +.landing header[role="banner"] figcaption h1 { + margin:50px auto 0 auto; + max-width:70%; + font-weight:600 +} +.landing header[role="banner"] figcaption h3 { + margin-bottom:40px +} +.cookies_yum { + background-color:#d6d6d6; + display:none; + line-height:1.625em; + width:100% +} +.cookies_yum img { + width:25px; + top:6px; + display:inline-block; + position:absolute; + left:6px +} +.cookies_yum div { + margin:0 auto; + max-width:1280px; + min-height:30px; + padding:6px 0px 6px 0px; + position:relative +} +.cookies_yum p { + color:#585a5c; + margin:0px; + font-size:0.79em; + display:inline-block; + line-height:1.2; + padding:0 30px 0 50px +} +.cookies_yum p a { + white-space:nowrap +} +.cookies_yum a:hover { + color:white +} +.cookies_yum .close { + width:15px; + height:15px; + background-image:url("../images/cookiebar-x.png"); + background-size:15px 30px; + background-position:top left; + cursor:pointer; + top:13px; + right:13px; + position:absolute; + transition:none; +} +#sidebar-toggle,#toc-toggle { + width:24px; + height:14px; + background-size:24px 28px; + cursor:pointer; + background-image:url("../images/list_expand.png"); + float:right +} +#sidebar-toggle.collapsed, +#toc-toggle.collapsed { + background-position:bottom left +} +#sidebar-content > h2 { + display:none +} +.cookies_yum .close:hover { + background-position:bottom left +} +#bottom_header { + display:block; + position:absolute; + width:100%; + z-index:50; + padding-top:15px +} +#bottom_header .container { + overflow:visible +} +#bottom_header .left { + font-weight:bolder +} +#bottom_header a { + color:white; + transition-duration:0.3s +} +#bottom_header .left a:hover { + padding-left:10px +} +.fixed .menuextraslanguages { + opacity:0; + visibility:hidden +} +@media (max-width: 1120px) { + .fixed .menuextraslanguages { + opacity:1 !important; + visibility:visible !important + } +} +#navbar .menuextraslanguages { + position:absolute; + right:0; + bottom:-35px; + transition:all 0.2s ease-in-out; + -webkit-transition:all 0.2s ease-in-out; + -moz-transition:all 0.2s ease-in-out; + -ms-transition:all 0.2s ease-in-out; + -o-transition:all 0.2s ease-in-out +} +#navbar .menuextraslanguages li { + display:inline; + list-style:none; + margin-left:3px; + padding:0px 4px; + font-size:0.6875em +} +#navbar .menuextraslanguages li.dark a { + color:#868482 +} +#navbar .menuextraslanguages li.dark a:hover { + border:2px solid #868482 +} +#navbar .menuextraslanguages li.active.dark a { + border-color:#868482; + color:#868482 +} +#navbar .menuextraslanguages a { + color:#fff; + padding:2px 4px; + border:2px solid transparent +} +#navbar .menuextraslanguages a:hover,#navbar .menuextraslanguages li.active a { + border:2px solid #fff; + color:#fff +} +#bottom_header .dark,#bottom_header .dark.active { + color:#868482; + transition-duration:0.3s; + border-color:#868482 !important +} +#navbar .big_bar { + width:100%; + height:100px; + background-color:#80C342; + display:none; + position:relative +} +#navbar .big_bar.search { + height:auto; + overflow:hidden; + display:none +} +#navbar .big_bar ::-webkit-input-placeholder { + color:#fff +} +#navbar .big_bar :-moz-input-placeholder { + color:#fff +} +#navbar .big_bar ::-moz-input-placeholder { + color:#fff +} +#navbar .big_bar :-ms-input-placeholder { + color:#fff +} +#navbar .big_bar:hover>div .big_bar_button.account { + background-position:right bottom +} +#navbar .big_bar.account h1 { + padding-top:20px +} +#navbar .big_bar.account h1,#navbar .big_bar.account h1 a { + color:#FFF; + margin-bottom:5px +} +#navbar .big_bar.account h1 a:hover { + color:#328930 +} +#navbar .big_bar_button:hover { + background-position:left bottom; + cursor:pointer +} +#navbar .big_bar_button.account { + background-position:right top +} +#navbar .big_bar input.big_bar_search { + background:none repeat scroll 0 0 transparent; + border:medium none; + color:#fff; + display:block; + float:left; + font-size:4em; + outline:0 none; + width:70%; + line-height:1.3; + height:auto; + margin:10px 5%; + padding:0; + box-sizing:border-box; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + *behavior:url(http://epics.web.psi.ch/software/CSDataQuick/docs/style/boxsizing.htc) +} +#navbar .big_bar_button { + background-color:transparent; + border:none; + width:18%; + transition-duration:0.3s; + display:block; + float:left; + position:relative; + font-family:'QT Icons'; + font-size:3.5em; + color:#fff; + margin:15px 2% 0 0 !important; + text-align:right; + padding-right:2px !important; + transition:all 0.2s ease-in-out; + -webkit-transition:all 0.2s ease-in-out; + -moz-transition:all 0.2s ease-in-out; + -ms-transition:all 0.2s ease-in-out; + -o-transition:all 0.2s ease-in-out +} +#navbar .big_bar_button:focus,#navbar .big_bar_button:hover { + outline:0; + color:#ebebeb +} +.hero_slide>div { + width:80%; + margin:0 auto +} +.hero_slide>div:first-child>div { + width:80%; + margin:0 auto +} +.hero_slide .content { + margin-top:70px +} +.hero_bar { + padding-top:50px; + padding-bottom:18px +} +.hero_bar p { + font-size:0.875em; + text-align:center +} +.hero_bar .arrow { + bottom:65px; + display:block; + margin:0 auto; + position:relative; + right:260px; + width:230px +} +.hero_bar .comment { + margin:0 +} +#footerbar { + background:#26282a; + color:#fff +} +#footerbar.fixed { + bottom:0; + left:0; + width:100% +} +#footerbar .footer-nav { + display:inline; + float:left +} +#footerbar .footer-main .footer-nav li { + float:left; + margin-right:1em +} +#footerbar .footer-main .footer-nav li a { + display:block; + padding:31px 10px 15px 0; + line-height:20px; + height:20px; + color:#d6d6d6 +} +#footerbar .footer-main .footer-nav li a:hover,#footerbar .footer-main .footer-nav li.current-menu-item a { + color:#eee +} +#footerbar .footer-main .footer-nav .sub-menu { + margin-left:0; + margin-bottom:0 +} +#footerbar .footer-main .footer-nav .sub-menu li { + float:none +} +#footerbar .footer-main .footer-nav .sub-menu ul { + padding:1px 1em; + font-size:0.786em; + line-height:8px; + float:none; + color:#5d5b59; + margin-bottom:0 +} +#footerbar .footer-main .footer-nav .sub-menu li a { + padding:1px 0; + font-size:0.786em; + line-height:8px; + float:none; + color:#d6d6d6 +} +#footerbar .footer-main .footer-nav .sub-menu li a:hover,#footerbar .footer-main .footer-nav .sub-menu li.current-menu-item a { + color:#eee +} +#footerbar .theqtcompany { + background:url("http://epics.web.psi.ch/software/CSDataQuick/docs/images/theqtcompany.png") no-repeat; + background-size:100%; + width:215px; + height:68px; + display:inline; + float:right; + margin:29px 0 28px 30px +} +#footerbar .footer-social { + display:inline; + float:right; + padding-top:31px; + width:164px +} +#footerbar .footer-main .footer-social>div { + margin-left:0.1em; + margin-bottom:10px +} +#footerbar .disclaimer { + font-size:0.786em; + line-height:2.73; + color:#868584; + padding-top:20px; + padding-bottom:0.5% +} +#footerbar .disclaimer a { + color:#bdbebf +} +#footerbar .disclaimer a:hover { + color:#d6d6d6 +} +#footerbar .disclaimer ul li { + float:left; + vertical-align:middle; + margin-left:1.18em +} +#footerbar .disclaimer ul li:first-child { + margin-left:0 +} +#footerbar .disclaimer ul.lang-selector a { + color:#506a34; + color:rgba(128,195,66,0.3) +} +#footerbar .disclaimer ul.lang-selector a:hover { + color:#80c342; + color:rgba(128,195,66,0.7) +} +#menu-footer-menu, #menu-footer-menu ul { + margin-left:0; + margin-bottom:0 +} +@font-face { + font-family:'Open Sans'; + font-style:normal; + font-weight:300; + src:local("Open Sans Light"),local("OpenSans-Light"),url(http://fonts.gstatic.com/s/opensans/v10/DXI1ORHCpsQm3Vp6mXoaTYnF5uFdDttMLvmWuJdhhgs.ttf) format("truetype") +} +@font-face { + font-family:'Open Sans'; + font-style:normal; + font-weight:400; + src:local("Open Sans"),local("OpenSans"),url(http://fonts.gstatic.com/s/opensans/v10/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format("truetype") +} +@font-face { + font-family:'Open Sans'; + font-style:normal; + font-weight:600; + src:local("Open Sans Semibold"),local("OpenSans-Semibold"),url(http://fonts.gstatic.com/s/opensans/v10/MTP_ySUJH_bn48VBG8sNSonF5uFdDttMLvmWuJdhhgs.ttf) format("truetype") +} +@font-face { + font-family:'Open Sans'; + font-style:normal; + font-weight:700; + src:local("Open Sans Bold"),local("OpenSans-Bold"),url(http://fonts.gstatic.com/s/opensans/v10/k3k702ZOKiLJc3WVjuplzInF5uFdDttMLvmWuJdhhgs.ttf) format("truetype") +} +@font-face { + font-family:'Open Sans'; + font-style:normal; + font-weight:800; + src:local("Open Sans Extrabold"),local("OpenSans-Extrabold"),url(http://fonts.gstatic.com/s/opensans/v10/EInbV5DfGHOiMmvb1Xr-honF5uFdDttMLvmWuJdhhgs.ttf) format("truetype") +} +@font-face { + font-family:'Droid Sans Mono'; + font-style:normal; + font-weight:400; + src:local("Droid Sans Mono"),local("DroidSansMono"),url(http://fonts.gstatic.com/s/droidsansmono/v7/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff) format("woff") +} +@font-face { + font-family:'Qt Icons'; + src:url("http://epics.web.psi.ch/software/CSDataQuick/docs/style/icomoon.eot?-tgjuoj"); + src:url("http://epics.web.psi.ch/software/CSDataQuick/docs/style/icomoon.eot?") format("embedded-opentype"),url("http://epics.web.psi.ch/software/CSDataQuick/docs/style/icomoon.woff?-tgjuoj") format("woff"),url("http://epics.web.psi.ch/software/CSDataQuick/docs/style/icomoon.ttf?-tgjuoj") format("truetype"),url("http://epics.web.psi.ch/software/CSDataQuick/docs/style/icomoon.svg?-tgjuoj") format("svg"); + font-weight:normal; + font-style:normal +} +.clearfix:before,.clearfix:after { + content:" "; + display:table +} +.clearfix:after { + clear:both +} +.clearfix { + *zoom:1 +} +.clearfix .right { + float:right +} +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { + margin:0; + padding:0; + border:0; + font-size:100% +} +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { + vertical-align:baseline +} +body { + font-family:“Open Sansâ€, Arial, Helvetica, sans-serif; + line-height:1.5; + font-weight:400 +} +h1,h2,h3,h4,h5,h6 { + font-weight:300 +} +.context h2,.context h3,.context h4,.context h5,.context h6 { + margin:1.5em 0 1em +} +.context h1 { + margin-bottom:1em; + font-size:3.125em +} +.context h3.fn,.context h3.flags { + color:#26282a; + font-size:1.46em; + padding:15px 0 15px 0; + border-bottom:2px #eee solid; + word-wrap:break-word +} +.context .fngroup { + border-bottom:2px #eee solid; + padding-bottom:15px; + margin-bottom:1.5em +} +.context .fngroup h3.fngroupitem { + margin:0; + padding-bottom:0; + border:none +} +.context h3.fn .name, +.context h3 span.type, +.qmlname span.name { + font-weight: 400 +} +.qmlname { + font-size:1.46em +} +.qmlproto table { + border:none; + border-bottom:2px #eee solid +} +.qmlproto table p { + max-width:100% +} +.qmlproto table tr { + background-color:#fff +} +.qmlname td, .qmlname th { + border:none; + text-align:left; + padding:5px 0 0 0 +} +.qmlreadonly,.qmldefault { + padding:0 5px 0 5px; + font-size:0.75em; + background-color:#eee; + float:right +} +.qmlreadonly { + color:#414141 +} +.qmldefault { + color:#D14141 +} +.rightAlign { + padding:3px 5px 3px 10px; + text-align:right +} +article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section { + display:block +} +body { + line-height:1; + font-family:"Open Sans", Arial, Helvetica, sans-serif; + transition-duration:1s +} +ol,ul { + list-style:none +} +.context ol,.context ul { + margin-top:0.75em; + margin-left:20px +} + +.context ol > li { + margin-left: 20px +} + +.mainContent ol>li { + list-style-type: decimal; +} + +.mainContent ol.a >li { + list-style-type: lower-alpha; +} + +.mainContent ol.A >li { + list-style-type: upper-alpha; +} + +blockquote,q { + quotes:none +} +blockquote:before,blockquote:after,q:before,q:after { + content:''; + content:none; + width:100% +} +table { + border-collapse:collapse; + border-spacing:0; + margin-bottom:25px; + width:100% +} +a { + color:#5caa15; + text-decoration:none; + transition-duration:0.3s +} +a:hover { + color:#46a2da +} +.main,.navbar-header,#footerbar>div { + max-width:1280px; + width:95%; + margin:0 auto +} +.main { + margin-top:10px +} +.main_index { + background-color:#fff +} +.sectionlist { + margin-bottom:2em +} +[class*="col-"] { + letter-spacing:normal +} +.landing,.main_index .row { + letter-spacing:-0.31em +} +.main_index .row>div { + letter-spacing:normal +} +.col-1,.context { + width:80%; + display:inline-block; + background-color:#fff; + padding:35px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + -ms-box-sizing:border-box; + box-sizing:border-box +} +.col-1 h2 { + font-size:2.1875em; + font-weight:300; + line-height:1.1; + margin-bottom:0.83em; + margin-top:1em +} +.icons1of3 img { + display:inline-block; + float:left; + margin-right:0.75em; + margin-top:-5px; + width:2.75em +} +div.multi-column { + position:relative +} +div.multi-column div { + display:-moz-inline-box; + display:inline-block; + vertical-align:top; + margin-top:1em; + margin-right:2em; + width:16em +} +.sidebar { + display:block; + float:right; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + -ms-box-sizing:border-box; + box-sizing:border-box; + width:20%; + padding-left:30px +} +.toc,.sectionlist { + padding:35px; + background-color:#fff; + margin-bottom:2em +} +.sidebar-content:empty { + display:none; + visibility:hidden +} +.col-2 h2,.toc h3,.sidebar-content h2,.sidebar-content h3,.sectionlist h2 { + font-weight:400; + margin-bottom:2em +} +.toc h3 a { + color:#404244 +} +.title { + font-size:3em; + font-weight:300; + letter-spacing:-1px; + line-height:1.15em; + margin-bottom:0.5em; + word-wrap:break-word +} +.navigationbar,col-1 h2 { + font-size:0.75em +} +.navigationbar h1 { + font-size:3.125em; + margin-bottom:1em; + margin-top:1em +} +.navigationbar li { + display:inline-block; + margin-right:5px; + position:relative; + padding-right:10px; + color:#585a5c +} +.navigationbar li a { + color:#58585c +} +body { + background-color:#eee; + color:#404244 +} +.sectionlist li { + margin-bottom:5px +} +dd { + padding-bottom:0.25em; + padding-left:2em +} +.col-1 ul { + margin-bottom:1.56em +} +.mainContent li { + margin-top:0.8em; + line-height:1.25em +} +.mainContent li.level2 { + margin-left:10px; + margin-top:0.4em; + font-size:0.9375em; + line-height:1.15em; +} +.mainContent p { + line-height:1.56em; + margin-bottom:1.5em; + color:#404244; + max-width:85% +} +.mainContent b { + font-weight:600 +} +.context ul,.context ol { + margin-bottom:1.5em +} +.mainContent ul ul { + margin-top:0.5em +} +.mainContent .naviNextPrevious { + margin-top:25px; + max-width:100% +} +.naviNextPrevious.headerNavi { + display:none +} +.nextPage { + float:right +} +.prevPage:before { + content:"< " +} +.nextPage:after { + content:" >" +} +.navigationbar li:after { + color:#404244; + content:"›"; + display:inline-block; + font-size:1.5em; + line-height:1; + position:absolute; + right:-2px; + top:-4px +} +.navigationbar ul:last li a { + color:#80c342 +} +.sub-navigation { + margin-top:10px +} +.navigationbar li:last-child:after,.sub-navigation li:after { + content:none +} +.navigationbar { + margin-bottom:10px +} +#buildversion { + font-style:italic; + font-size:small; + float:right +} +.copy-notice { + width:65%; + font-size:0.75em; + margin-top:50px; + margin-bottom:25px; + line-height:1.75em; + color:#585a5c +} +li a.active { + color:#585a5c +} +.flowList { + padding:25px +} +.flowListDiv dl { + -webkit-column-count:1; + -moz-column-count:1; + column-count:1 +} +.flowList dd { + display:inline-block; + margin-left:10px; + width:90%; + line-height:1.15em; + overflow-x:hidden; + text-overflow:ellipsis +} +.alphaChar { + font-size:2em; + position:absolute +} +.flowList.odd { + background-color:#f9f9f9 +} +.context ul>li,.doc-column ul>li { + list-style-image:url("../images/list_arrow.png"); + margin-left:15px; + color:#404244; + line-height:1.16em +} +.mainContent table p { + margin:0px; + padding:0px; + max-width:initial; + min-height:2em +} +.mainContent table p.centerAlign { + text-align:center +} +.context h2 { + font-size:2.1875em +} +.context h3 { + font-size:1.75em +} +.context h4 { + font-size:1.375em +} +.context p img { + margin-top:0.75em; + max-width:100% +} +.context .border img { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) + } +.context .border .player { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) + } +.context table { + vertical-align:initial +} +table .odd { + background-color:#f9f9f9 +} +table thead { + text-align:left; + padding-left:20px +} +table,table td,table th { + border:1px solid #eee +} +table td,table th { + padding:5px 20px; + line-height:1.3 +} +table.alignedsummary,table.propsummary { + width:initial +} +table.valuelist td.tblval { + font-size:0.75em +} +div.main_index .row { + border-bottom:1px solid #eee +} +div.main_index .row { + position:relative +} +div.main_index .row>div { + display:inline-block; + width:50%; + vertical-align:top; + padding:50px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + -ms-box-sizing:border-box; + box-sizing:border-box +} +div.main_index h2 { + font-size:2.1875em; + margin-bottom:1em +} +#search_bar { + width:40%; + float:right +} +div.main_index .row:after { + content:""; + position:absolute; + top:0; + right:50%; + height:100%; + width:1px; + background-color:#eee +} +div.table { + overflow-x:auto +} +.context tr > td > pre { + font-size:0.85em +} +p.qt_commercial { + border:3px solid #5caa15; + margin:0 auto; + padding:15px; + width:28%; + text-align:center; + clear:both +} +h1.qt_commercial { + padding:20px; + background-color:#5caa15; + display:inline; + float:right; + font-size:1.25em; + line-height:1.25em; + height:1.25em; + color:#fff +} +div.qt_commercial { + border-top:5px solid #5caa15; + margin-bottom:50px +} +pre, .LegaleseLeft { + background-color:#404244; + color:#fff; + display:block; + font-family:"Droid Sans Mono"; + line-height:1.5; + overflow-x:auto; + margin-bottom:25px; + padding:25px; + margin-top:0.75em +} +.mainContent .LegaleseLeft p { + color:#fff; + white-space: pre-wrap +} +.copy_text { + background-color:#46a2da; + color:#fff; + border:2px solid #46a2da; + padding:10px 16px; + margin-left:-10px; + margin-top:-50px; + position:absolute; + opacity:0; + cursor:pointer; + float:right +} +.copy_text:hover { + background-color:#fff; + color:#46a2da +} +code,.codelike { + font-family:"Droid Sans Mono" +} +h3.fn code { + font-size:0.75em; + float:right; + background-color:#eee; + padding:3px; + margin: 3px 0 0 20px +} +pre:hover>.copy_text { + display:inline-block; + opacity:1; + transition:0.5s ease +} +#main_title_bar { + letter-spacing:-0.31em +} +#main_title_bar .search_bar { + letter-spacing:normal; + width:50%; + display:inline-block; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + -ms-box-sizing:border-box; + box-sizing:border-box; + vertical-align:middle +} +#main_title_bar h1 { + letter-spacing:normal; + width:50%; + display:inline-block; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + -ms-box-sizing:border-box; + box-sizing:border-box; + vertical-align:middle +} +#main_title_bar .search_bar * { + letter-spacing:normal; + padding:0; + margin:0; + border:none +} +#sidebar-toggle,#toc-toggle { + display:none +} +@media (max-width: 980px) { + body { + font-size:calc-em(14px) + } + #main_title_bar { + letter-spacing:-0.31em; + width:100% + } + #main_title_bar>h1,#main_title_bar .search_bar { + display:block; + width:100% + } + #main_title_bar .search_bar { + margin-bottom:15px + } + .main { + margin-top:0px + } + .main_index .row { + border:none !important + } + .title { + font-size:1.5em; + font-weight:400; + word-wrap:break-word + } + .col-1,.context,.naviNextPrevious,.sidebar { + padding:10px + } + .sidebar { + padding-top:0 + } + .search .sidebar { + display:none; + visibility:hidden + } + .col-2 h2,.toc h3,.sidebar-content h2,.sidebar-content h3,.sectionlist h2 { + text-align:center; + margin-bottom:0 + } + div.main_index .row:after { + content:none + } + div.main_index .row>div { + display:block !important; + width:100%; + padding:0; + margin:0 + } + .context,.sidebar,.col-1 { + width:100% + } + .main_index h2,h1 { + text-align:center + } + .context h4,.context h3,.context h2 { + text-align:center + } + .sidebar-content,.col-2,.toc { + background-color:#fff; + margin-bottom:1em; + padding:20px + } + #sidebar-toggle,#toc-toggle { + display:block + } + #sidebar-toggle.collapsed + h2 { + display:block + } + .mainContent p { + line-height:1.56em; + margin-bottom:1em; + max-width:100% + } + table td,table th { + padding:5px 5px + } + .sectionlist { + padding:0 + } +} +[id]:target,[name]:target,[name]:target+* { + -webkit-animation:highlighter 3s; + animation:highlighter 3s +} +@-webkit-keyframes highlighter { + 25% { + background-color:#d1e8f6; + color:#444 + } + 75% { + background-color:#d1e8f6; + color:#444 + } +} +@keyframes highlighter { + 25% { + background-color:#d1e8f6; + color:#444 + } + 75% { + background-color:#d1e8f6; + color:#444 + } +} +@-webkit-keyframes copypaste { + 25% { + opacity:1 + } + 100% { + border-radius:10px; + margin-top:-50px; + opacity:1 + } +} +@keyframes copypaste { + 25% { + opacity:1 + } + 100% { + border-radius:10px; + margin-top:-50px; + opacity:1 + } +} +#footer { + clear:both +} +.menuextraslanguages { + display:none; + visibility:hidden +} +form.gsc-search-box { + font-size: 25px !important; + margin-top: 0 !important; + margin-right: 0 !important; + margin-bottom: 4px !important; + margin-left: 0 !important; + width: 100% !important; +} +table.gsc-search-box { + border-style: none !important; + border-width: 0 !important; + border-spacing: 0 0 !important; + width: 100% !important; + margin-bottom: 2px !important; +} + +table.gsc-search-box td { + vertical-align: middle !important; +} + +table.gsc-search-box td.gsc-input { + padding-right: 0px !important; +} +table.gsc-search-box td.gsc-input input { + background-position: 15px center !important; +} + +td.gsc-search-button { + width: 1% !important; +} + +td.gsc-clear-button { + width: 14px !important; + visibility:hidden !important; + display:none !important; +} +table.gsc-branding td, +table.gsc-branding { + margin: 0 0 0 0 !important; + padding: 0 0 0 0 !important; + border: none !important; +} + +table.gsc-branding { + border-style: none !important; + border-width: 0 !important; + border-spacing: 0 0 !important; + width: 100% !important; +} + +.gsc-branding-text { + color: #676767 !important; +} + +td.gsc-branding-text { + vertical-align: top !important; +} +td.gsc-branding-text div.gsc-branding-text { + padding-bottom: 2px !important; + text-align: right !important; + font-size: 11px !important; + margin-right: 2px !important; +} + +td.gsc-branding-img { + width: 65px !important; + vertical-align: bottom !important; +} + +img.gsc-branding-img { + padding-top: 1px !important; + margin: 0 0 0 0 !important; + padding-right: 0 !important; + padding-left: 0 !important; + padding-bottom: 0 !important; + border: none !important; + display: inline !important; +} + +input.gsc-search-button { + background-color: white !important; + height: 35px !important; + width: 25px !important; + color: transparent !important; + background-image: url("../images/doc_search.png") !important; + background-size: 25px auto; + background-position: 0px 5px; + background-repeat: no-repeat; + margin-left: -43px !important; + overflow: hidden; + min-width: 20px !important; +} + +input.gsc-search-button:hover { + cursor: pointer; +} + +input.gsc-search-button:focus { + outline: none; + box-shadow: none; +} + +.gsc-search-box-tools .gsc-clear-button { + display: none !important; + visibility: none !important; +} + +.gsc-overflow-hidden { + overflow: hidden !important; +} + +input.gsc-input { + background-color: #fff !important; + border: 1px solid #d6d6d6 !important; + border-radius: 5px !important; + box-sizing: border-box !important; + -moz-box-sizing: border-box !important; + color: #868482 !important; + outline: 0 none !important; + padding: 9px 10px 10px !important; + transition: color 0.5s ease 0s, box-shadow 0.5s ease 0s, background-color 0.5s ease 0s !important; +} + +input { + font-family: 'Open Sans', Arial, Helvetica, sans-serif !important; + line-height: 1.5 !important; + font-weight: 300 !important; + vertical-align:middle +} + +input:focus { + border-color: #46a2da; + box-shadow: 0 0 5px #46a2da; + color: #000; +} + +a.qa-mark:target:before { + content: "***"; + color: #ff0000; +} + +.mainContent .video { + width:60%; + max-width:640px; + margin: 0.5em 0 1.5em 0.5em; + position:relative; + display:table +} + +.mainContent .video > .vspan { + padding-top:60%; + display:block +} +.mainContent .video iframe { + width:100%; + height:100%; + position:absolute; + top:0; + left:0 +} diff --git a/software/CSDataQuick/docs/uiparser-members.html b/software/CSDataQuick/docs/uiparser-members.html new file mode 100644 index 0000000..bd29d5c --- /dev/null +++ b/software/CSDataQuick/docs/uiparser-members.html @@ -0,0 +1,143 @@ + + + + + + + List of All Members for UIParser | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

List of All Members for UIParser

+

This is the complete list of members for UIParser, including inherited members.

+
+ +
+
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/uiparser.html b/software/CSDataQuick/docs/uiparser.html new file mode 100644 index 0000000..766ed5f --- /dev/null +++ b/software/CSDataQuick/docs/uiparser.html @@ -0,0 +1,151 @@ + + + + + + + UIParser Class | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

UIParser Class

+ +

Parse caQtDM UI files. More...

+ +
+
Header: #include <UIParser> +
Inherits: QCSParser
+ +

Public Functions

+
+ + +
UIParser(QObject *parent = Q_NULLPTR)
virtual ~UIParser()
+ +

Reimplemented Public Functions

+
+ + + +
virtual QString description()
virtual QString extension()
virtual QString parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial)
+
    +
  • 3 public functions inherited from QCSParser
  • +
  • 32 public functions inherited from QObject
  • +
+

Additional Inherited Members

+
    +
  • 2 properties inherited from QCSParser
  • +
  • 1 property inherited from QObject
  • +
  • 1 public slot inherited from QObject
  • +
  • 2 signals inherited from QObject
  • +
  • 1 public variable inherited from QObject
  • +
  • 10 static public members inherited from QObject
  • +
  • 9 protected functions inherited from QObject
  • +
  • 2 protected variables inherited from QObject
  • +
+ + +
+

Detailed Description

+

Parse caQtDM UI files.

+

The parser from Qt tool uic is used to parse the UI file. Then it traverses the widget tree and creates their QML equilents.

+

The parser converts well most widgets, with the following exceptions:

+
    +
  • CaCalc
  • +
  • Complex nested layout
  • +
  • signal/slot definitions
  • +
+
+ +
+

Member Function Documentation

+ +

UIParser::UIParser(QObject *parent = Q_NULLPTR)

+

Default constructs an instance of UIParser.

+ +

[virtual] UIParser::~UIParser()

+

Destroys the instance of UIParser. The destructor is virtual.

+ +

[virtual] QString UIParser::description()

+

Reimplemented from QCSParser::description().

+ + +

[virtual] QString UIParser::extension()

+

Reimplemented from QCSParser::extension().

+ + +

[virtual] QString UIParser::parseDisplayFile(QString filename, QMap<QString, QString> macros, bool partial)

+

Reimplemented from QCSParser::parseDisplayFile().

+ +
+
+
+
+
+
+ + + diff --git a/software/CSDataQuick/docs/use-in-quickdesigner.html b/software/CSDataQuick/docs/use-in-quickdesigner.html new file mode 100644 index 0000000..efcf863 --- /dev/null +++ b/software/CSDataQuick/docs/use-in-quickdesigner.html @@ -0,0 +1,136 @@ + + + + + + + Use in Qt Quick Designer | CSDataQuick Documentation 1.2 + + + + + +
+
+ +
+
+
+ +
+

Use in Qt Quick Designer

+ + +
+ +

Setup Qt Quick Designer

+

Unlike the Qt UI Designer, Qt Quick Designer is deeply integrated in Qt Creator. This has one advantage that one can switch to edit mode to fine tune the components.

+

The following setup is not necessary for the bundled binary package from http://epics.web.psi.ch/software/CSDataQuick

+ +

macOS and Linux

+

The CSDataQuick module must be in the import path before launching Qt Creator.

+
$ export QML_IMPORT_PATH=CSDataQuick-build/qml
+

And after you have created your own collection of UI components, you could add them to this path as well. Imagine in a collaboraton environment, everyone could create device components and install them into a central location, e.g. /net/shared/qml/. To reuse these components, it is sufficient to add this central location to the path.

+
$ export QML_IMPORT_PATH=$QML_IMPORT_PATH:/net/shared/qml
+

The designer works by creating invisible background renders (qmlpuppet). For modules with C++ plugins, like CSDataQuick, the qmlpuppet must be rebuilt with the same Qt version as the plugin. To enable this, go to menu Tools -> Options, select Qt Quick from the left list, then select Qt Quick Designer tab, in the QML Enumlation Layer group, select Use QML emulation layer that is built by the selected Qt.

+

"Configure Quick Designer"

+

Windows

+

On Windows the situation is a lot more subtle. The safest approach is to build against the same Qt version as the Qt Creator. For example, Qt Creator 4.4 uses Qt 5.9.1 msvc2015 64bit.

+

In addition, add the bin to PATH. Suppose the build path is C:\CSDataQuick-build

+
> set PATH=C:\CSDataQuick-build\bin;C:\epics\base-3.14.12\bin\windows-x64;%PATH%
+> set QML_IMPORT_PATH=C:\CSDataQuick-build\qml
+> C:\Qt\Tools\QtCreator\bin\qtcreator.exe
+

The long answer is that, Qt Creator needs to know which Qt version to be used to create qml2puppet. One can create an empty project, using the same Qt version used to build CSDataQuick. And then open/create qml displays from there.

+ +

Using the designer

+

Start with an empty template file, mydevice.qml

+
import QtQuick 2.5
+import CSDataQuick.Components 1.0
+
+BaseWindow {
+}
+

Open it with qtcreator,

+
$ qtcreator mydevice.qml
+

New qml files created from Qt Creator have Item as the root item. Change manually the root item to BaseWindow.

+

The following video shows show to switch between edit and design modes.

+ + +

What is not working

+
    +
  • The Display, Command, StripChar and CartesianPlot editor: if the model is given of ListModel form, it cannot be edited in designer.
    model: ListModel {
    +    ListElement {
    +        label: 'list'
    +        command: 'ls'
    +    }
    +}
    +

    The workaround is to use JSON object array form.

    +
    model: [
    +    {
    +        'label': 'list',
    +        'command': 'ls'
    +    }
    +]
    +
  • +
+
+ +
+
+
+
+
+ + + diff --git a/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-1.el7.x86_64.rpm.html b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-1.el7.x86_64.rpm.html new file mode 100644 index 0000000..a2b04c8 --- /dev/null +++ b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-1.el7.x86_64.rpm.html @@ -0,0 +1 @@ +Bad request \ No newline at end of file diff --git a/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Darwin.dmg b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Darwin.dmg new file mode 100644 index 0000000..1e923d4 Binary files /dev/null and b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Darwin.dmg differ diff --git a/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Linux.tar.gz b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Linux.tar.gz new file mode 100644 index 0000000..c10e799 Binary files /dev/null and b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-Linux.tar.gz differ diff --git a/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-win64.exe b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-win64.exe new file mode 100644 index 0000000..2ec771a Binary files /dev/null and b/software/CSDataQuick/download.php?file=CSDataQuick-1.2.1-win64.exe differ diff --git a/software/CSDataQuick/download.php?file=qt-creator-4.9.2-4.el7.x86_64.rpm b/software/CSDataQuick/download.php?file=qt-creator-4.9.2-4.el7.x86_64.rpm new file mode 100644 index 0000000..b25ac5d Binary files /dev/null and b/software/CSDataQuick/download.php?file=qt-creator-4.9.2-4.el7.x86_64.rpm differ diff --git a/software/GPMM.html b/software/GPMM.html new file mode 100644 index 0000000..d10bc54 --- /dev/null +++ b/software/GPMM.html @@ -0,0 +1,266 @@ + + + + + + +GPMM: General Purpose Memory Mapped Device Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Miroslaw Dach
+Phone: +41 56 310 4578
+Updated: 29.04.2010
+
+
Printer friendly version +
 
+

GPMM: General Purpose Memory Mapped Device Driver

+

What is GPMM?

+

+The GPMM driver is an EPICS generic driver to deal with any +type of the VME/VxWorks memory mapped card. It allows easy integration of new cards to EPICS. Recently the GPMM driver was extended to support platforms running Linux OS, including embedded systems (like Xilinx Virtex-4 with PPC405 processor). GPMM driver supports the interrupt handling for both VxWorks and Linux. Read more in the gpmm Documentation (PDF). +

+ +

Download

+

+Download the package gpmm_v3.0.4 +(20 kB). +

+Contact the author if you need additional help and assistance: miroslaw.dach at psi.ch +

Swiss Light Source, 2009

+
+Author: Miroslaw Dach   Phone: +41 56 310 4578   Email: miroslaw.dach@psi.ch   Updated: 29.04.2010   +Source: /afs/psi.ch/project/epics/webhosting/software/GPMM/index.php   + +
+ diff --git a/software/GPMM/gpmmDriverDesc_v3.0.4.pdf b/software/GPMM/gpmmDriverDesc_v3.0.4.pdf new file mode 100644 index 0000000..4942abf Binary files /dev/null and b/software/GPMM/gpmmDriverDesc_v3.0.4.pdf differ diff --git a/software/GPMM/ppcGPMMSup_v3.0.4.tar.gz b/software/GPMM/ppcGPMMSup_v3.0.4.tar.gz new file mode 100644 index 0000000..72e7fe7 Binary files /dev/null and b/software/GPMM/ppcGPMMSup_v3.0.4.tar.gz differ diff --git a/software/caqtdm.html b/software/caqtdm.html new file mode 100644 index 0000000..87b6fde --- /dev/null +++ b/software/caqtdm.html @@ -0,0 +1,1356 @@ + + + + + + +caQtDM - a medm replacement based on QT + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: A.C.Mezger
+Phone: +41 56 310 3406
+Updated: 06.01.2015
+
+
Printer friendly version +
 
+

caQtDM - a medm replacement based on QT

+ + +
+ + + +

Table of Contents

+ + + +

1. Introduction

+ +

+version 4.4.0 can be downloaded below

+List of modifications for version 4.4.0

+ +Windows MSI packages as well as an OSX package are available too. You will also find caQtDM on the Apple Store. For linux a build can be initiated with caQtDM_Build. +

+ +

The EPICS display manager MEDM is a very powerful tool with many features and satisfies most of the needs for synoptic displays. +However MEDM is based on MOTIF/Xt and X11, systems/libraries that are getting into age. +Moreover applications using those systems are difficult to maintain and to extend. +At PSI a new Qt based application was written (download below), reproducing the functionality of MEDM. Moreover +a parser was written to convert the MEDM files into Qt files, the resulting displays being an exact reproduction of +the MEDM displays. +

+ +

It has to be noticed that the widgets used are not directly epics aware. The idea was to strictly separate the control +system from the display part, in order to be able to add other controlsystems if necesssary (which is still the case for +our high intensity particle accelerator).

+ +

An application is never finished and can always be improved and new things can be added. This is therefore also the case +for caQtDM. The widgets could be improved, not everything has been finished and bugs will be found.

+ +

We consider this software as an open source software. Try it, use it and improve it. Yust give us your improvements and bug fixes +back to us, so that we can integrate them.

+ +

The downloadable tar file contains all sources and build procedures. In the parser directory you will find the adl to ui converter. +

+ +

+The application itsself consists of an main programm (caQtDM) using the display class from a shared object library (libcaQtDM_Lib). +The control widgets are given by the shared object library libqtcontrols.so or qtcontrols4.dll. The libraries have to be in the LD_LIBRARY_PATH for +linux and for Windows you have to define the System path (you can also use scripts). +For the designer and caQtDM the 3 plugin libraries have to be copied to the designer plugin directory.

+

+While the display part is handled by the display class, you can build any application using this class with a designer developed ui file. The display class +will take care of the controlsystem defined widgets. The other widgets you define like buttons or frames having to contain something you would like to define +in your application can be handled (in order to use this feature contact the author) +

+ +

+caQtDM supports also .prc files. These files can be written by a text editor and are used at PSI. for their syntax take a look at some .prc files in directory +caQtDM_tests. +

+ +

+Please give feedback if you are using it, found some bugs or made some additions +

+ +

+The application loads a stylesheet and ui files from the path defined by CAQTDM_DISPLAY_PATH or your actual directory. Inside the ui files a +stylesheet can also be defined which is the case for the examples (one example proscanprobe.ui uses a different stylesheet given a different +look as the other files). However many styles are defined by the widgets themselves and can not be modified

+ +

+The following screen was created by using the file tests.ui. It contains all available epics related widgets of caQtDM.
+ + +

+ +

+Some more examples of caQtDM displays (click to enlarge): +
+example 1 +example 2 +

+ +
+

2. Downloads and Tracker

+ +

Version 4.4.0 (for higher versions goto github and clone the development path)

+ +This distribution contains all the sources. +Of course you will have to install/compile Qt,Qwt,SSL and ZMQ first on your platform.
+ + + +

Installation Packages

+ +The MS Windows and the Mac OS X distribution contain only binaries and you can immediately start to use it after installation. + + + +A bug and issue tracker: +Issue Tracker for the caQtDM project
+ + + +
+

3. HowTo

+ +
+Did you know that the core class of caQtDM can be used to write C++ applications in a quite easy way? +You may design an user interface that can be used by the core class and you can introduce in +your application then more data acquisition and intelligence. See the two examples given below:

+probe scan: An application using caQtDM libraries
+rf display: An application using caQtDM libraries

+ +How to install and run caQtDM +


+ + +
+

4. Presentations

+ + + +

+At APS they recorded a caQtDM Tutorial given by Jim Stevens and uploaded it to YouTube: https://www.youtube.com/watch?v=1vdSy0bsenI + +


+ +

5. List of Documented Modifications

+ +

+ 4.2.0 +

    + +
  • 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
  • + +
  • 4.1.8
  • +
  • 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
  • +# problem with cawavetable corrected +# when Qt4.6 using qwt6.0 no support for date time axis, fallback to linear axis +# problem introduced for cacalc, corrected in new release +# added possibility to get info for objects when 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 (ask helge brands)
  • +
  • last index in array was not taken into account and scale was not updated for the waterfallplot
  • +
  • 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 now
  • +
  • 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 and 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
  • + +
  • 4.1.2
  • +
  • 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
  • +

      + +

      + new in 4.1.0 +

        + +
      • 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
      • +

      +

      + new in 4.0.3 +

        + +
      • 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.
      • +

      + +

      + new in 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 semicolumn 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
      • +

      + +

      + new in 4.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 semicolumn 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)
      • +
      • catextentry will keep its cursor position after pressing return to set the value
      • +
      • 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
      • +

      + +

      + new in 3.9.5 +

        +
      • calinedit for DBF_CHAR was missing.
      • +
      • infobox got epics description of channel
      • +
      • some small bugs corrected in infobox
      • +
      • some reingineering done
      • +
      • cabytecontroller directions corrected
      • +

      + +

      + new in 3.9.4 +

        +
      • we can now use a python function for calculations cacalc and visibility (see tests.ui)
      • +
      • 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
      • +
      +

      + +

      + new in 3.9.3 +

        +
      • 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
      • +
      +

      + +

      + new in 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 thmen 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
      • +
      • added the possibility to have a custom colormap for cameras
      • +
      • many changes involving android
      • +
      • many changes for iphone, epics can now also reconnect after being suspended
      • +
      • calineedit a bit more performant
      • +
      • on ipad/iphone files were always downloaded, this has been optimized
      • +
      • graphic plugings were missing on osx/ios, has been corrected
      • +
      • prevented crash on exit
      • +
      • cacamera can be displayed without toolbuttons and will be zoomed in ints container
      • +
      • cascriptbutton has now the possibility of a macro in its parameter
      • +
      • truncate value display in calineedit is now implemented
      • +
      • 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
      • +
      +

      + +

      + new in 3.8.9 +

        +
      • a bug for catextentry writing doubles that shortly appeared in this version, is fixed now. +
      • pixmaps on buttons get rescaled now
      • +
      • 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
      • +
      +

      + +

      + new in 3.8.7 +

        +
      • added limits and precision dialogs for several objects
      • +
      • in case of tabbed widgets, monitoring of hidden pages is now suspended in order to release network traffic and cpu load
      • +
      • build of product is now optimized with dependencies (thanks H.Brands)
      • +
      • modified dialogs for virtual keyboard in IOS
      • +
      • drvh, drvl changed back to hopr, lopr for caslider and canumeric
      • +
      • slider will not move when no write access
      • +
      +

      + +

      + new in 3.8.5 +

        +
      • adl2ui will not expand label width per default, when required, then use the option expandtext
      • +
      • dialogs have been modified for better display on ios
      • +
      • cacalc has now a scalable font
      • +
      • new logo
      • +
      +

      + +

      + new in 3.8.4 +

        + +
      • more changes for ios
      • +
      • castripplot has been modified so that resizing does not clear the curves
      • +
      • epics timestamp introduced for info box
      • +
      • modified catogglebutton in order to be able to resize its label
      • +
      • greek micro replaced by u when macos or ios
      • +
      • when rescaling castripplot, figure will be cleared
      • +
      +

      + +

      + new in 3.8.1 +

        +
      • added cawavetable in order to display a waveform numerically (maximum items = 300)
      • +
      • adapted source code in order to run on ios (ipad)
      • +
      • cachoice crashed when index was higher than the number of ENUMS, fixed
      • +
      • castripplot changed in order to get also auto scaling
      • +
      • the title of the display can now be set in the window caption by defining the dynamic property "Title" for the mainwindow. when using a macro definition, this will be expanded.
      • +
      +

      + +

      + new in 3.7.8 +

        +
      • when writing a double, float was used so that the precision was lost, corrected
      • +
      • related display modified for up to 16 items
      • +
      • changed names for designer groups to include PSI Name
      • +
      • changed caToggleButton and caLed behaviour
      • +
      • changed caSlider and caThermo to be compilable with the standard version of qwt6.1 when using qt5.2
      • +
      • modified caQtDM_Lib to be callable from the software of the Australian lightsource
      • +
      • fixed a bug in the scrollbar behaviour of the camera widget
      • +
      +

      + +

      + new in 3.7.7 +

        +
      • in waterfall plot the demo plot was not erased at initialization with real data, corrected
      • +
      +

      + + +

      + new in 3.7.6 +

        +
      • added a property to the waterfall plot in order to define the maximum number of points treated in the waveform
      • +
      • due to the change 3.7.4 for reload, the popup of an existing window was not working correctly
      • +
      • cagraphic lost its linecolor after no connection
      • +
      • calineedit was not showing alarm colors in alarm_default mode
      • +
      • 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
      • +
      • added properties to calineedit in order to be able to make a framed border
      • +
      +

      + +

      + new in 3.7.3 +

        +
      • cagraphic lost its linecolor after no connection
      • +
      • calineedit was not showing alarm colors in alarm_default mode
      • +
      • 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
      • +
      • added properties to calineedit in order to be able to make a framed border
      • +
      +

      + + +

      + new in 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 coluns now, catable can execute a specified script with the associated pv
      • +
      • eliminated sending message in camessage with right button of mouse.
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 3.6.2 +

        +
      • cartseian plot and stripplot can have a logarithmic scale now
      • +
      +

      + +

      + new in 3.6.1 since 3.5.2 +

        +
      • suppressed slidervaluecallback when setting limits from hopr, lopr
      • +
      • added a first attempt of a waterfall plot for waveforms
      • +
      • corrected for cameras, 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 cartesian plot did not reset correctly in case of channel limits
      • +
      • added zoom mechanism for cartesian plot
      • +
      • added update mechanism choice in main menu in order to switch to direct monitoring or timed monitoring
      • +
      • starting performance optimized for relateddisplay, cachoice, camenu
      • +
      • splashscreen added for loading includes (in some cases loading time can be significant)
      • +
      +

      + +

      + new in 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 itsself was initializing itsself per default wrong
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 3.5.0 +

        +
      • caQtDM gives information now about number of monitors/s, number of displays/s and highest monitor
      • +
      +

      + +

      + new in 3.4.7 +

        +
      • adapted caslider for qwt6.1
      • +
      +

      + +

      + new in 3.4.6 +

        +
      • corrected a bug for cagauge with alarms no
      • +
      • use control key for amplifying 10x the increment
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 3.4.4 +

        +
      • enhanced performance for camera widget
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 3.4.2 +

        +
      • camera stuff modified
      • +
      • added mutex to synchronize data and display
      • +
      • font bug in catable solved
      • +
      • found a datarace in castripplot, corrected
      • +
      +

      + +

      + new in 3.4.1 +

        +
      • cacamera displays intensity at x, y
      • +
      • cacamera context menu for grey / spectrum and zoom
      • +
      +

      + +

      + new in 3.4.0 +

        +
      • caStripplot has been revisited
      • +
      • caCamera uses now concurrent mode for calculations
      • +
      +

      + +

      + new in 3.3.1 +

        +
      • mainwindow and messagewindow have been merged
      • +
      +

      + +

      + new in 3.3.0 +

        +
      • caTable gets now the correct font after resizing when values update
      • +
      • caStripPlot has been corrected for incorrect time behaviour.
      • +
      +

      + +

      + new in 3.2.2 +

        +
      • in menu you have the possibility to raise the main and message windows
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 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
      • +
      +

      + +

      + new in 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.
      • +
      +

      + +

      + new in 2.8 - 2.5 +

        +
      • All the changes have been documented in qtdefs.pri
      • +
      +

      + +

      + new in 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).
      • +
      +

      + new in 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.
      • +
      +

      + +

      + new in 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.
      • +
      +When you use the Qt tools through the network you should start them tools by specifying on the command line '-graphicssystem native' in order to enhance +the performance. The designer presents besides the control system widgets also many other widgets that could be used. +One of the more important ones is the tab widget, that can be used to make subwindows. + +

      + +

      + new in 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 cartesian 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.
      • +
      + + +

      + +

      6. Correspondence list between MEDM, EDM, caQtDM

      (has to be completed) + +

      by courtesy of Zai Wang from synchrotron.org.au + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      GraphicsGraphicsGraphicsDescription
      MEDM widget (from Doc)EDM widget (from Doc)CaQtDM 
      Line caGraphics 
      RectangleRectangle caGraphics 
      OvalCirclecaGraphics 
      ArcArccaGraphics 
      TextStatic TextcaLabel 
      Image caImage 
       GIF ImagecaImage 
       PNG ImagecaImage 
       HTML? Qt understands html text 
       Dynamic Symbols? caImage 
      Polygon caPolyLine 
      PolylineLinescaPolyLine 
          
      MonitorsMonitorsMonitors 
      MEDM widget (from Doc)EDM widget (from Doc)CaQtDM 
      Meter MonitorMetercaCircularGauge 
      BarBarcaThermo 
      TextText MonitorcaLineEdit 
      Byte Monitor caByte 
       Byte? 
      Cartesian Plot caCartesianPlot 
      Strip Chart caStripPlot 
       X-Y GraphcaCartesianPlot + or + caStripPlot 
       Message Box? 
       SymbolscaImage? 
      Scale Monitor caThermo 
          
      ControlsControlsControlsDescription
      MEDM widget (from Doc)EDM widget (from Doc)CaQtDM  
      Entry TextTextcaTextEntry 
      SliderSlidercaSlider 
      MenuMenu ButtoncaMenu 
      Choice ButtonChoice ButtoncaChoice 
      Message ButtonMessage ButtoncaMessageButton 
      Related DisplayRelated DisplaycaRelatedDisplay 
      Shell CommandShell CommandcaShellCommand 
       Menu Mux (multiplexor) ? 
       Multiplexor? 
       Button? 
       Motif SlidercaSlider 
       Up/Down Button? 
       Exit Button? 
       Radio BoxcaChoice 
      Wheel Switch caNumeric 
      Composite Use + caFrame and caInclude 
          
      +

      + +
      + + + + +
      +Author: A.C.Mezger   Phone: +41 56 310 3406   Email: anton.mezger@psi.ch   Updated: 06.01.2015   +Source: /afs/psi.ch/project/epics/webhosting/software/caqtdm/index.php   + +
+ diff --git a/software/caqtdm/Screenshot_test_ui.PNG b/software/caqtdm/Screenshot_test_ui.PNG new file mode 100644 index 0000000..fd43272 Binary files /dev/null and b/software/caqtdm/Screenshot_test_ui.PNG differ diff --git a/software/caqtdm/TUPPC121.pdf b/software/caqtdm/TUPPC121.pdf new file mode 100644 index 0000000..0fa2821 Binary files /dev/null and b/software/caqtdm/TUPPC121.pdf differ diff --git a/software/caqtdm/TUPPC121_poster.pdf b/software/caqtdm/TUPPC121_poster.pdf new file mode 100644 index 0000000..f9b6a2b Binary files /dev/null and b/software/caqtdm/TUPPC121_poster.pdf differ diff --git a/software/caqtdm/caQtDM-Logo.PNG b/software/caqtdm/caQtDM-Logo.PNG new file mode 100644 index 0000000..07194e5 Binary files /dev/null and b/software/caqtdm/caQtDM-Logo.PNG differ diff --git a/software/caqtdm/caQtDM_Argonne.pptx b/software/caqtdm/caQtDM_Argonne.pptx new file mode 100644 index 0000000..149b793 Binary files /dev/null and b/software/caqtdm/caQtDM_Argonne.pptx differ diff --git a/software/caqtdm/caQtDM_Lund.pptx b/software/caqtdm/caQtDM_Lund.pptx new file mode 100644 index 0000000..3556c27 Binary files /dev/null and b/software/caqtdm/caQtDM_Lund.pptx differ diff --git a/software/caqtdm/caQtDM_Paris.ppt b/software/caqtdm/caQtDM_Paris.ppt new file mode 100644 index 0000000..77509f8 Binary files /dev/null and b/software/caqtdm/caQtDM_Paris.ppt differ diff --git a/software/caqtdm/caQtDM_introduction.ppt b/software/caqtdm/caQtDM_introduction.ppt new file mode 100644 index 0000000..45f5def Binary files /dev/null and b/software/caqtdm/caQtDM_introduction.ppt differ diff --git a/software/caqtdm/caQtDM_meeting.ppt b/software/caqtdm/caQtDM_meeting.ppt new file mode 100644 index 0000000..178b964 Binary files /dev/null and b/software/caqtdm/caQtDM_meeting.ppt differ diff --git a/software/caqtdm/caqtdm_4_2_5_ACM.apk b/software/caqtdm/caqtdm_4_2_5_ACM.apk new file mode 100644 index 0000000..7f43289 Binary files /dev/null and b/software/caqtdm/caqtdm_4_2_5_ACM.apk differ diff --git a/software/caqtdm/hfdispqt.tar b/software/caqtdm/hfdispqt.tar new file mode 100644 index 0000000..bb9a6ea Binary files /dev/null and b/software/caqtdm/hfdispqt.tar differ diff --git a/software/caqtdm/howto.html b/software/caqtdm/howto.html new file mode 100644 index 0000000..13def14 --- /dev/null +++ b/software/caqtdm/howto.html @@ -0,0 +1,122 @@ + + + + + + +

How to install and run caQtDM...

+ + +

+ +

    + +
  1. +Requirements for linux: +
      +
    • Qt 4.8.2
    • +
    • Qwt 6.0.1
    • +
    • EPICS 3.12.2
    • +
    • Designer
    • +
    + +or + +
      +
    • Qt 5.1
    • +
    • Qwt 6.1.0
    • +
    • EPICS 3.12.2
    • +
    • Designer
    • +
    +

    +
  2. + +
  3. +what is caQTDM: caQtDM offers a collection of special widgets in order to display and control control system data in various ways. +The widgets have been inspired from the well known MEDM package used at many EPICS sites. +However caQtDM is not restricted to EPICS and can/could also support other control systems. +At PSI caQtDM is used at several facilities and controls not only EPICS, but also simultanuously +an older house-made system. +Moreover support has already been introduced for EPICS4, but is still in development.

    +
  4. +how to use it: in case of existing MEDM files, these can be translated to Qt xml files by using the utility adl2ui contained in the package. +Normally nothing will have to be changed in the resulting files, but in case of small problems, like for instance in overlapping order, +the Qt4-designer can be used to correct these. +However when you start from scratch, you will develop your screens with the Qt4-designer and display them by the caQtDM utility, +which takes care of the data acquisition/control and the display. +The conventions for the widgets and channels are fully compatible with MEDM and some other widgets have been added. +The MEDM manual will give you normally all the necessary explanations for the different widgets while the mechanisms are the same. +However you will have to get accustomed with the Qt4-designer utility and a quick look at its manual delivered with it, should give you an idea.

    +
  5. +
  6. +how to install it: the latest version of caQtDM 3.1.4 has now a new build and installation procedure working for several linux platforms. +First you will have to unpack the tar archive, which will create the nessary 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 installtion procedure.

    +
      +
    1. + you will have to install Qt-4.8 and qwt-6 when they are not already installed. + On modern systems Qt4 should already be installed, but the qt4-designer not necessarily and you should install it (eventually with sudo apt-get install qt4-designer). + qwt is normally not installed and you should install this too.

      +
    2. +
    3. + you will have to install EPICS

      +
    4. +
    5. + 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.

      +
    6. +
    7. + the script caQtDM_BuildAll will build you the package now into the directory ./caQtDM_Binaries. + You should obtain there adl2ui, caQtDM, libqtcontrols.so and libcaQtDM_Lib.so as well as a designer directory containing 3 files libqtcontrols*_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 script caQtDM_CleanAll, + which will also delete the resulting binaries.

      +
    8. +
    9. 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.

      +
    10. +
    +
  7. +
  8. +running caQtDM: when the package has been successfully build into the directory ./caQtDM_Binaries, you can start caQtDM by using the script startDM_Local +and the qt4-designer by the script qtdesigner (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 the test.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 soft-ioc shell called with run-epics also provided in the test directory.

    +
  9. +
  10. +in case you have qwt 6.1 you will have to use in caQtDM_QtControls/src the files qwt_thermo_marker_61.* instead of qwt_thermo_marker.*

    +
  11. +
  12. +in case you already use Qt5.1 with qwt6.1 the building should also be straight forward.

    +
  13. + +
  14. +Instructions for compiling caQtDM on Windows

    + +
      +
    • Requirements:
    • +
    • Qt 4.8.2
    • +
    • Qwt 6.0.1
    • +
    • EPICS 3.12.2
    • +
    • MS Visual Studio 2010
    • +
    • Wix 3.0.5419.0
    • +
    +

    +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 of caQtDM_Binaries.

    +To clean the Folder you should use caQtDM_CleanAll.bat.

    + +
+ +good luck and enjoy

+in case of problems, please contact Anton Mezger at PSI (anton.mezger@psi.ch). + +

+ + + diff --git a/software/caqtdm/probe.tar b/software/caqtdm/probe.tar new file mode 100644 index 0000000..be4edaa Binary files /dev/null and b/software/caqtdm/probe.tar differ diff --git a/software/caqtdm/snapshot1.png b/software/caqtdm/snapshot1.png new file mode 100644 index 0000000..f860e0a Binary files /dev/null and b/software/caqtdm/snapshot1.png differ diff --git a/software/caqtdm/snapshot2.png b/software/caqtdm/snapshot2.png new file mode 100644 index 0000000..62d8cf0 Binary files /dev/null and b/software/caqtdm/snapshot2.png differ diff --git a/software/caqtdm/tests.ui b/software/caqtdm/tests.ui new file mode 100644 index 0000000..d409975 --- /dev/null +++ b/software/caqtdm/tests.ui @@ -0,0 +1,6035 @@ + + + MainWindow + + + + 0 + 0 + 1102 + 767 + + + + MainWindow + + + QWidget#centralwidget {background: rgb(58, 94, 171);} + + QTabWidget::pane { /* The tab widget frame */ + border: 2px solid black; + } + + /* Style the tab using the tab sub-control. Note that + it reads QTabBar _not_ QTabWidget */ + QTabBar::tab { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, + stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); + border: 2px solid #C4C4C3; + border-bottom-color: #C2C7CB; /* same as the pane color */ + border-top-left-radius: 4px; + border-top-right-radius: 4px; + min-width: 8ex; + padding: 5px; + } + + QTabBar::tab:selected, QTabBar::tab:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #fafafa, stop: 0.4 #f4f4f4, + stop: 0.5 #e7e7e7, stop: 1.0 #fafafa); + } + + QTabBar::tab:selected { + border-color: #9B9B9B; + border-bottom-color: #C2C7CB; /* same as pane color */ + } + + +caTable { + font: 10pt; + background: cornsilk; + alternate-background-color: wheat; +} + +caLineEdit { + border-radius: 1px; + background: lightyellow; + color: black; + } + +caTextEntry { + color: rgb(127, 0, 63); + background-color: cornsilk; + selection-color: #0a214c; + selection-background-color: wheat; + border: 1px groove black; + border-radius: 1px; + padding: 1px; +} + +caTextEntry:focus { + padding: 0px; + border: 2px groove darkred; + border-radius: 1px; +} + +QPushButton { + border-color: #00b; + border-radius: 2px; + padding: 3px; + border-width: 1px; + + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(224, 239, 255, 255), + stop:0.5 rgba(199, 215, 230, 255), + stop:1 rgba(184, 214, 236, 255)); +} +QPushButton:hover { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(201, 226, 255, 255), + stop:0.5 rgba(177, 204, 230, 255), + stop:1 rgba(163, 205, 236, 255)); +} +QPushButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(174, 219, 255, 255), + stop:0.5 rgba(165, 199, 230, 255), + stop:1 rgba(134, 188, 236, 255)); +} + +QPushButton:disabled { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(174, 219, 255, 255), + stop:0.5 rgba(165, 199, 230, 255), + stop:1 rgba(134, 188, 236, 255)); +} + + + +caSlider::groove:horizontal { +border: 1px solid #bbb; +background: lightgrey; +height: 20px; +border-radius: 4px; +} + +caSlider::handle:horizontal { +background: red; +border: 1px solid #777; +width: 13px; +margin-top: -2px; +margin-bottom: -2px; +border-radius: 2px; +} + + + + + false + + + + + 15 + 30 + 1071 + 676 + + + + false + + + QTabWidget::tab > QWidget >QWidget {background: cornsilk;} + + + 1 + + + + graphics + + + + + 15 + 35 + 1041 + 516 + + + + false + + + QTabWidget::tab > QWidget >QWidget {background: wheat;} + + + QTabWidget::North + + + 5 + + + + caLabel + + + + + 235 + 370 + 16 + 81 + + + + <html><head/><body><p align="center">t<br/>e<br/>s<br/>t</p></body></html> + + + + + + 205 + 315 + 90 + 28 + + + + test + + + Qt::AlignCenter + + + ESimpleLabel::WidthAndHeight + + + caLabel::Alarm + + + caLabel::IfZero + + + + + + QTDM:COUNT:1 + + + + + + 65 + 18 + 531 + 241 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caLabel: </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">fontscalemode (none, width, width and height)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">horizontal or vertical text (use shift carriage return)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">in case of vertical text font should be fixed</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">centered or justified</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">understands html</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li></ul> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 300 + 315 + 90 + 28 + + + + test + + + Qt::AlignCenter + + + ESimpleLabel::WidthAndHeight + + + + 160 + 160 + 164 + + + + + + + 335 + 365 + 16 + 96 + + + + + 13 + + + + <html><head/><body><p align="center">t<br/>e<br/>s<br/>t</p></body></html> + + + ESimpleLabel::None + + + + 160 + 160 + 164 + + + + + + + 55 + 380 + 100 + 20 + + + + QTDM:COUNT:1 + + + + 255 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + + caGraphics + + + + + 35 + 270 + 100 + 100 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + + + + 25 + 5 + 591 + 191 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caGraphics: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">different graphic entities: rectangle, circle, arc, triangle, line, arrow</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">can be rotated</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">outlined or filled</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colomode static or alarm (like medm)</li></ul> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 170 + 240 + 100 + 100 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + 45 + + + + + + 165 + 360 + 100 + 100 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Alarm + + + caGraphics::Calc + + + A>1 + + + QTDM:COUNT:1 + + + + + + 395 + 260 + 100 + 51 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Circle + + + 45 + + + + + + 500 + 235 + 101 + 86 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 1 + + + caGraphics::Arc + + + 45 + + + + + + 445 + 375 + 100 + 51 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Arrow + + + 18 + + + 45 + + + + + + 335 + 380 + 100 + 51 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 2 + + + caGraphics::Arrow + + + 18 + + + 45 + + + + + + 285 + 255 + 100 + 51 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Line + + + 18 + + + 90 + + + + + + 500 + 300 + 100 + 51 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 3 + + + caGraphics::Line + + + 18 + + + 0 + + + + + + 55 + 440 + 100 + 20 + + + + QTDM:COUNT:1 + + + + 255 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + + caPolyline + + + + + 90 + 329 + 116 + 121 + + + + + 0 + 0 + 255 + + + + 33,90;33,90;88,49;96,92;68,107;2,107;23,24 + + + caPolyLine::Filled + + + caPolyLine::Polygon + + + caPolyLine::Calc + + + A>1 + + + QTDM:COUNT:1 + + + + + + 15 + 20 + 591 + 161 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caPolyline: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">dedicated editor</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">polyline and polygone (outlined or filled)</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colomode static or alarm (like medm)</li></ul> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 395 + 245 + 116 + 121 + + + + + 0 + 0 + 255 + + + + 33,90;33,90;88,49;96,92;68,107;2,107;23,24 + + + caPolyLine::Filled + + + caPolyLine::Polyline + + + + + + 220 + 245 + 116 + 121 + + + + + 0 + 0 + 255 + + + + 33,90;33,90;88,49;96,92;68,107;2,107;23,24 + + + caPolyLine::Filled + + + caPolyLine::Polygon + + + + + + 85 + 305 + 100 + 20 + + + + QTDM:COUNT:1 + + + + 255 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + + 265 + 315 + 81 + 81 + + + + + + + earth.gif + + + + + + 165 + 380 + 81 + 81 + + + + + + + earth.gif + + + textEdit_3 + capolyline_2 + calineedit_4 + caimage_4 + capolyline_3 + caimage_5 + capolyline + + + + caImage + + + + + 90 + 260 + 40 + 40 + + + + + + + turbo.gif + + + + + + + + + 15 + 40 + 591 + 156 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caImage: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">animated gif, when no frame specification through calc then goes through frames.</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">animated gif, frame specification through channel.</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">can display jpg, png (and eventually others)</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li></ul></body></html> + + + + + + 195 + 260 + 40 + 40 + + + + A + + + turbo.gif + + + QTDM:COUNT:1 + + + + + + 245 + 250 + 366 + 146 + + + + pvss2.jpg + + + + + + 55 + 370 + 161 + 96 + + + + splash.png + + + + + + 665 + 250 + 81 + 81 + + + + + + + earth.gif + + + + + + caInclude + + + + + 15 + 30 + 591 + 156 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caInclude: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">include of ui files with macro expansion</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li></ul></body></html> + + + + + + 210 + 285 + 255 + 100 + + + + A=QUAD + + + object_quad.adl + + + + + + caFrame + + + + + 10 + 30 + 591 + 156 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caFrame: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">can contain any widgets</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">visibility depending on channels and calculation (like medm)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">when visibility is not needed, you can use QFrame</li></ul></body></html> + + + + + + 45 + 215 + 276 + 161 + + + + QFrame::Panel + + + QFrame::Raised + + + 15 + + + + 160 + 0 + 164 + + + + caFrame::Outline + + + + + 25 + 20 + 127 + 66 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + false + + + QFrame::StyledPanel + + + QFrame::Raised + + + 3 + + + 3 + + + 1 + + + true + + + QTDM:TEST:AO + + + + 255 + 0 + 0 + + + + + 85 + 255 + 255 + + + + caNumeric::User + + + true + + + caNumeric::User + + + 990.000000000000000 + + + 0.000000001000000 + + + + + + 200 + 80 + 51 + 66 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Circle + + + 45 + + + + + + + 355 + 395 + 216 + 78 + + + + QFrame {background: rgb(170, 250, 250);} + + + QFrame::Panel + + + QFrame::Sunken + + + 3 + + + + + 12 + 6 + 106 + 66 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + false + + + QFrame::StyledPanel + + + QFrame::Raised + + + 3 + + + 3 + + + 1 + + + true + + + QTDM:TEST:AO + + + + 255 + 0 + 0 + + + + + 85 + 255 + 255 + + + + caNumeric::User + + + true + + + caNumeric::User + + + 990.000000000000000 + + + 0.000000000000000 + + + + + + 140 + 5 + 51 + 66 + + + + + 255 + 0 + 0 + + + + caGraphics::Filled + + + 6 + + + caGraphics::Circle + + + 45 + + + + + + + 345 + 365 + 266 + 17 + + + + QFrame can also be used for grouping + + + + + + + + monitors + + + + + 15 + 35 + 1046 + 596 + + + + false + + + QTabWidget::tab > QWidget >QWidget {background:wheat;} + + + QTabWidget::North + + + 6 + + + + caLed + + + + + 65 + 18 + 531 + 236 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caLed: </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">led is used for bits display with two states or for alarm display with the usual alarm colors</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">one can specify the truevalue and falsevalue for display.</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colors can be chosen in case of true false scheme</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">circular or rectangular</li></ul> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 305 + 300 + 41 + 41 + + + + + 255 + 0 + 0 + + + + + 0 + 255 + 0 + + + + + 165 + 165 + 165 + + + + + + true + + + + 405 + 310 + 30 + 30 + + + + false + + + true + + + false + + + true + + + QTDM:COUNT:1 + + + + 0 + 255 + 0 + + + + + 255 + 0 + 0 + + + + + 170 + 170 + 170 + + + + + + + 230 + 310 + 31 + 31 + + + + true + + + QTDM:COUNT:1 + + + + 255 + 0 + 0 + + + + + 0 + 255 + 0 + + + + + 173 + 173 + 173 + + + + + + + 110 + 315 + 76 + 20 + + + + QTDM:COUNT:1 + + + + 0 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + true + + + + 475 + 310 + 30 + 30 + + + + true + + + false + + + false + + + true + + + QTDM:COUNT:1 + + + + 0 + 255 + 0 + + + + + 255 + 0 + 0 + + + + + 150 + 150 + 150 + + + + + + true + + + + 535 + 310 + 30 + 30 + + + + true + + + true + + + true + + + true + + + QTDM:COUNT:1 + + + + 0 + 255 + 0 + + + + + 255 + 0 + 0 + + + + + 158 + 158 + 158 + + + + + + + 235 + 395 + 36 + 32 + + + + true + + + false + + + 30 + + + 30 + + + false + + + false + + + QTDM:TEST:AO + + + caLed::Alarm + + + + + + 295 + 395 + 186 + 106 + + + + 3 + + + 0 + + + QTDM:TEST:AO + + + + 255 + 255 + 0 + + + + + 0 + 85 + 255 + + + + caNumeric::User + + + + + + 105 + 395 + 111 + 111 + + + + 0.000000000000000 + + + 5.000000000000000 + + + 5.000000000000000 + + + 0.000000000000000 + + + 0.000000000000000 + + + EAbstractGauge::COLORBAR + + + %.0f + + + 6 + + + 10 + + + QTDM:TEST:AO + + + true + + + + + + caLinearGauge + + + + + 25 + 5 + 591 + 191 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caLinearGauge: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">alarm colors given by values here (not convenient)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">limits can be given through hopr, lopr</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">linear and logarithmique scale</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">horizontal and vertical</li></ul> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 325 + 435 + 100 + 20 + + + + QTDM:COUNT:1 + + + + 255 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + + 75 + 215 + 71 + 261 + + + + + Arial + 5 + + + + 0.000000000000000 + + + 5.000000000000000 + + + 4.000000000000000 + + + 1.000000000000000 + + + 2.000000000000000 + + + 3.000000000000000 + + + false + + + EAbstractGauge::GRADIENT + + + false + + + QTDM:COUNT:1 + + + caLinearGauge::FROM_ZERO + + + + + + 190 + 215 + 71 + 261 + + + + 0.000000000000000 + + + 1000.000000000000000 + + + 4.000000000000000 + + + 1.000000000000000 + + + 2.000000000000000 + + + 3.000000000000000 + + + false + + + EAbstractGauge::SINGLECOLOR + + + true + + + true + + + %.0f + + + QTDM:COUNT:1 + + + caLinearGauge::FROM_ZERO + + + true + + + + + + 320 + 339 + 186 + 80 + + + + 0.000000000000000 + + + 5.000000000000000 + + + 4.000000000000000 + + + 1.000000000000000 + + + 2.000000000000000 + + + 3.000000000000000 + + + false + + + EAbstractGauge::SINGLECOLOR + + + false + + + %.0f + + + QTDM:COUNT:1 + + + Qt::Horizontal + + + caLinearGauge::FROM_ZERO + + + false + + + + + + caCircularGauge + + + + + 55 + 35 + 591 + 191 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caCircularGauge: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">alarm colors given by values here (not convenient)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">limits can be given through hopr, lopr</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">linear and logarithmique scale</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">inner or outer scale</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">display or do not display value</li></ul> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 30 + 255 + 346 + 171 + + + + 0.000000000000000 + + + 5.000000000000000 + + + EAbstractGauge::Channel_Limits + + + 5.000000000000000 + + + 0.000000000000000 + + + 0.000000000000000 + + + EAbstractGauge::COLORBAR + + + %.0f + + + 6 + + + 10 + + + QTDM:TEST:AO + + + true + + + + + + 330 + 260 + 346 + 171 + + + + 0.000000000000000 + + + 10.000000000000000 + + + 3.000000000000000 + + + 1.000000000000000 + + + 1.000000000000000 + + + 3.000000000000000 + + + EAbstractGauge::GRADIENT + + + false + + + %.0f + + + 6 + + + 2 + + + QTDM:COUNT:1 + + + + + + 670 + 240 + 346 + 231 + + + + 0.000000000000000 + + + 5.000000000000000 + + + EAbstractGauge::User_Limits + + + 3.000000000000000 + + + 1.000000000000000 + + + 1.000000000000000 + + + 3.000000000000000 + + + EAbstractGauge::COLORBAR + + + true + + + false + + + %.0f + + + 6 + + + 2 + + + QTDM:COUNT:1 + + + true + + + test + + + + + + 790 + 480 + 100 + 20 + + + + Qt::AlignCenter + + + QTDM:COUNT:1 + + + + 170 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::User + + + true + + + + + + 120 + 440 + 186 + 106 + + + + 3 + + + 0 + + + QTDM:TEST:AO + + + + 255 + 255 + 0 + + + + + 0 + 85 + 255 + + + + caNumeric::User + + + + + + 680 + 40 + 346 + 171 + + + + 0.000000000000000 + + + 5.000000000000000 + + + EAbstractGauge::User_Limits + + + 4.000000000000000 + + + 0.000000000000000 + + + 0.000000000000000 + + + 3.000000000000000 + + + EAbstractGauge::None + + + 3.000000000000000 + + + false + + + EAbstractGauge::COLORBAR + + + false + + + %.0f + + + 6 + + + 2 + + + QTDM:COUNT:1 + + + + + + false + + + + + + 100 + 230 + 231 + 28 + + + + channellimits / channelalarms + + + + + + 390 + 230 + 231 + 28 + + + + channellimits / channelalarms + + + + + + 720 + 230 + 231 + 28 + + + + userlimits / channelalarms + + + + + + 730 + 10 + 231 + 28 + + + + userlimits / useralarms + + + + + + caLineEdit + + + + + 15 + 40 + 591 + 261 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caLineEdit: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">values display with or without unit</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">alignment left, right, center justified</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foreground, background color, colormode default, static, alarm_default, alarm_static </li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">precision, precisionmode (channel or user)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">minimum maximum limits, limitsmode (channel or user)</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">formattype (decimal, string, hex, octal, ...)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">.fontScaleMode (none, height, width and height)</li></ul></body></html> + + + + + + 25 + 335 + 176 + 41 + + + + QTDM:COUNT:1 + + + + 170 + 255 + 255 + + + + caLineEdit::Static + + + caLineEdit::WidthAndHeight + + + true + + + + + + 225 + 345 + 86 + 26 + + + + QTDM:COUNT:1 + + + + 170 + 255 + 255 + + + + caLineEdit::Default + + + + + + 240 + 405 + 56 + 26 + + + + Qt::AlignCenter + + + QTDM:COUNT:1 + + + + 0 + 0 + 0 + + + + caLineEdit::Alarm_Static + + + 1 + + + caLineEdit::User + + + + + + 345 + 340 + 98 + 36 + + + + QTDM:COUNT:1 + + + + 170 + 255 + 255 + + + + caLineEdit::Static + + + + 255 + 0 + 0 + + + + caLineEdit::hexadecimal + + + + + + 510 + 405 + 56 + 26 + + + + Qt::AlignCenter + + + QTDM:COUNT:1 + + + + 0 + 0 + 0 + + + + caLineEdit::Alarm_Static + + + 1 + + + caLineEdit::User + + + caLineEdit::User + + + 2.000000000000000 + + + + + + 390 + 470 + 100 + 20 + + + + QTDM:COUNT:1 + + + caLineEdit::Alarm_Default + + + true + + + 1 + + + caLineEdit::onBackground + + + caLineEdit::User + + + 2.000000000000000 + + + + + + 760 + 290 + 100 + 20 + + + + QTDM:TEST:MBBO + + + + + + 629 + 377 + 56 + 26 + + + + Qt::AlignCenter + + + QTDM:COUNT:1 + + + + 0 + 0 + 0 + + + + caLineEdit::Alarm_Static + + + true + + + caLineEdit::onBackground + + + 1 + + + caLineEdit::User + + + caLineEdit::User + + + 2.000000000000000 + + + + + + 700 + 304 + 56 + 26 + + + + Qt::AlignCenter + + + QTDM:COUNT:1 + + + + 0 + 0 + 0 + + + + caLineEdit::Alarm_Static + + + true + + + + 85 + 0 + 255 + + + + 2 + + + caLineEdit::onBackground + + + 1 + + + caLineEdit::User + + + caLineEdit::User + + + 2.000000000000000 + + + + + + 537 + 492 + 100 + 20 + + + + QTDM:COUNT:1 + + + caLineEdit::Alarm_Default + + + true + + + 1 + + + caLineEdit::onForeground + + + caLineEdit::User + + + 2.000000000000000 + + + + + + caThermo + + + + + 15 + 30 + 591 + 141 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caThermo: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bar monitor up, down, left, right</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">with or without scale</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">alarm and limits mode as in medm</li></ul></body></html> + + + + + + 545 + 230 + 40 + 250 + + + + QwtThermoMarker::LeftScale + + + 3.000000000000000 + + + -2.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Up + + + caThermo::Outline + + + + 253 + 0 + 0 + + + + + 200 + 200 + 200 + + + + caThermo::Static + + + caThermo::User + + + + + + 715 + 80 + 216 + 36 + + + + QwtThermoMarker::BottomScale + + + 3.000000000000000 + + + -2.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Right + + + caThermo::Outline + + + + 253 + 0 + 0 + + + + + 200 + 200 + 200 + + + + caThermo::Static + + + caThermo::User + + + + + + 724 + 195 + 56 + 250 + + + + QwtThermoMarker::LeftScale + + + 50.000000000000000 + + + 0.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Up + + + caThermo::Outline + + + + 20 + 19 + 18 + + + + + 224 + 223 + 222 + + + + caThermo::Alarm + + + caThermo::Channel + + + + + + 210 + 215 + 176 + 282 + + + + A=MMAHLO3,SPADEV=MMAV10,SPAVAL=300 + + + object_halo.adl + + + + + + caCartesianPlot + + + + + 10 + 20 + 591 + 181 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caCartesianPlot: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foreground, background, scale and grid colors</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">up to 6 curves with styles / colors / symbols / filled</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">scale annotation can be disabled</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">axis defined by user, channel or automatic</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">trigger, erase, count channels and plotmode as in medm</li></ul></body></html> + + + + + + 20 + 205 + 980 + 315 + + + + + 0 + 0 + + + + Test Curve + + + [kv] + + + uA + + + QTDM:TEST:AO_WAVE;QTDM:TEST:AO_WAVE + + + caCartesianPlot::FillUnder + + + caCartesianPlot::NoSymbol + + + + 170 + 255 + 255 + + + + + + + caCartesianPlot::Lines + + + caCartesianPlot::Rect + + + + 78 + 165 + 249 + + + + + + + caCartesianPlot::Lines + + + caCartesianPlot::Triangle + + + + 253 + 0 + 0 + + + + + 236 + 236 + 236 + + + + + 236 + 236 + 236 + + + + + 0 + 0 + 0 + + + + caCartesianPlot::User + + + caCartesianPlot::User + + + 0.0;10 + + + 0.01;10 + + + caCartesianPlot::linear + + + caCartesianPlot::log10 + + + + + + 635 + 45 + 186 + 106 + + + + 3 + + + QTDM:TEST:AO + + + + 255 + 255 + 0 + + + + + 0 + 85 + 255 + + + + + + + caStripPlot + + + + + 30 + 210 + 971 + 315 + + + + + 0 + 0 + + + + [time] + + + [counts] + + + QTDM:COUNT:1{"monitor":{"maxdisplayrate":20}};QTDM:TEST:AO;mySoft1 + + + caStripPlot::Second + + + 30.000000000000000 + + + caStripPlot::TimeScale + + + caStripPlot::linear + + + 5.000000000000000 + + + 0.000000000000000 + + + caStripPlot::User + + + caStripPlot::User + + + caStripPlot::FillUnder + + + + 170 + 255 + 127 + + + + 1000.000000000000000 + + + 0.000000000000000 + + + caStripPlot::User + + + caStripPlot::User + + + + 253 + 0 + 0 + + + + 500.000000000000000 + + + 0.000000000000000 + + + caStripPlot::User + + + caStripPlot::User + + + + 26 + 115 + 9 + + + + 500.000000000000000 + + + 0.000000000000000 + + + caStripPlot::User + + + caStripPlot::User + + + + 0 + 0 + 0 + + + + 1.500000000000000 + + + 0.000000000000000 + + + caStripPlot::User + + + caStripPlot::User + + + + 139 + 130 + 57 + + + + + 236 + 236 + 236 + + + + + 236 + 236 + 236 + + + + + 0 + 0 + 0 + + + + true + + + true + + + true + + + + + + 25 + 10 + 591 + 166 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caStripPlot: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foreground, background, scale and grid colors</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">up to 5 curves with styles / colors / filled</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">scale annotation and legends can be disabled</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">time or value axis</li></ul> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + 755 + 50 + 96 + 50 + + + + 3 + + + 0 + + + mySoft1 + + + true + + + + + + 755 + 115 + 96 + 71 + + + + false + + + 3 + + + 0 + + + true + + + QTDM:TEST:AO + + + + 255 + 85 + 0 + + + + caNumeric::Channel + + + true + + + caNumeric::User + + + 1000.000000000000000 + + + -1000.000000000000000 + + + + + + caByte + + + + + 525 + 215 + 15 + 177 + + + + QTDM:TEST:LO + + + caByte::Down + + + 0 + + + 9 + + + caByte::Static + + + + 253 + 0 + 0 + + + + + 60 + 180 + 32 + + + + + + + 640 + 350 + 251 + 21 + + + + QTDM:TEST:LO + + + caByte::Right + + + 0 + + + 9 + + + caByte::Alarm + + + + 253 + 0 + 0 + + + + + 0 + 0 + 255 + + + + + + + 55 + 20 + 591 + 141 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caByte: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foreground, background, direction</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">startBit, endBit</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colormode (static or alarm as in medm)</li></ul></body></html> + + + + + + 670 + 235 + 100 + 22 + + + + QTDM:TEST:LO + + + + + + 670 + 275 + 100 + 22 + + + + QTDM:TEST:LO.HHSV + + + + + + 570 + 235 + 96 + 28 + + + + set value: + + + ESimpleLabel::WidthAndHeight + + + + 160 + 160 + 164 + + + + + + + 570 + 270 + 96 + 28 + + + + set HHSV: + + + ESimpleLabel::WidthAndHeight + + + + 160 + 160 + 164 + + + + + + + 665 + 305 + 211 + 21 + + + + (NO_ALARM, MINOR, MAJOR) + + + ESimpleLabel::WidthAndHeight + + + + 160 + 160 + 164 + + + + + + + caTable + + + + + 225 + 175 + 391 + 351 + + + + QTDM:TEST:AO; QUAD:SOL:1; QUAD:IST:2; QTDM:COUNT:1 + + + 200;100;50 + + + caTable::Alarm + + + caTable::User + + + false + + + false + + + false + + + true + + + + + + 25 + 15 + 591 + 141 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caTable: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> string with channelnames</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colormode, precisionmode, limitsmode</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">precision, maxvalue, minvalue, columnsizes</li></ul></body></html> + + + + + + caBitNames + + + + + 470 + 220 + 110 + 101 + + + + + 18 + + + + QTDM:TEST:MBBO + + + QTDM:COUNT:1 + + + 2 + + + + 85 + 255 + 255 + + + + + 184 + 214 + 236 + + + + EFlag::center + + + ESimpleLabel::Height + + + + + + 65 + 30 + 591 + 141 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caBitNames: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 channels (one for enum string, one for value)</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">startBit, endBit</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">fontScaleMode</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foreground, background colors</li></ul></body></html> + + + + + + caCamera + + + + + 390 + 10 + 646 + 536 + + + + pc7818-1:data{"monitor":{"maxdisplayrate":20}} + + + pc7818-1:width{"monitor":{"maxdisplayrate":1}} + + + pc7818-1:height{"monitor":{"maxdisplayrate":1}} + + + pc7818-1:code{"monitor":{"maxdisplayrate":1}} + + + pc7818-1:bpp{"monitor":{"maxdisplayrate":1}} + + + caCamera::Yes + + + caCamera::grey + + + true + + + 800 + + + 4500 + + + + + + + + + 5 + 10 + 376 + 186 + + + + +QWidget {background: white;} + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caCamera: </p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">channels for data, width, height, code and bpp</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">zoom yes/no</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">colormap (default, grey, spectrum)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">when spectrum then automaticlevels yes/no</li></ul> +<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;">and minlevel/maxlevel</p></body></html> + + + + + + caCalc + + + + + 395 + 265 + 101 + 20 + + + + Qt::AlignCenter + + + mySoft1 + + + + + + 505 + 265 + 100 + 22 + + + + mySoft1 + + + + + + 300 + 260 + 90 + 28 + + + + mySoft1 + + + Qt::AlignCenter + + + ESimpleLabel::Height + + + + + + 300 + 295 + 90 + 28 + + + + mySoft2 + + + Qt::AlignCenter + + + ESimpleLabel::Height + + + + + + 100 + 345 + 151 + 22 + + + + set mySoft1 + + + mySoft1 + + + set mySoft1 + + + + 170 + 170 + 0 + + + + 500 + + + + + + 505 + 295 + 100 + 22 + + + + mySoft2 + + + + + + 395 + 300 + 100 + 20 + + + + mySoft2 + + + + + + 230 + 185 + 96 + 36 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 31 + 16 + + + + mySoft1 + + + 50.000000000000000 + + + + + + 50 + 10 + 31 + 16 + + + + mySoft2 + + + 500.000000000000000 + + + + + + + 305 + 120 + 101 + 56 + + + + 2 + + + caGraphics::Arrow + + + 300 + + + + + + 360 + 85 + 661 + 28 + + + + <html><head/><body><p>defined soft channels (can be calculated with real channels)</p></body></html> + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::Height + + + + + + 560 + 200 + 101 + 56 + + + + 2 + + + caGraphics::Arrow + + + 300 + + + + + + 585 + 165 + 136 + 28 + + + + caTextEntry + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::WidthAndHeight + + + + + + 445 + 335 + 101 + 56 + + + + 2 + + + caGraphics::Arrow + + + 45 + + + + + + 495 + 410 + 136 + 28 + + + + caLineEdit + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::WidthAndHeight + + + + + + 165 + 390 + 101 + 56 + + + + 2 + + + caGraphics::Arrow + + + 45 + + + + + + 260 + 455 + 171 + 28 + + + + caMessageButton + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::WidthAndHeight + + + + + + 410 + 120 + 241 + 28 + + + + can have an initial real value + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::WidthAndHeight + + + + + + 105 + 265 + 96 + 50 + + + + 3 + + + 0 + + + mySoft1 + + + true + + + + + + 30 + 45 + 56 + 241 + + + + QwtSlider::NoScale + + + mySoft1 + + + caSlider::Default + + + + + + 780 + 385 + 71 + 21 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + mycalc{"monitor":{"maxdisplayrate":1}} + + + A+1 + + + mycalc + + + + + + 740 + 280 + 281 + 28 + + + + calculation on own soft channel + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + ESimpleLabel::WidthAndHeight + + + + + + 800 + 320 + 101 + 56 + + + + 2 + + + caGraphics::Arrow + + + 300 + + + + + + Waterfallplot + + + + + 10 + 20 + 601 + 341 + + + + waveform + + + Bucket + + + Fill + + + QTDM:TEST:AO_WAVE + + + 2 + + + caWaterfallPlot::Millisecond + + + 100.000000000000000 + + + 200 + + + 1000.000000000000000 + + + 0.000000000000000 + + + caWaterfallPlot::User + + + caWaterfallPlot::User + + + + + + 720 + 20 + 271 + 351 + + + + Analog on Montor + + + Bucket + + + Fill + + + QTDM:TEST:AO + + + caWaterfallPlot::Monitor + + + 300 + + + 1000.000000000000000 + + + 0.000000000000000 + + + caWaterfallPlot::User + + + caWaterfallPlot::User + + + + + + 570 + 450 + 186 + 106 + + + + 3 + + + QTDM:TEST:AO + + + + 255 + 255 + 0 + + + + + 0 + 85 + 255 + + + + + + + 50 + 350 + 451 + 211 + + + + waveform test data + + + Bucket + + + Fill + + + + + + caWaterfallPlot::Millisecond + + + 100.000000000000000 + + + 300 + + + 1000.000000000000000 + + + 0.000000000000000 + + + caWaterfallPlot::User + + + caWaterfallPlot::User + + + + + + + + controllers + + + + + 15 + 35 + 1046 + 596 + + + + false + + + QTabWidget::tab > QWidget >QWidget {background:wheat;} + + + QTabWidget::North + + + 5 + + + + caNumeric/caApplyNumeric + + + + + 20 + 15 + 531 + 276 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">caNumeric &amp; caApplyNumeric: </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">font can adapt to widget size</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">precisionMode (user or channel)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">limitsMode (user or channel)</li> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">when fixed format use that format</li> +<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:1; text-indent:0px;">when not fixed format and channel, calculate integer and decimal digits, when not fixed format and user, calculate only integer digits with hopr, lopr, use precision from user</p> +<li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">minvalue, maxvalue when user otherwise hopr, lopr</li></ul></body></html> + + + + + + 110 + 405 + 181 + 66 + + + + QFrame { background: rgb(255, 85, 0, 255); color: rgb(0, 170, 0, 255);} + + + 4 + + + 0 + + + true + + + QTDM:TEST:AO + + + + 0 + 170 + 0 + + + + + 255 + 85 + 0 + + + + false + + + + + + 600 + 150 + 100 + 70 + + + + false + + + 4 + + + 1 + + + true + + + QTDM:TEST:AO + + + + 170 + 255 + 255 + + + + caNumeric::User + + + true + + + caNumeric::Channel + + + 100.000000000000000 + + + 0.000000000000000 + + + + + + 705 + 175 + 316 + 17 + + + + fixed format, precision mode=user, prec= (4-1) + + + + + + 605 + 235 + 100 + 70 + + + + false + + + 4 + + + 1 + + + true + + + QTDM:TEST:AO + + + + 85 + 170 + 255 + + + + caNumeric::Channel + + + true + + + caNumeric::Channel + + + 100.000000000000000 + + + 0.000000000000000 + + + + + + 710 + 260 + 326 + 17 + + + + <html><head/><body><p>fixed format, precision mode=channel, prec=(4-1)</p><p><br/></p></body></html> + + + + + + 590 + 345 + 411 + 17 + + + + <html><head/><body><p>no fixed format, precision mode=channel, prec=2, max=100</p></body></html> + + + + + + 450 + 315 + 100 + 70 + + + + false + + + 4 + + + 2 + + + true + + + QTDM:TEST:AO + + + caNumeric::Channel + + + false + + + caNumeric::Channel + + + 100.000000000000000 + + + 0.000000000000000 + + + + + + 450 + 400 + 141 + 70 + + + + false + + + 5 + + + 2 + + + true + + + QTDM:TEST:AO + + + caNumeric::User + + + false + + + caNumeric::Channel + + + 1000.000000000000000 + + + 0.000000000000000 + + + + + + 610 + 425 + 401 + 17 + + + + <html><head/><body><p>no fixed format, precision mode=user, prec=2, max=1000)</p></body></html> + + + + + + 580 + 40 + 120 + 28 + + + + 4 + + + QTDM:TEST:AO + + + + 170 + 255 + 255 + + + + + + + various + + + + + 170 + 130 + 100 + 22 + + + + EPushButton::WidthAndHeight + + + QTDM:TEST:AO + + + QTDM:TEST:AO + + + + 200 + 0 + 0 + + + + 5 + + + + + + 180 + 275 + 71 + 241 + + + + false + + + QwtSlider::LeftScale + + + QTDM:TEST:AO + + + + 224 + 223 + 222 + + + + caSlider::Static + + + 0.100000000000000 + + + + + + 175 + 185 + 100 + 22 + + + + QTDM:TEST:AO + + + + + + 45 + 130 + 116 + 17 + + + + message button : + + + + + + 50 + 190 + 76 + 17 + + + + text entry : + + + + + + 45 + 230 + 111 + 17 + + + + shell command : + + + + + + 50 + 280 + 111 + 17 + + + + slider : + + + + + + 170 + 55 + 96 + 56 + + + + false + + + 3 + + + 0 + + + true + + + QTDM:TEST:AO + + + + 170 + 170 + 0 + + + + caNumeric::Channel + + + true + + + caNumeric::Channel + + + 10.000000000000000 + + + -10.000000000000000 + + + + + + 50 + 65 + 76 + 17 + + + + slider : + + + + + + 200 + 225 + 140 + 26 + + + + set values + + + + 0 + 0 + 0 + + + + + 249 + 218 + 60 + + + + set 1;set 2;set 3 + + + caput QTDM:TEST:AO 10;caput QTDM:TEST:AO 20; caput QTDM:TEST:AO 30 + + + + + + + + + 290 + 20 + 486 + 28 + + + + these controls work only for office network for channels from pc2401 + + + + + + 395 + 345 + 186 + 106 + + + + QTDM:TEST:AO + + + + 255 + 255 + 0 + + + + + 0 + 85 + 255 + + + + + + + 725 + 140 + 56 + 251 + + + + QwtThermoMarker::LeftScale + + + 50.000000000000000 + + + 0.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Up + + + caThermo::Outline + + + + 255 + 85 + 0 + + + + + 222 + 222 + 222 + + + + caThermo::Static + + + caThermo::Channel + + + + + + 435 + 185 + 160 + 70 + + + + 3 + + + 0 + + + QTDM:TEST:AO + + + caApplyNumeric::User + + + caApplyNumeric::User + + + 100.000000000000000 + + + 0.000000000000000 + + + + + + 305 + 280 + 271 + 51 + + + + QwtSlider::NoScale + + + Qt::Horizontal + + + QTDM:TEST:AO + + + caSlider::Right + + + caSlider::Default + + + + + + 400 + 90 + 156 + 23 + + + + QTDM:TEST:AO.PROC + + + QTDM:TEST:AO.PROC + + + 1 + + + + + + 675 + 430 + 111 + 17 + + + + text entry string: + + + + + + 800 + 425 + 100 + 22 + + + + QTDM:TEST:WAVE + + + caLineEdit::string + + + + + + 679 + 480 + 221 + 20 + + + + QTDM:TEST:WAVE + + + + + + 45 + 380 + 90 + 25 + + + + QTDN:TEST:MBBO + + + caMenu::Static + + + + 255 + 255 + 0 + + + + + 255 + 85 + 0 + + + + true + + + + + + 45 + 440 + 90 + 25 + + + + QTDM:TEST:MBBO + + + caMenu::Static + + + + 255 + 255 + 0 + + + + + 255 + 85 + 0 + + + + false + + + + + + 605 + 70 + 163 + 22 + + + + toggle value (double) + + + QTDM:TEST:AO + + + caToggleButton::Alarm + + + 5 + + + 2 + + + + + + 840 + 140 + 56 + 251 + + + + QwtThermoMarker::LeftScale + + + 50.000000000000000 + + + 0.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Up + + + caThermo::Outline + + + + 255 + 0 + 0 + + + + + 255 + 170 + 0 + + + + caThermo::Static + + + caThermo::Channel + + + + + + 650 + 140 + 56 + 251 + + + + QwtThermoMarker::LeftScale + + + 50.000000000000000 + + + 0.000000000000000 + + + QTDM:TEST:AO + + + caThermo::Up + + + caThermo::Outline + + + + 255 + 85 + 0 + + + + + 222 + 222 + 222 + + + + caThermo::Alarm + + + caThermo::Channel + + + + + + 292 + 130 + 100 + 22 + + + + QTDM:TEST:BO + + + EPushButton::WidthAndHeight + + + QTDM:TEST:BO + + + QTDM:TEST:BO + + + + 200 + 0 + 0 + + + + 1 + + + + + + 293 + 155 + 100 + 22 + + + + QTDM:TEST:BO1 + + + EPushButton::WidthAndHeight + + + QTDM:TEST:BO1 + + + QTDM:TEST:BO1 + + + + 200 + 0 + 0 + + + + 1 + + + + + + 295 + 182 + 100 + 22 + + + + QTDM:TEST:BO1 + + + EPushButton::WidthAndHeight + + + QTDM:TEST:BO1 + + + QTDM:TEST:BO1 + + + + 200 + 0 + 0 + + + + DONE + + + + + + 834 + 70 + 192 + 22 + + + + toggle value (ENUM Value) + + + QTDM:TEST:MBBO + + + caToggleButton::Alarm + + + 2 + + + + + + 835 + 98 + 197 + 22 + + + + toggle value (ENUM String) + + + QTDM:TEST:MBBO + + + caToggleButton::Alarm + + + RESET + + + OFF + + + + + + caMenu + + + + + 255 + 125 + 61 + 17 + + + + menu : + + + + + + 355 + 125 + 90 + 25 + + + + QTDM:TEST:MBBO + + + caMenu::Static + + + true + + + + + + 390 + 280 + 90 + 25 + + + + QTDM:TEST:MBBO + + + caMenu::Static + + + + 255 + 255 + 0 + + + + + 255 + 85 + 0 + + + + false + + + + + + 275 + 280 + 90 + 25 + + + + QTDM:TEST:MBBO + + + caMenu::Static + + + + 255 + 255 + 0 + + + + + 255 + 85 + 0 + + + + true + + + + + + caChoice + + + + true + + + + 320 + 79 + 96 + 86 + + + + QTDM:TEST:MBBO + + + + 0 + 0 + 0 + + + + + 255 + 0 + 0 + + + + caChoice::center + + + caChoice::Static + + + EPushButton::None + + + + + + 65 + 80 + 166 + 166 + + + + QTDM:TEST:MBBO + + + + 170 + 255 + 255 + + + + + 255 + 0 + 0 + + + + caChoice::center + + + caChoice::Static + + + EPushButton::WidthAndHeight + + + + + + 75 + 295 + 70 + 55 + + + + QTDM:TEST:MBBO + + + caChoice::Static + + + + + + 270 + 340 + 376 + 55 + + + + + DejaVu LGC Sans + 20 + + + + QTDM:TEST:MBBO + + + caChoice::center + + + caChoice::Static + + + caChoice::Column + + + EPushButton::None + + + + + + 310 + 455 + 181 + 55 + + + + QTDM:TEST:MBBO + + + caChoice::Static + + + caChoice::RowColumn + + + + + + caRelatedDisplay + + + + + 265 + 194 + 281 + 31 + + + + untitled + + + untitled + + + untitled + + + + + + caRowColMenu::Row + + + + + + 280 + 250 + 120 + 28 + + + + untitled + + + + 0 + 0 + 0 + + + + + 187 + 193 + 135 + + + + atest + + + untitled + + + + + + caRowColMenu::Menu + + + + + + caShellCommand / caScriptButton + + + + + 315 + 90 + 231 + 31 + + + + execute shell script + + + + 170 + 255 + 255 + + + + sh -c + + + for i in $(seq 1 100); + do echo $i; + caput QTDM:TEST:AO $i; + sleep 1; + done + + + + + + 315 + 145 + 231 + 31 + + + + execute image + + + + 170 + 255 + 255 + + + + caScriptButton::Visible + + + caQtDM untitled.ui + + + + + + + + + 85 + 90 + 171 + 31 + + + + execute image + + + 1 + + + caQtDM + + + untitled.ui& + + + + + + + + + + 770 + 15 + 191 + 21 + + + + mynow + + + + + + + 0 + 0 + 1102 + 24 + + + + + + + + caNumeric + QFrame +
caNumeric
+
+ + caApplyNumeric + QWidget +
caApplyNumeric
+
+ + caSlider + QWidget +
caSlider
+
+ + caMenu + QComboBox +
caMenu
+
+ + caChoice + QWidget +
caChoice
+
+ + caRelatedDisplay + QWidget +
caRelatedDisplay
+
+ + caShellCommand + QWidget +
caShellCommand
+
+ + caTextEntry + caLineEdit +
caTextEntry
+
+ + caMessageButton + QPushButton +
caMessageButton
+
+ + caToggleButton + QCheckBox +
caToggleButton
+
+ + caScriptButton + QWidget +
caScriptButton
+
+ + caSpinbox + QFrame +
caSpinbox
+
+ + caFrame + QFrame +
caFrame
+ 1 +
+ + caLabel + QLabel +
caLabel
+
+ + caGraphics + QWidget +
caGraphics
+
+ + caPolyLine + QWidget +
caPolyLine
+
+ + caImage + QWidget +
caImage
+
+ + caInclude + QWidget +
caInclude
+
+ + caLed + QWidget +
caLed
+
+ + caLinearGauge + QWidget +
caGauge
+
+ + caCircularGauge + QWidget +
caGauge
+
+ + caLineEdit + QLineEdit +
caLineEdit
+
+ + caThermo + QWidget +
caThermo
+
+ + caCartesianPlot + QFrame +
caCartesianPlot
+
+ + caStripPlot + QFrame +
caStripPlot
+
+ + caByte + QWidget +
caByte
+
+ + caTable + QTableWidget +
caTable
+
+ + caBitnames + QWidget +
caBitnames
+
+ + caCamera + QWidget +
caCamera
+
+ + caCalc + QLabel +
caCalc
+
+ + caWaterfallPlot + QWidget +
caWaterfall
+
+
+ + +
diff --git a/software/caqtdm/tn_snapshot1.jpg b/software/caqtdm/tn_snapshot1.jpg new file mode 100644 index 0000000..4a755dc Binary files /dev/null and b/software/caqtdm/tn_snapshot1.jpg differ diff --git a/software/caqtdm/tn_snapshot2.jpg b/software/caqtdm/tn_snapshot2.jpg new file mode 100644 index 0000000..d40131f Binary files /dev/null and b/software/caqtdm/tn_snapshot2.jpg differ diff --git a/software/firewire.html b/software/firewire.html new file mode 100644 index 0000000..3674896 --- /dev/null +++ b/software/firewire.html @@ -0,0 +1,340 @@ + + + + + +EPICS Video Server using Firewire Camera + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Updated: 26.05.2011
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

EPICS Video Server using Firewire Camera

+ +

FIREWIRE CAMERAS

+

+Firewire (IEEE1394) is a very fast external bus standard that supports data transfer rates of up to 400Mbps in IEEE 1394a, and up to 3.2 Gbps in IEEE1394b. A single IEEE 1394 port can be used to connect up to 63 external devices. In addition to its high speed, IEEE1394 also supports isochronous data - delivering data at a guaranteed rate. This makes it ideal for devices that need to transfer high priority data in real-time, such as video devices. The IEEE1394 bus supports both Plug-and-Play and hot plugging, and also provides power to peripheral devices. +

+Many new cameras are equipped with Firewire interface. These cameras are more preferment, offering more valuable features in comparison to traditional analogue cameras. In order to fulfill all requirements in the SLS, it was decided to integrate the Firewire cameras to the existing control system. +EPICS SERVER +Epics Server: Introduction +

+Recent development in EPICS (3.14.x) has allowed for an operating system independent implementation. We decided to benefit from interfacing a Firewire camera to an EPICS server running on a Linux PC. Linux offers open source libraries that support Firewire devices, thus it appeared to be well suited for the camera integration. In addition, an X windows (motif) application was developed to provide a live feed from the camera by reading the image waveform. In the following, we explain software and hardware aspects, and typical applications of Firewire camera based systems at the SLS. +

+

Epics Server: Server side

+

+EPICS based image acquisition server depends on several software components which can be dynamically loaded to the Linux kernel at run time. The layered architecture of the EPICS server is presented in Fig. 1.
+Recent Linux kernels (> 2.4) are coming with built-in IEEE1394 modules:

+	*ieee1394: Core of the IEEE1394 subsystem.
+	*raw1394: Higher level driver module for bus access.
+	*video1394: Fast DMA frame transfer driver.
+	*ohci1394: Low level host card driver.
+At the user space level, Libraw1394 is a library that provides access to the raw1394 bus module and Libdc1394 is a high level API. +

+

system schematic
+Fig1: System Schematic & System Components

+
+

+EPICS device support uses non-polling (blocking) DMA capture functions for image acquisition. An image acquisition process is repeated periodically. First the single image is captured, processed and then placed in the waveform. Any Channel Access (EPICS) based application can retrieve an image from the waveform.
+Moreover, the server performs on-line centriod finding algorithm, background subtractions, averaging (i.e. improves signal-to-noise ratio), maximum pixelintensity calculation, standard deviation, and calibration.

+ +

Epics Server:Client side

+ +An medm GUI is used to control the camera and EPICS server parameters, such as start/stop image transmission, region of interest selection, frame rate, shutter gain and threshold control. It also shows both vertical and horizontal distributions of the images pixel intensity, and includes an image save option (Fig. 2).

+

medm gui
+Fig 2: (MEDM GUI)

+
+

+A motif based application is used to display captured images in live mode. The application uses Channel Access libraries, therefore it is already integrated with EPICS. The application displays the images which are stored in the waveform channels on the server side. EPICS monitoring mechanism enables the client application to display newly acquired images when the waveform updates. The application can display monochrome and color images. Users can choose one of many color interpolation algorithms for Bayer color representation at run time (Fig. 3). +

+

live feed
+Fig 3: Live feed display application +
+

+

Epics Server:Hardware Description

+ +We are using a compact desktop (Barebone) called Pundit and Pundit-R, both manufactured by ASUS. This desktop is about a third of the volume of a conventional desktop PC. It has high-speed processing power with 2.8GHz Pentium 4 CPU and 1 GB RAM. The motherboard has a built-in Open Host Controller Interface (OHCI) compatible Firewire card with 6-pin port.
+The Camera is a Point Grey Flea which is compliant with IIDC 1394-Based Digital Camera Specifications (also know as DCAM spec). This specification describes a CSR - Control and Status Register - layer on top of IEEE1394. The camera resolutions varies from a low of 640x480 to a high of 1024x768 pixels, it support frame rates from 1.875 up to 60 fps. It can use internal soft triggers or be triggered externally, this allows for synchronizing with other subsystems. The camera size is small, 30mm x 31mm x 29mm, this helps mounting it in crowded as well as not easily accessible locations. + +

Epics Server:Applications

+FEMTO Slicing Laser Stabilization Feedback +

+The FEMTO laser focus point - where the electron and laser beams interact - is approximately 45 meters away from the laser source. With 4 mirrors along the laser path, there are many potential causes for laser drift (laser source, optical components, temperature). A laser monitoring system based on Firewire digital cameras was implemented. The image is grabbed, processed and the center of mass is calculated. A feedback system will use this information andadjust the mirrors accordingly to compensate for the drift. Thus it will maintain optimal electron and laser beams interaction conditions. +

+

laser
+Laser Drift with/without Feedback +
+

+X-ray Beam-position Monitoring +

+Critical information about the X-ray beam shape, profile and position is extracted. The setup used at the micro Absorption Spectroscopy (mXAS) beamline includes a scintillator that converts x-rays into visible light, lenses that enables to change the field of view and thus obtain higher resolution, and a Firewire digital camera. +

+Beamline Equipment Commissioning +

+Commissioning of beamline optical components, using synchrotron light, such as monochromator crystals parallelism tests is an example of an application. Furthermore, stability of the synchrotron light and determining eventual sources of vibration are also sought. +

+Live feed +

+The client application is used to display a live feed of the monitored subsystem. + +

Epics Server: Results

+

+The EPICS server approach allows for acquiring and processing the images at high rates (10 Hz). Thus, it can be used to track fast changes to the monitored system. On the other hand, it allows for online image processing to characterize synchrotron light and Laser beam. More importantly, it is fully integrated into the control system environment which has the obvious advantage of being operated simultaneously with other components in the beamlines or accelerator complex. +

+Download the sources: ccd1394-1.2.tar.gz(312842 bytes). +

+Software Requierments: This pdf file explains the software functionality Image Processing Requierments (190846 bytes)

+Supported cameras at the SLS:Point Grey Flea +

+Useful links: Linux 1394, Coriander, linux & 1394:How To? +

+Acknowledgment: This software was originaly developed by Steven Hunt, further modifications were added by Elke+Dirk Zimoch, Miroslaw Dach and Ahed Aladwan. +

+Contact: The driver is currently supported by Damir Anicic. +

+Swiss Light Source, 2006, (updated 2011) +


+Updated: 26.05.2011   +Source: /afs/psi.ch/project/epics/webhosting/software/firewire/index.php   + +
+ diff --git a/software/firewire/Required_processing_of_flea.pdf b/software/firewire/Required_processing_of_flea.pdf new file mode 100644 index 0000000..388e90a Binary files /dev/null and b/software/firewire/Required_processing_of_flea.pdf differ diff --git a/software/firewire/ccd1394-1.2.tar.gz b/software/firewire/ccd1394-1.2.tar.gz new file mode 100644 index 0000000..90379f2 Binary files /dev/null and b/software/firewire/ccd1394-1.2.tar.gz differ diff --git a/software/firewire/firewire_files/image003.gif b/software/firewire/firewire_files/image003.gif new file mode 100644 index 0000000..4e8680f Binary files /dev/null and b/software/firewire/firewire_files/image003.gif differ diff --git a/software/firewire/firewire_files/image005.jpg b/software/firewire/firewire_files/image005.jpg new file mode 100644 index 0000000..6abf6d8 Binary files /dev/null and b/software/firewire/firewire_files/image005.jpg differ diff --git a/software/firewire/firewire_files/image007.jpg b/software/firewire/firewire_files/image007.jpg new file mode 100644 index 0000000..f70aa4f Binary files /dev/null and b/software/firewire/firewire_files/image007.jpg differ diff --git a/software/firewire/firewire_files/image011.jpg b/software/firewire/firewire_files/image011.jpg new file mode 100644 index 0000000..1ced4c1 Binary files /dev/null and b/software/firewire/firewire_files/image011.jpg differ diff --git a/software/generalTime.html b/software/generalTime.html new file mode 100644 index 0000000..0388977 --- /dev/null +++ b/software/generalTime.html @@ -0,0 +1,367 @@ + + + + + + +generalTime + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Babak Kalantari
+Phone: +41 56 310 5122
+Updated: 11.09.2007
+
+
Printer friendly version +
 
+

generalTime

+ + + +

Contents

+ + + +

What is generalTime?

+ +

+generalTime is a timekeeping mechanism implemented as an +EPICS +device and driver support to provide and maintain clock time for an EPICS IOC. It is a replacement for +drvTS in iocCore of previous EPICS versions (before 3.14.8). It is meant to provide reliable and consistent time +across IOC's and combine different timekeeping methods on the same (EPICS) network. +It implements a failover mechanism specially in case of hardware-assisted time providers which may fail for different reasons. +

+ + +

Download

+

+The package includes drvGeneralTime, drvDevNTPTime, drvDevVWTime and drvDevEventTime: +

    +
  • Latest, genTime_1_2.tar.gz (29kB). +
    (a) EventTime relies only on generalTime for a reference time and has no direct + contact to external time refrences such as NTP server. +
    (b) For EventTime validation aoRecord type is used instead of bo to allow a desired + tolerance in time diffrence. +
    (c) NTPTime fixed to handle arbitrary system clock rates. +
    (d) generalTime init routine is called at initHookAtBeginning +
  • +
  • Prev. , genTime_1_1.tar.gz (29kB). +
    EventTime driver was added to the initial version of generalTime (including NTP and VxWorks Time). +
  • +
+

+ + +

How to use it?

+The first thing is to compile the package (for EPICS 3.14.8 and later). The supported OS at the moment is VxWorks. +You need to load the driver at IOC startup in an arbitrary stage. +For the NTPTime and VWTime no configuration at startup is required, they +will be initilized automatically. For the EventTime a configuration command must be called at the +startup to configure the IOC with the right parameters such as master/slave, clock rate, UDP ports, etc. For detailed info see the +README.txt in the package and follow the section System requirements & configurations. + + +

Timekeeping mechanism

+

+generalTime maintains a list of prioritized clocks or time providers. +When a client (i.e. EPICS record) requests the time to update its timestamp, generalTime gives the time of +the highest avaiable and correct time provider (see the following figure). The idea behind is as the +following: +The generalTime device support has a central role. +Any time-provider acts as an independent driver, therefore they can be added to existing ones like a plug-in. +When a record wants to get a timestmap (i.e. when it is processed) it always uses the same method by a call to generalTime. generalTime goes through +the list of the registered time providers from the highest priority and returns the first correct time. Time providers are responsible +to determine whether or not they are correct. +

+At the moment the folowing time providers are available: +
    + +
  • + +

    NTP Time

    +

    +drvDevNTPTime maintains a clock (time provider) which relies on the NTP server of its +subnet. It is a pure soft clock. The NTPTime has been given a higher priority than VWTime which is logical. Each IOC +periodically syncs its time with the NTP server. +

    +
  • + +
  • + +

    VxWorks Time

    +

    +drvDevVWTime maintains a clock (time provider) which synchronizes itself with the highest available +and correct time provider (which has been registered to generalTime, e.g. NTPTime). VWTime is the lowest priority clock and must always be avaiable. +It uses on-board real-time clock of the CPU. +

    +
  • + +
  • + +

    Event Time

    +

    +drvDevEventTime maintains a clock using the event system (APS/SLS/Diamond) timing hardware. +It uses a master-slave mechanism to achieve tightly synchronized clocks with high quality timetamps. +The master IOC generates and distributes clock ticks (event) to slave IOC's via the event system. Therefore +EventTime clocks in all IOC's (master and all slaves) tick exactly at the same rate which provides us with perfect +time synchrony. The highest timestamp resolution supported at the moment is about 333 nanosecond corresponding +to 3 MHz clock rate, however the event system hardware is capable to provide up to 125 MHz rates. The limitation of +3 MHz at the moment is only due to PLL algorithm in drvDevEventTime running on the event master IOC which regulates the clock rate to folllow +global time (provided by generalTime via drvDevNTPTime); otherwise if the user can live without runnig PLL algorithm at +the risk of drifing from global time, then one can go to higher clock rates as well. +

    +
  • +
+ + +

Acknowledgements

+

+I should like to thank Jim Kowalkowsky for initial development of drvTS, Dave Thompson and Sheng Peng for priority-based clock concept, Timo +Korhonen for the fruitful discussions we've had during the EventTime dvelopment, Andrew Johnson +for his valuable comments. +

+ + +
+Author: Babak Kalantari   Phone: +41 56 310 5122   Email: babak.kalantari@psi.ch   Updated: 11.09.2007   +Source: /afs/psi.ch/project/epics/webhosting/software/generalTime/index.php   + +
+ diff --git a/software/generalTime/EVENT_README.php.html b/software/generalTime/EVENT_README.php.html new file mode 100644 index 0000000..fc06d90 --- /dev/null +++ b/software/generalTime/EVENT_README.php.html @@ -0,0 +1,676 @@ + + + + + + +generalTime + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Babak Kalantari
+Phone: +41 56 310 5122
+Updated: 11.09.2007
+
+
Printer friendly version +
 
+

generalTime

+ +

+
##################################################################### +
+
Author: Babak Kalantari at PSI dot CH +
Institution: Paul Scherrer Institute / SLS controls +
Initial Version: 17.11.2006 +
Purpose: Description of usage and functionality of EventTime driver support for generalTime +
Acknowledgment: +The code was developed through interactive technical discussions with Timo Korhonen. +Some parts of the code has been inspired by the earlier work of Jim Kowalkowsky. +
+
##################################################################### +

+ +

+
######################################################################### +
###### modifictaion log ####### +
version 1.1 +
- initial version +
+
version 1.2 +
- master PLL/validation relies only generalTime +
- clock validation changed to aoRecord +
+
The event time driver 'drvDevEventTime' has been developed to support +hardware synchronized timestamps for generalTime driver. It provides +tight clock synchronization among IOC's equipped with required hardware. +
+Great care has been taken into account to keep the code as OS-independent +as possible, however, at present we can only gaurantee its proper operation +under vxWorks. Where it was possible, we have used standard EPICS routines +supported by libCom. + +

+

+
######################################################################### +
## +
### Organization of this document +
## +

    +
  • System requirements & configurations
  • +
  • Relation to generalTime
  • +
  • Initialization
  • +
  • EPICS threads
  • +
  • Hardware interface
  • +
  • Clock monitoring & controls
  • +
  • Data types
  • +
+ +

+ + +

+
######################################################################### +
## +
### System requirements & configurations +
## + +
- Epics 3.14.8 or higher. +
- generalTime driver +
- EventTime driver (drvDevEventTime.c) +
+
For Event Master IOC: +
- EVG +
- EVR +
+
For Event Slave IOC: +
- EVR +
+
There is no rule or limitation on the card number of EVG-EVR. +The EventTime driver recognizes the first card (EVG/EVR) which is +found, to be configured in the linked list of the EVG/EVR drivers as +we have implemented this for EVG/EVR-100 series in the corresponding +device drivers. This first card can have any card number for example 5. + +
To use the EventTime, the following configuration +function should be called in the IOC startup script: +
+
EvtTimeConfigure( +
master, ## 0=slave, 1=master +
sync_rate_sec, ## sync rate in seconds +
clock_rate_hz, ## clock rate in Herz +
master_port, ## master listens here (UDP port 18323) +
slave_port, ## slave talks here (UDP port 18322) +
time_out ## reply timout in ms +
) +
+
+The event Master IOC is responsible for generation and distribution of the +clock tick event (0x7c) and tick-counter-reset event (0x7d). +The user has to make sure that the parameter "clock_rate_hz" is consistent +with the physical tick frequncy which goes on the event stream. +If the interface functions to control the tick rate (set/get_ClkFreq, +see "Hardware Interface" section below) are present, the tick frequecny +will be regulated to follow reference (global) time provided by +generalTime otherwise tick rate stays constant and the EventTime still +works but drifts from the global time during a long run (typically few weeks). +

+ +

+
######################################################################### +
## +
### Relation to generalTime +
## +
+
The concept of generalTime introduced by Scheng Peng (SNS) provides a +priority-based clock mechanism. To keep it simple, generalTime maintains +a list of the time providers (clocks) each with a certain priority. +Whenever asked for the current time the generalTime gets the time from the +highest priority avaiable clock. Each time-provider has to register itself +to generalTime at init using the registeration functions provided by +generalTime driver. Each time provider is responsible for consistency of +its own time and as soon as it finds out that it is not valid anymore should +anounce itself as faulty. generalTime gets to know this by ckecking the return +value of the call to time provider (epicsTimeERROR or notepicsTimeERROR). +The EvenTime driver relation to generalTime also satisfies what was described. +At its init routine EventTime driver checks all the requirements (see - +initialization section below) and when everything turned out to be fine +it registres itself with generalTime and declares itself as a time provider. +There are some critical points where EventTime driver relies on generalTime: +
+
1) when EventTime wants to setup its clock it has to set its time to an +estimation of the current time (actual global time). It relies only on generalTime +to provide a consitent time. At init EventTime asks generalTime by calling +"epicsTimeGetCurrent()". +
+
2) When the EventTime is invalid and the user (via aoRecord) tries to validate +it, then a call to "epicsTimeGetCurrent()" gets the EPICS current time and the +result is compared with the time read from a direct call to EventTime in order +to judge if EventTime is ready to become valid. +

+ +

+ +
######################################################################### +
## +
### Initialization +
## +
+
The initialization of EventTime is done via "EventTime_Init()" which is called +at "initHookAtEnd" (timing hardware has to be initialized before EventTime). +
The following sequence is done by the init routine: +

    +
  1. checks if EventTime device private (pEventTimePvt) exists
  2. +
  3. EventTime is set to FALSE state (invalid)
  4. +
  5. checks if timing receiver HW (EVR) is installed
  6. +
  7. checks if the "get_ticks()" is installed (by the HW driver e.g. EVR driver)
  8. +
  9. checks if "ts_sync_signal()" is installed and uses it to get sync event + number, if this function is not installed the "ER_EVENT_RESET_TICK" is used
  10. +
  11. checks if "force_sync()" is installed by HW driver and if not uses + the "EVTforceSoftSync()" instead.
  12. +
  13. checks if there is a "direct_time()" provided
  14. +
  15. sets up the "event_table" buffer to maintain individual event timestamps
  16. +
  17. determines if it can have the role of Master/Slave according to the user + request in configuration function and the info it has got in previous steps
  18. +
  19. EventTime registers its "EVTeventHandler()" to the receiver (EVR) driver
  20. +
  21. EventTime registers its "EVTerrorHandler()" to the receiver (EVR) driver
  22. +
  23. for the Master: +
    - calls EVTstartStampServer() +
    - calls EVTstartSyncServer() +
    - calls EVTstartPLL() if "set_ClkFreq()" and "get_ClkFreq()" are present
  24. +
  25. for the Slave: +
    - calls EVTsetClockFromMaster() +
    - calls EVTstartSyncClient()
  26. +
  27. calls "EVTstartClkWatch()"
  28. +
  29. calls any HW specific initialization provided by HW driver (ts_drv_init)
  30. +
  31. registers itself to generalTime by a call to "generalTimeTpRegister()" with + time provider priority set to 70
  32. +
+

+ + +

+ +
######################################################################### +
## +
### EPICS threads +
## +

    +
  • epicsThreadId EVTstartSyncServer(); +
    creates the server thread only on event Master IOC that + broadcasts the sync time stamp every time a sync event + (default 0x7d) is receive by the event system. The event + time is not valid until the first sync event ocuuers. + When the event time becomes invalid due to a reason the + sync messages are not broadcast except if the detected fault + is "EVT_ntpLock_lost". This is to inform slaves quickly to + give up the master and invalidate their event time.
  • + + +
  • epicsThreadId EVTstartStampServer(); +
    creates the Server thread only on event Master IOC that + listens for time stamp and sync requests from slaves. If + the event time is not valid the thread does not reply the + request (to force slaves to give up the master).
  • + +
  • epicsThreadId EVTstartPLL(); +
    creates the server thread only on event Master IOC to keep + event time in sync with a reference time provided by generalTime. + It invalidates the event time when it cannot lock to refernce time + and tells the slaves that it is faulty, but it tries endlessly to + lock the refernce by restoring the initial frequency of the clock + tick. When it succeeds to track reference time it validates the + event time again. When EventTime is valid it gets the reference time + by a calling generalTimeGetExceptPriority() which returns the best + available time excluding a time provider (in this case EventTime).
  • + +
  • epicsThreadId EVTstartSyncClient(); +
    creates the client thread that listens for sync time stamp + message (from Master) on a port and verifies with this, its + sync time stamp. If it does not receive the sync message after + three sync interval it invalidates the event time and sets + the fault state to "EVT_sync_timeout". Furthermore if it + receives a sync message where it says master has the state of + "EVT_ntpLock_lost" then it also sets its fault state the same.
  • + + +
  • epicsThreadId EVTstartClkWatch(); +
    creates a thread that periodically (2 seconds) checks if the + current event time is in progress and if not, it invalidates + the event time and sets the fault state to "EVT_tick_fail".
  • + +
+ + +

+

+ +
######################################################################### +
## +
### Hardware interface +
## +
+
Event time is only usable if adequate hardware (HW) is present +in the system and the minimal requirements are supported and +plugged (installed) in the following HW-interface structure. +The event time driver checks this in its initialization routine. + +
/** +
receiver +
**/ +
An IOC which uses Event Time and is configured to be Slave, must +set at least some members of the global variable 'TSrxHW' in dev/drv +support of its timing hardware (e.g. event system) as following: +
+
- card A non-negative integer corresponding + to the reciver. +
- have_rx A pointer to a function which recognizes + the card (No specific functionality is required). +
- get_ticks A pointer to a funtion which can give the actual + value of the clock tick counter whenever is called. +
- register_signal_handler A pointer to a registration function to provide + event system indication to event time driver for + event timestamp handling. +
- register_error_handler A pointer to a registration function to provide + event system indication to event time driver for + error handling (e.g. borken link, lost heartbeat, etc.) + +
struct devTSrxHWStruct { +
int numFuncs; +
int card; +
long (*have_rx)(int Card); +
long (*get_ticks)(int Card, unsigned long *Ticks); +
long (*register_signal_handler)(int Card, void(*func)()); +
long (*register_error_handler)(int Card, void(*func)()); +
long (*direct_time)(); +
long (*ts_drv_init)(); +
long (*ts_get_time)(struct timespec*); +
long (*ts_user_get)(int event_number,struct timespec* sp); +
long (*ts_sync_signal)(); /* gives sync event (default 0x7d) */ +
}; +
typedef struct devTSrxHWStruct devTSrxHW; + + +
/** +
transmitter +
**/ +
An IOC which uses Event Time and is configured to be Master, in addition +to set all the required members of TSrxHW (receiver), must also set the +required members of global variable 'TStxHW' in dev/drv support of its +timing hardware (e.g. event system) as following: +
+
- card A non-negative integer corresponding + to the transmitter (e.g. event generator). +
- have_tx A pointer to a function which recognizes + the card (No specific functionality is required). + +
- set_ClkFreq Pointers to functions which could set / get +
- get_ClkFreq the freuqncy of the clock tick generator. This + is used to provide the synchronization with + external time refernce namely NTP server and + compensatefor the drift rate. + The clock tick generator can be a tick rate + generator which is integrated in the event generator + or a totally stand-alone device external to event + generator (e.g. a pulse generator). + +
+
struct devTStxHWStruct { +
int numFuncs; +
int card; +
long (*have_tx)(int Card); +
long (*force_sync)(int Card); +
long (*set_ClkFreq)(int Card, unsigned long freq); +
long (*get_ClkFreq)(int Card, unsigned long *freq); +
}; +
typedef struct devTStxHWStruct devTStxHW; + +

+

+ +
######################################################################### +
## +
### Clock monitoring & controls +
## +
+
- aoRecord support to validate the event time. + When the EventTime has been invalidated for + whatever reason (e.g. broken event stream), it + should be validated after the problem has been + solved. + How this is handled is as the following: + When the EventTime is invalid and the ao record is + processed to validate it, record processing routine + first asks generalTime (calling epicsTimeGetCurrent) + for the current time; it immediately asks EventTime + directly (calling EVTgetTimeStamp) too. Then it + compares the difference of theses two with the VAL + field and allows a validation of EventTime only when + the differnce of the two time values is less than VAL + seconds. Otherwise it rejects the validation operation + and returns a WRITE alarm. + +
- mbbiRecord support to find out the reason of + the event time invalidity (fauilor detection). + The following are the possible states: +
+ EVT_time_OK: event time is not faulty (it is valid) +
+
EVT_stream_lost: occures when event system harware (receiver) + detects that event stream is lost and sends + an interrupt if enabled +
+
EVT_sync_timeout: occures when the sysnchronization message broadcast + from master does not arrive after 3*sync_rate_sec +
+
EVT_ntpLock_lost: occures when Master is not able anymore to keep track + of external time reference (e.g. NTP server) +
+
EVT_tick_fail: occures when clock tick counter is not increasing + + +

+

+ +
######################################################################### +
## +
### Data types +
## +
+
+
typedef enum { EVT_sync_master, +
EVT_sync_slave, +
EVT_direct_master, +
EVT_direct_slave +
} TStime_type; +
+
+
typedef enum { EVT_time_OK, +
EVT_stream_lost, +
EVT_sync_timeout, +
EVT_ntpLock_lost, +
EVT_tick_fail} TSfault_type; +
+ +

+

+ +
############################################## +
#### fixes in iocClockRegister.c #### +
############################################## +
## located in +
## "base-3.14.x/src/libCom/osi/os/vxWorks" +
## +
## The main point here is to allow generalTime to install the time +
## providers by calling iocClockRegister() in drvGeneralTime.c +
## Therefore the iocClockRegister() was modified as the following. +
## +
void iocClockRegister(pepicsTimeGetCurrent getCurrent, +
pepicsTimeGetEvent getEvent) +
{ +
if(!piocClockPvt) { +
printf("iocClockRegister: iocClock NOT yet initialized\n"); +
iocClockInit(); +
} +
piocClockPvt->getCurrent = getCurrent; +
piocClockPvt->getEvent = getEvent; +
if(piocClockPvt->getEvent==NULL) +
printf("iocClockRegister: getEvent Not found! ...\n"); +
return; +
} +
+
## +
## I added 'else' part to iocClockGetEvent() which is necessary +
## when a record requests the event time upon processing; that +
## means when the TSE field is set to a non-zero event number. +
## +
int iocClockGetEvent(epicsTimeStamp *pDest, int eventNumber) +
{ +
if (eventNumber==epicsTimeEventCurrentTime) { +
*pDest = piocClockPvt->clock; +
return(0); +
} +
else { +
epicsTimeGetEvent(pDest,eventNumber); +
return(0); +
} +
return(epicsTimeERROR); +
} +
############################################## +

+ +
+Author: Babak Kalantari   Phone: +41 56 310 5122   Email: babak.kalantari@psi.ch   Updated: 11.09.2007   +Source: /afs/psi.ch/project/epics/webhosting/software/generalTime/EVENT_README.php   + +
+ diff --git a/software/generalTime/genTime_1_1.tar.gz b/software/generalTime/genTime_1_1.tar.gz new file mode 100644 index 0000000..01408fd Binary files /dev/null and b/software/generalTime/genTime_1_1.tar.gz differ diff --git a/software/generalTime/genTime_1_2.tar.gz b/software/generalTime/genTime_1_2.tar.gz new file mode 100644 index 0000000..a3d0cba Binary files /dev/null and b/software/generalTime/genTime_1_2.tar.gz differ diff --git a/software/generalTime/pclk.jpg b/software/generalTime/pclk.jpg new file mode 100644 index 0000000..24ef532 Binary files /dev/null and b/software/generalTime/pclk.jpg differ diff --git a/software/ioc-octave.html b/software/ioc-octave.html new file mode 100644 index 0000000..b0a6d9b --- /dev/null +++ b/software/ioc-octave.html @@ -0,0 +1,278 @@ + + + + + + +IOC-OCTAVE: IOC server with built-in octave core + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Miroslaw Dach
+Phone: +41 56 310 4578
+Updated: 01.02.2007
+
+
Printer friendly version +
 
+

IOC-OCTAVE: IOC server with built-in octave core

+ + +

What is IOC-OCTAVE?

+ +

+ +

It is an IOC which has a built-in OCTAVE engine. The EPICS channels, within the IOC-OCTAVE server, +can dynamically create OCTAVE variables and use OCTAVE functions. The advantage of using an IOC-OCTAVE +server is that the EPICS based control system is enriched with OCTAVE mathematical capabilities. +OCTAVE contains well tested algorithms which are used by a large community of scientists. + +The implementation of the IOC-OCTAVE server was done for PCs running LINUX. +

+ +

Download

+Download the package IOC-OCTAVE250107.tar.gz (332kB). +

+

Example Application

+

Below is an application which uses the IOC-OCTAVE to perform image processing. The images come straight from a camera connected with a firewire interface to the PC. The EPICS client obtains image parameters and its profile runtime from the IOC-OCTAVE server. +

+

+
+

Advanced Photon Source, Swiss Light Source, 2006

+ + +
+Author: Miroslaw Dach   Phone: +41 56 310 4578   Email: miroslaw.dach@psi.ch   Updated: 01.02.2007   +Source: /afs/psi.ch/project/epics/webhosting/software/ioc-octave/index.php   + +
+ diff --git a/software/ioc-octave/IOC-OCTAVE250107.tar.gz b/software/ioc-octave/IOC-OCTAVE250107.tar.gz new file mode 100644 index 0000000..9f03d49 Binary files /dev/null and b/software/ioc-octave/IOC-OCTAVE250107.tar.gz differ diff --git a/software/ioc-octave/cameraIEEE1394small.gif b/software/ioc-octave/cameraIEEE1394small.gif new file mode 100644 index 0000000..62d7a0b Binary files /dev/null and b/software/ioc-octave/cameraIEEE1394small.gif differ diff --git a/software/ioc-octave/octave-ioc.gif b/software/ioc-octave/octave-ioc.gif new file mode 100644 index 0000000..0e8a7ca Binary files /dev/null and b/software/ioc-octave/octave-ioc.gif differ diff --git a/software/iocLogBrowser.html b/software/iocLogBrowser.html new file mode 100644 index 0000000..788ea7e --- /dev/null +++ b/software/iocLogBrowser.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 
[TXT]iocLogger23-Mar-2006 10:06 1.9K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=D;O=A.html b/software/iocLogBrowser/index.html?C=D;O=A.html new file mode 100644 index 0000000..6b0d008 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=D;O=A.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 
[TXT]iocLogger23-Mar-2006 10:06 1.9K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=D;O=D.html b/software/iocLogBrowser/index.html?C=D;O=D.html new file mode 100644 index 0000000..af784a7 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=D;O=D.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]iocLogger23-Mar-2006 10:06 1.9K 
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=M;O=A.html b/software/iocLogBrowser/index.html?C=M;O=A.html new file mode 100644 index 0000000..dc8822d --- /dev/null +++ b/software/iocLogBrowser/index.html?C=M;O=A.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 
[TXT]iocLogger23-Mar-2006 10:06 1.9K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=M;O=D.html b/software/iocLogBrowser/index.html?C=M;O=D.html new file mode 100644 index 0000000..af784a7 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=M;O=D.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]iocLogger23-Mar-2006 10:06 1.9K 
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=N;O=A.html b/software/iocLogBrowser/index.html?C=N;O=A.html new file mode 100644 index 0000000..17e376a --- /dev/null +++ b/software/iocLogBrowser/index.html?C=N;O=A.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 
[TXT]iocLogger23-Mar-2006 10:06 1.9K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=N;O=D.html b/software/iocLogBrowser/index.html?C=N;O=D.html new file mode 100644 index 0000000..af784a7 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=N;O=D.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]iocLogger23-Mar-2006 10:06 1.9K 
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=S;O=A.html b/software/iocLogBrowser/index.html?C=S;O=A.html new file mode 100644 index 0000000..35b4154 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=S;O=A.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]iocLogger23-Mar-2006 10:06 1.9K 
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/index.html?C=S;O=D.html b/software/iocLogBrowser/index.html?C=S;O=D.html new file mode 100644 index 0000000..5b316c6 --- /dev/null +++ b/software/iocLogBrowser/index.html?C=S;O=D.html @@ -0,0 +1,34 @@ + + + + Index of /software/iocLogBrowser + + +

Index of /software/iocLogBrowser

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]iocLogBrowser.tcl23-Mar-2006 09:51 7.4K 
[TXT]iocLogger23-Mar-2006 10:06 1.9K 

+
+Utilities for the usage of the iocLogServer
+
+Introduction:
+    The iocLogServer is a utility provided by epics base.
+    It is a server that collects messages from IOCs and writes them to a file.
+    The utility is described in the IOC application developers guide.
+    The script "iocLogger" is a wrapper to start the iocLogServer from
+    a cron job and auto generate the file names. 
+    All configuration of the iocLogServer is done in the script.
+    The application iocLogBrowser.tcl is a wishx application to browse
+    the files generated by the iocLoggger.
+    The configuration expects logfiles from three different IOC networks,
+    i.e. three iocLogger collect messages from their network and write
+    to different files.
+    
+Files:
+    + iocLogger
+    + iocLogBrowser.tcl
+
+ diff --git a/software/iocLogBrowser/iocLogBrowser.tcl b/software/iocLogBrowser/iocLogBrowser.tcl new file mode 100644 index 0000000..9438fda --- /dev/null +++ b/software/iocLogBrowser/iocLogBrowser.tcl @@ -0,0 +1,208 @@ +#!/bin/bash +#\ +if [ $# -eq 1 ] && [ $1 = "-v" ] ;then echo "\$Header: /cvs/PROJECTS/applications/tcl/iocLogBrowser.tcl,v 1.8 2006/03/23 08:47:08 luedeke Exp $";exit;fi +#\ +if [ $# -eq 1 ] && [ $1 = "-?" ] ;then echo "using: $0";echo "browser for ioc logfiles";exit;fi +#\ +wishx "$0" "$*";exit 0 +# wish program starts here + +################################################################################################## +# define your subnets to browse files (one log file per network) +# the "subnet" index is actually only the prefix of your log file +# if you just have one file, specify it's name like: +# array set subnets {MyLogFile "Accelerator"} + +array set subnets {172.20 "Machine" 172.19 "Beamline" 129.129 "Office"} + +# in the logfile_dir has to be one file per subnet, named exactly like the subnet, e.g. "172.20" +# older logfiles should start with the subnet name, e.g. 172.20_until_2004_12_31 + +set logfile_dir /exchange/slsop/common/log/iocLog + +################################################################################################## + +set ItemList {ioc date message} +wm protocol . WM_DELETE_WINDOW "exit 0" +proc draw_window {} { + global env ItemList msg_pattern ioc_pattern subnets + option add *Entry*Background white + option add *Listbox*Background white + lassign [split [exec hostname -i] "."] i1 i2 i3 i4 + set net "$i1.$i2" + . conf -menu .menubar + menu .menubar;.menubar conf -cursor [. cget -cursor] + .menubar add cascade -label File -menu .menubar.mFile + menu .menubar.mFile + foreach net [lsort [array names subnets]] { + .menubar.mFile add command -label "read $net log" \ + -command "show_file \[load_file $net\]" + } + .menubar.mFile add command -label "read other file" \ + -command {show_file [load_file]} + .menubar.mFile add command -label "quit" \ + -command "destroy .;exit" + + .menubar add cascade -label View -menu .menubar.mView + menu .menubar.mView + .menubar.mView add command -label "pattern search" \ + -command { + wm deiconify .search + catch {wm geom .search [eval format "%+i%+i" [winfo pointerxy .]]} + update + raise .search + } + + toplevel .search + wm withdraw .search + wm protocol .search WM_DELETE_WINDOW {wm withdraw .search} + wm title .search "iocLog search" + label .search.l1 -text "messages pattern:" + entry .search.e1 -width 20 -textvar msg_pattern + frame .search.b1 + button .search.b1.s -text search -command {search message $msg_pattern} + button .search.b1.f -text filter -command {filter message $msg_pattern} + button .search.b1.c -text clear -command {set msg_pattern ""} + pack .search.b1.s .search.b1.f .search.b1.c -side left -expand yes -fill x + + label .search.l2 -text "ioc pattern:" + entry .search.e2 -width 20 -textvar ioc_pattern + frame .search.b2 + button .search.b2.s -text search -command {search ioc $ioc_pattern} + button .search.b2.f -text filter -command {filter ioc $ioc_pattern} + button .search.b2.c -text clear -command {set ioc_pattern ""} + pack .search.b2.s .search.b2.f .search.b2.c -side left -expand yes -fill x + + label .search.l3 -text "date range:" + entry .search.e31 -width 20 -textvar date1_pattern + entry .search.e32 -width 20 -textvar date2_pattern + frame .search.b3 + button .search.b3.s -text search -command { + search date "[clock scan $date1_pattern] [clock scan $date2_pattern]" + } + button .search.b3.f -text filter -command { + filter date "[clock scan $date1_pattern] [clock scan $date2_pattern]" + } + button .search.b3.c -text clear -command { + set date1_pattern "";set date2_pattern "" + } + pack .search.b3.s .search.b3.f .search.b3.c -side left -expand yes -fill x + button .search.b4 -text "reload" -command {show_file [reload_file]} + + pack .search.l1 .search.e1 .search.b1 .search.l2 .search.e2 .search.b2 \ + .search.l3 .search.e31 .search.e32 .search.b3 .search.b4\ + -side top -expand yes -fill x + scrollbar .lb_sy -command "scroll_y" -orient vertical + foreach item $ItemList { + label .l_$item -text "$item" -width 11 -anchor w + listbox .lb_$item -yscrollcommand "set_y .lb_$item" -width 17 -height 15\ + -selectmode single + } + .lb_date conf -width 18 + .lb_message conf -width 50 + grid .l_ioc .l_date .l_message + grid .lb_ioc .lb_date .lb_message .lb_sy -sticky nesw + grid columnconfigure . 2 -weight 1 + grid rowconfigure . 1 -weight 1 +# pack .l.ioc .l.date .l.message -side left -expand no -fill x +# pack .lb.ioc .lb.date .lb.message .lb.sy -side left -expand yes -fill both +# pack config .lb.sy -fill y -expand no +# pack .l .lb -side top -expand yes -fill x +# pack config .lb -fill both -expand yes +} + +proc set_y {w args} { + global ItemList + eval .lb_sy set $args + lassign [$w yview] y1 y2 + foreach item $ItemList { + .lb_$item yview moveto $y1 + } +} +proc scroll_y {args} { + global ItemList + foreach item $ItemList { + eval .lb_$item yview $args + } +} +proc reload_file {} { + global filename + if [file readable "$filename"] { + return [read_file $filename] + } else { + tk_messageBox -message "You must select a valid log file" -type ok + return "" + } +} +proc load_file {{net ""}} { + global filename subnets logfile_dir + set filename $logfile_dir/$net + if {![file readable "$filename"] || [file isdir "$filename"] } { + foreach net [lsort [array names subnets]] { + lappend types [list "$subnets($net) Network" "$net*"] + } + set filename [tk_getOpenFile -initialdir "$logfile_dir" -filetypes $types] + } + + wm title . "iocLog of [file tail $filename]" + return [reload_file] +} +proc show_file {file} { + .lb_ioc delete 0 end + .lb_date delete 0 end + .lb_message delete 0 end + while {![lempty $file]} { + set line [ctoken file "\n"] + if [catch {set message [lassign $line ioc D M d T y] } ] { + if [catch { + lassign [translit "{}\[\]\"" "()()^" "$line" ] ioc D M d T y + } ] { + puts stderr "parse error: skip input line\n $line" + continue + } + regsub "^$ioc +$D +$M +$d +$T +$y" "$line" "" message + } + .lb_ioc insert end $ioc + .lb_date insert end [clock format [clock scan "$D $M $d $T $y"] \ + -format "%T %d %b %Y"] + .lb_message insert end $message + } +} +proc test_ioc {pattern line} {return [regexp $pattern $line]} +proc test_message {pattern line} {return [regexp $pattern $line]} +proc test_date {pattern line} { + lassign $pattern date1 date2 + set date [clock scan $line] + return [expr $date >= $date1 && $date <= $date2] +} +proc search {f_item pattern} { + .lb_$f_item selection clear 0 end + loop i [.lb_$f_item index end] -1 -1 { + if [test_$f_item $pattern [.lb_$f_item get $i]] { + .lb_$f_item selection set $i + } + } +} +proc filter {f_item pattern} { + global ItemList + loop i [.lb_$f_item index end] -1 -1 { + if ![test_$f_item $pattern [.lb_$f_item get $i] ] { + foreach item $ItemList { + .lb_$item delete $i + } + } + } +} +set net $argv +puts $net +if [lempty $net] { + lassign [split [exec hostname -i] "."] i1 i2 i3 i4 + set net "$i1.$i2" +} +puts $net +if [lempty [array names subnets $net]] { + set net "" +} +puts $net +draw_window +show_file [load_file $net] diff --git a/software/iocLogBrowser/iocLogger b/software/iocLogBrowser/iocLogger new file mode 100644 index 0000000..27d5b5d --- /dev/null +++ b/software/iocLogBrowser/iocLogger @@ -0,0 +1,76 @@ +#!/bin/sh +# To change the default values for the EPICS Environment parameters, +# uncomment and modify the relevant lines below. + +export EPICS_IOC_LOG_PORT +export EPICS_IOC_LOG_FILE_NAME +export EPICS_IOC_LOG_FILE_LIMIT +EPICS_IOC_LOG_PORT="6500" +EPICS_IOC_LOG_FILE_NAME="/exchange/slsop/common/log/iocLog/$(hostname -i|cut -f 1,2 -d .)" +MV_LOG="" +if [ "$1" = "-m" ] +then + email="$2" + shift 2 +else + email="" +fi +outtmp=/tmp/iocLogger_out$$ +errtmp=/tmp/iocLogger_err$$ +rm -f $outtmp $errtmp +function output () { + if [ "$email" = "" ] + then + echo $* + else + echo $* >>$outtmp + fi +} +{ +if touch $EPICS_IOC_LOG_FILE_NAME 2>/dev/null +then + mv $EPICS_IOC_LOG_FILE_NAME ${EPICS_IOC_LOG_FILE_NAME}_$(date +%Y%m%d_%H%M) + output "Moved logfile to ${EPICS_IOC_LOG_FILE_NAME}_$(date +%Y%m%d_%H%M)" +fi +EPICS_IOC_LOG_FILE_LIMIT="10000000" + +LOGSVRNAME=iocLogServer +export PATH=$PATH:/prod/bin +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/prod/lib +LOGSVR=$(which $LOGSVRNAME) +if [ "$1" = "stop" ] || [ "$1" = "restart" ] +then + pid=$(ps acx | awk '$0 ~/iocLogServer/{print $1}') + if [ "${pid}" != "" ] + then + output "Stopping EPICS Log Server " + kill ${pid} + sleep 1 + else + output "No EPICS Log Server running" + fi +fi +if [ "$1" = "start" ] || [ "$1" = "restart" ] +then + if [ -x $LOGSVR ] + then + output "Starting EPICS Log Server $LOGSVR ${EPICS_IOC_LOG_FILE_NAME}" + $LOGSVR & + else + output "location of \"$LOGSVRNAME\" must be in the PATH" + output "$LOGSVR" + fi +fi +if [ "$1" != "start" ] && [ "$1" != "restart" ] && [ "$1" != "stop" ] +then + echo "using: $0 start|stop|restart" >&2 +fi +} >>$outtmp 2>>$errtmp +if [ -s $errtmp ] && [ "$email" != "" ] +then + cat $outtmp $errtmp | mail -s "iocLogger $1 $(hostname)" $email +elif [ "$email" = "" ] +then + cat $outtmp $errtmp +fi +rm -f $outtmp $errtmp diff --git a/software/iocmon.html b/software/iocmon.html new file mode 100644 index 0000000..f805094 --- /dev/null +++ b/software/iocmon.html @@ -0,0 +1,363 @@ + + + + + +IOCMON: I/O Controller Monitoring Utility + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Updated: 26.05.2011
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

IOCMON: I/O Controller Monitoring Utility

+ +

What is IOCMON?

+It is an IOC monitoring application that runs @ the IOC (EPICS + vxWorks) and monitors the available resources. It extends the current vxstats functionality and provide the data in a more readable way. For example, instead of showing a string that includes all the boot parameters, we have separated each individual boot parameter and provide it as an independent EPICS channel. Moreover, it additionally report network interface statistics and channel access links. +

+For example it reports the following: + +

Memory

+

+- Number of bytes in the IOC that is not allocated
+- Number of bytes allocated
+- Size of largest free block
+

CPU

+- Estimated percent CPU usage by tasks
+- CPU Heart Beat (Alive)
+- System File Descriptors
+- Number of file descriptors currently in use
+

Channel Access

+- Number of current CA clients
+- Number of current CA clients connections
+- Number of CA database links
+- Number of CA database links not connected
+- Number of CA database links disconnected
+

Network Interface

+- Number of times failed to find space
+- Number of times waited for a space
+- Number of times drained protocol for space (no. of IP fragments that are dropped)
+- Number of sent packets
+- Number of received packets
+- Number of input errors
+- Number of output errors
+- Number of dropped packets
+- Number of collisions (This is an indication of the network medium load seen by the IOC)
+ +

Examples of Use (Networking)

+ +For example, we see output errors reported by the IOC.s Network Interface (EPICS 3.13.9, MVME2300, vxWorks 5.3.1) once the Network Switch is configured to Full Duplex. We assume if there is a miss configured device that is spamming packets, IOC.s in that subnet will start reporting collisions, the same should be true when the load goes very high.
+This info can help to:
+1- Detects problems in the network related to wrong equipment configuration and the like
+2- Optimize our network stack configuration parameters to fit our applications needs
+3- Anticipate future network operation needs
+

+

The GUI

+
the gui
+
+

+

+

An example template:

+
+# sample database using all the different types of statistics:
+record(ai,"$(CRATE):LOAD") {
+    field(DESC, "CPU Load")
+    field(SCAN, "5 second")
+    field(DTYP, "VX stats")
+    field(INP,  "@cpu")
+    field(EGU,  "%")
+    field(HOPR, "100")
+    field(HIHI, "90")
+    field(HIGH, "70")
+    field(HHSV, "MAJOR")
+    field(HSV,  "MINOR")
+    field(PREC, "2")
+    field(ADEL, "5")
+}
+
+record(ai,"$(CRATE):CAL") {
+    field(DESC, "CA LINKS")
+    field(SCAN, "10 second")
+    field(DTYP, "VX stats")
+    field(INP,  "@ca_links")
+    field(EGU,  "#")
+    field(PINI, "YES")
+}
+
+record(ai,"$(CRATE):CALNCONN") {
+    field(DESC, "CA Links Not Conncted")
+    field(SCAN, "10 second")
+    field(DTYP, "VX stats")
+    field(INP,  "@ca_lnconn")
+    field(EGU,  "#")
+    field(HOPR, "20000")
+    field(HIHI, "20")
+    field(HIGH, "1")
+    field(HHSV, "MAJOR")
+    field(HSV,  "MINOR")
+    field(PINI, "YES")
+    field(ADEL, "1")
+}
+
+record(ai,"$(CRATE):NETPIERR") {
+    field(DESC, "NET Packets Inp Err")
+    field(SCAN, "10 second")
+    field(DTYP, "VX stats")
+    field(INP,  "@net_pierror")
+    field(EGU,  "#")
+    field(PINI, "YES")
+    field(ADEL, "100")
+}
+
+ +Download the package: iocmon-1.7.0.tar.gz (102378 bytes).

+Acknowledgment:vxStats was developed by J.Kowalkowski, M.Kraimer, S.Jacobson and C.Lionberger. EPICS 3.14 support for vxStats was done by M. Kraimer.

+vxStats can be found at EPICS soft support website +

+Contact: The package is currentlc supported by Dirk Zimoch. +

+Swiss Light Source, 2006 (updated 2011) +


+Updated: 26.05.2011   +Source: /afs/psi.ch/project/epics/webhosting/software/iocmon/index.php   + +
+ diff --git a/software/iocmon/iocmon-1.7.0.tar.gz b/software/iocmon/iocmon-1.7.0.tar.gz new file mode 100644 index 0000000..fc242c5 Binary files /dev/null and b/software/iocmon/iocmon-1.7.0.tar.gz differ diff --git a/software/iocmon/iocmon_T2_3.13.9_mv2300.gif b/software/iocmon/iocmon_T2_3.13.9_mv2300.gif new file mode 100644 index 0000000..ba6c4f0 Binary files /dev/null and b/software/iocmon/iocmon_T2_3.13.9_mv2300.gif differ diff --git a/software/pcmon.html b/software/pcmon.html new file mode 100644 index 0000000..87bab48 --- /dev/null +++ b/software/pcmon.html @@ -0,0 +1,277 @@ + + + + + + +PCMON: PC Monitoring Utility + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Miroslaw Dach
+Phone: +41 56 310 4578
+Updated: 28.05.2010
+
+
Printer friendly version +
 
+

PCMON: PC Monitoring Utility

+ + +

What is PCMON?

+ +

It is an PC monitoring application that runs as +an IOC (EPICS + Linux) and monitors the available +resources.

+ +

Download

+Download the package PC-MONITOR-EPICS3.14.7.tar.gz    ver. 1.0.2   (28.05.2010) (301kB). +

+Bug fixes:

+version: PC-MONITOR ver. 1.0.2
+It was fixed the bug in the ipAddr function. + +

+

Example Panel

+

Below is a screenshot of a MEDM panel, displaying the monitored values. +

+

+Download the MEDM template. +

Swiss Light Source, 2010

+ + +
+Author: Miroslaw Dach   Phone: +41 56 310 4578   Email: miroslaw.dach@psi.ch   Updated: 28.05.2010   +Source: /afs/psi.ch/project/epics/webhosting/software/pcmon/index.php   + +
+ diff --git a/software/pcmon/G_PCMON_status.adl b/software/pcmon/G_PCMON_status.adl new file mode 100644 index 0000000..2348fb8 --- /dev/null +++ b/software/pcmon/G_PCMON_status.adl @@ -0,0 +1,1637 @@ + +file { + name="/afs/psi.ch/user/d/dach/EPICS3.14_bootPC/bootPcSupportApp/src/G_PCMON_status.adl" + version=030003 +} +display { + object { + x=187 + y=213 + width=516 + height=629 + } + clr=14 + bclr=2 + cmap="" + gridSpacing=5 + gridOn=0 + snapToGrid=0 +} +"color map" { + ncolors=65 + colors { + ffffff, + ececec, + dadada, + c8c8c8, + bbbbbb, + aeaeae, + 9e9e9e, + 919191, + 858585, + 787878, + 696969, + 5a5a5a, + 464646, + 2d2d2d, + 000000, + 00d800, + 1ebb00, + 339900, + 2d7f00, + 216c00, + fd0000, + de1309, + be190b, + a01207, + 820400, + 5893ff, + 597ee1, + 4b6ec7, + 3a5eab, + 27548d, + fbf34a, + f9da3c, + eeb62b, + e19015, + cd6100, + ffb0ff, + d67fe2, + ae4ebc, + 8b1a96, + 610a75, + a4aaff, + 8793e2, + 6a73c1, + 4d52a4, + 343386, + c7bb6d, + b79d5c, + a47e3c, + 7d5627, + 58340f, + 99ffff, + 73dfff, + 4ea5f9, + 2a63e4, + 0a00b8, + ebf1b5, + d4db9d, + bbc187, + a6a462, + 8b8239, + 73ff6b, + 52da3b, + 3cb420, + 289315, + 1a7309, + } +} +rectangle { + object { + x=5 + y=5 + width=505 + height=42 + } + "basic attribute" { + clr=27 + } +} +text { + object { + x=5 + y=10 + width=516 + height=30 + } + "basic attribute" { + clr=50 + } + textix="$(PC)" + align="horiz. centered" +} +text { + object { + x=7 + y=267 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Memory Used" +} +text { + object { + x=7 + y=287 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Memory Free" +} +text { + object { + x=7 + y=307 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Memory Shrd" +} +text { + object { + x=7 + y=327 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Memory Buff" +} +text { + object { + x=7 + y=347 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Swap Av" +} +text { + object { + x=7 + y=367 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Swap Used" +} +text { + object { + x=7 + y=387 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Swap Free" +} +text { + object { + x=7 + y=407 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Swap Cached" +} +"text update" { + object { + x=272 + y=267 + width=100 + height=15 + } + monitor { + chan="$(PC):MEMUSED" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=287 + width=100 + height=15 + } + monitor { + chan="$(PC):MEMFREE" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=307 + width=100 + height=15 + } + monitor { + chan="$(PC):MEMSHRD" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=327 + width=100 + height=15 + } + monitor { + chan="$(PC):MEMBUFF" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=347 + width=100 + height=15 + } + monitor { + chan="$(PC):SWAPAV" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=367 + width=100 + height=15 + } + monitor { + chan="$(PC):SWAPUSED" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=387 + width=100 + height=15 + } + monitor { + chan="$(PC):SWAPFREE" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=407 + width=100 + height=15 + } + monitor { + chan="$(PC):SWAPCACH" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=377 + y=267 + width=20 + height=15 + } + monitor { + chan="$(PC):MEMUSED.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=287 + width=20 + height=15 + } + monitor { + chan="$(PC):MEMFREE.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=307 + width=20 + height=15 + } + monitor { + chan="$(PC):MEMSHRD.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=327 + width=20 + height=15 + } + monitor { + chan="$(PC):MEMBUFF.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=347 + width=20 + height=15 + } + monitor { + chan="$(PC):SWAPAV.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=367 + width=20 + height=15 + } + monitor { + chan="$(PC):SWAPUSED.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=387 + width=20 + height=15 + } + monitor { + chan="$(PC):SWAPFREE.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=407 + width=20 + height=15 + } + monitor { + chan="$(PC):SWAPCACH.EGU" + clr=14 + bclr=2 + } + limits { + } +} +text { + object { + x=7 + y=443 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Local Time" +} +"text update" { + object { + x=141 + y=443 + width=150 + height=15 + } + monitor { + chan="$(PC):TIME" + clr=14 + bclr=3 + } + align="horiz. right" + limits { + } +} +text { + object { + x=7 + y=463 + width=100 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Boot Time" +} +"text update" { + object { + x=141 + y=463 + width=150 + height=15 + } + monitor { + chan="$(PC):BOOTTIME" + clr=14 + bclr=3 + } + align="horiz. right" + limits { + } +} +polyline { + object { + x=6 + y=432 + width=505 + height=0 + } + "basic attribute" { + clr=14 + } + points { + (6,432) + (511,432) + } +} +text { + object { + x=6 + y=597 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Version" +} +"text update" { + object { + x=141 + y=597 + width=350 + height=15 + } + monitor { + chan="$(PC):VERSION" + clr=14 + bclr=3 + } + limits { + } +} +text { + object { + x=7 + y=510 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="IP Address" +} +"text update" { + object { + x=141 + y=510 + width=150 + height=15 + } + monitor { + chan="$(PC):IPADDR" + clr=14 + bclr=3 + } + align="horiz. right" + limits { + } +} +text { + object { + x=7 + y=537 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="System" +} +"text update" { + object { + x=141 + y=537 + width=150 + height=15 + } + monitor { + chan="$(PC):SYSNAME" + clr=14 + bclr=3 + } + limits { + } +} +text { + object { + x=7 + y=483 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Up Time" +} +"text update" { + object { + x=141 + y=483 + width=150 + height=15 + } + monitor { + chan="$(PC):UPTIME" + clr=14 + bclr=3 + } + align="horiz. right" + limits { + } +} +text { + object { + x=7 + y=557 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Release" +} +"text update" { + object { + x=141 + y=557 + width=150 + height=15 + } + monitor { + chan="$(PC):RELEASE" + clr=14 + bclr=3 + } + limits { + } +} +text { + object { + x=6 + y=577 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Machine" +} +"text update" { + object { + x=141 + y=577 + width=150 + height=15 + } + monitor { + chan="$(PC):MACHINE" + clr=14 + bclr=3 + } + limits { + } +} +oval { + object { + x=401 + y=327 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=329 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):MEMBUFF" + } +} +oval { + object { + x=401 + y=347 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=349 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):SWAPAV" + } +} +oval { + object { + x=401 + y=367 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=369 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):SWAPUSED" + } +} +oval { + object { + x=401 + y=387 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=389 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):SWAPFREE" + } +} +oval { + object { + x=401 + y=407 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=409 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):SWAPCACH" + } +} +oval { + object { + x=401 + y=267 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=401 + y=307 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=309 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):MEMSHRD" + } +} +oval { + object { + x=401 + y=287 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=289 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):MEMFREE" + } +} +text { + object { + x=11 + y=60 + width=130 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU Heart Beat" + align="horiz. right" +} +"text update" { + object { + x=145 + y=60 + width=50 + height=15 + } + monitor { + chan="$(PC):HBT" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +oval { + object { + x=205 + y=60 + width=14 + height=14 + } + "basic attribute" { + clr=19 + } +} +oval { + object { + x=205 + y=60 + width=14 + height=14 + } + "basic attribute" { + clr=15 + } + "dynamic attribute" { + vis="if not zero" + chan="$(PC):WD" + } +} +rectangle { + object { + x=5 + y=52 + width=226 + height=30 + } + "basic attribute" { + clr=14 + fill="outline" + width=6 + } +} +rectangle { + object { + x=7 + y=54 + width=222 + height=26 + } + "basic attribute" { + clr=35 + fill="outline" + width=2 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):HBT" + } +} +composite { + object { + x=240 + y=52 + width=265 + height=30 + } + "composite name"="" + children { + text { + object { + x=248 + y=60 + width=87 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU Load " + align="horiz. right" + } + "text update" { + object { + x=338 + y=60 + width=100 + height=15 + } + monitor { + chan="$(PC):LOAD" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } + } + "text update" { + object { + x=443 + y=60 + width=50 + height=15 + } + monitor { + chan="$(PC):LOAD.EGU" + clr=14 + bclr=2 + } + limits { + } + } + rectangle { + object { + x=240 + y=52 + width=265 + height=30 + } + "basic attribute" { + clr=14 + fill="outline" + width=6 + } + } + rectangle { + object { + x=242 + y=54 + width=261 + height=26 + } + "basic attribute" { + clr=35 + fill="outline" + width=2 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):LOAD" + } + } + } +} +oval { + object { + x=403 + y=269 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):MEMUSED" + } +} +text { + object { + x=7 + y=247 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Memory Av" +} +"text update" { + object { + x=272 + y=247 + width=100 + height=15 + } + monitor { + chan="$(PC):MEMAV" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=377 + y=247 + width=20 + height=15 + } + monitor { + chan="$(PC):MEMAV.EGU" + clr=14 + bclr=2 + } + limits { + } +} +oval { + object { + x=401 + y=247 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=249 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):MEMAV" + } +} +text { + object { + x=7 + y=112 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU Nice" +} +text { + object { + x=7 + y=132 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU System" +} +text { + object { + x=7 + y=152 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU User" +} +text { + object { + x=7 + y=172 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Load Avg 1 min" +} +text { + object { + x=7 + y=192 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Load Avg 5 min" +} +text { + object { + x=7 + y=212 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="Load Avg 15 min" +} +"text update" { + object { + x=272 + y=112 + width=100 + height=15 + } + monitor { + chan="$(PC):CPUNICE" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=132 + width=100 + height=15 + } + monitor { + chan="$(PC):CPUSYSTEM" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=152 + width=100 + height=15 + } + monitor { + chan="$(PC):CPUUSER" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=172 + width=100 + height=15 + } + monitor { + chan="$(PC):LOAD1MIN" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=192 + width=100 + height=15 + } + monitor { + chan="$(PC):LOAD5MIN" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=272 + y=212 + width=100 + height=15 + } + monitor { + chan="$(PC):LOAD15MIN" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=377 + y=112 + width=20 + height=15 + } + monitor { + chan="$(PC):CPUNICE.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=132 + width=20 + height=15 + } + monitor { + chan="$(PC):CPUSYSTEM.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=152 + width=20 + height=15 + } + monitor { + chan="$(PC):CPUUSER.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=172 + width=20 + height=15 + } + monitor { + chan="$(PC):LOAD1MIN.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=192 + width=20 + height=15 + } + monitor { + chan="$(PC):LOAD5MIN.EGU" + clr=14 + bclr=2 + } + limits { + } +} +"text update" { + object { + x=377 + y=212 + width=20 + height=15 + } + monitor { + chan="$(PC):LOAD15MIN.EGU" + clr=14 + bclr=2 + } + limits { + } +} +oval { + object { + x=401 + y=172 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=174 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):LOAD1MIN" + } +} +oval { + object { + x=401 + y=192 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=194 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):LOAD5MIN" + } +} +oval { + object { + x=401 + y=212 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=214 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):LOAD15MIN" + } +} +oval { + object { + x=401 + y=112 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=401 + y=152 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=154 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):CPUUSER" + } +} +oval { + object { + x=401 + y=132 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=134 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):CPUSYSTEM" + } +} +oval { + object { + x=403 + y=114 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):CPUNICE" + } +} +text { + object { + x=7 + y=92 + width=260 + height=15 + } + "basic attribute" { + clr=14 + } + textix="CPU Idle" +} +"text update" { + object { + x=272 + y=92 + width=100 + height=15 + } + monitor { + chan="$(PC):CPUIDLE" + clr=29 + bclr=1 + } + align="horiz. right" + limits { + } +} +"text update" { + object { + x=377 + y=92 + width=20 + height=15 + } + monitor { + chan="$(PC):CPUIDLE.EGU" + clr=14 + bclr=2 + } + limits { + } +} +oval { + object { + x=401 + y=92 + width=18 + height=18 + } + "basic attribute" { + clr=12 + } +} +oval { + object { + x=403 + y=94 + width=14 + height=14 + } + "basic attribute" { + clr=36 + } + "dynamic attribute" { + clr="alarm" + chan="$(PC):CPUIDLE" + } +} +polyline { + object { + x=6 + y=237 + width=505 + height=0 + } + "basic attribute" { + clr=14 + } + points { + (6,237) + (511,237) + } +} diff --git a/software/pcmon/PC-MONITOR1.0.2-EPICS3.14.7.tar.gz b/software/pcmon/PC-MONITOR1.0.2-EPICS3.14.7.tar.gz new file mode 100644 index 0000000..acf1461 Binary files /dev/null and b/software/pcmon/PC-MONITOR1.0.2-EPICS3.14.7.tar.gz differ diff --git a/software/pcmon/pcMon.jpg b/software/pcmon/pcMon.jpg new file mode 100644 index 0000000..f89a0e2 Binary files /dev/null and b/software/pcmon/pcMon.jpg differ diff --git a/software/regDev.html b/software/regDev.html new file mode 100644 index 0000000..6c40a2b --- /dev/null +++ b/software/regDev.html @@ -0,0 +1,1559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 24.08.2021
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+ + + +RegDev EPICS Device Support + + + + + +

RegDev EPICS Device Support Documentation

+

Contents

+
    +
  1. Device Support +
      +
    1. Connection Status (bi)
    2. +
    3. Analog Input (ai)
    4. +
    5. Analog Output (ao)
    6. +
    7. Calculation Output (calcout)
    8. +
    9. Binary Input (bi)
    10. +
    11. Binary Outpu (bo)t
    12. +
    13. Multi Bit Binary Input (mbbi)
    14. +
    15. Multi Bit Binary Output (mbbo)
    16. +
    17. Multi Bit Binary Input Direct (mbbiDirect)
    18. +
    19. Multi Bit Binary Output Direct (mbboDirect)
    20. +
    21. Long Input (longin)
    22. +
    23. Long Output (longout)
    24. +
    25. Integer 64 bit Input (int64in)
    26. +
    27. Integer 64 bit Output (int64out)
    28. +
    29. String Input (stringin)
    30. +
    31. String Output (stringout)
    32. +
    33. Waveform Input (waveform)
    34. +
    35. Array Analog Input (aai)
    36. +
    37. Array Analog Output (aao)
    38. +
  2. +
  3. Driver Functions
  4. +
  5. Debugging
  6. +
+

Intro

+

+In this document, I assume that the reader is familiar with EPICS, the +record concept and meanings of the fields of the standard records. +Recommended reading: EPICS Record Reference Manual. +

+

+This generic device support is intended to connect arbitrary synchronous +register based devices to EPICS in a simple and flexible way. +It can be used for rapid prototyping before a proper driver is available, +to access registers that are unsupported by the proper driver or as the +ultimate driver for any device which is "simple enough". +

+

+It is assumed that the device allocates a continuous block of registers. +The registers should be independent, that means one device action is +performed by reading or writing only one register. +Because each record connects to one register, it is not possible to lock +the device for several register accesses with this device support, +except if that task is performed in the low level driver and hidden from +regDev. +The user has to know the register offsets and data types when configuring +the records. +

+

+The actual hardware access is neither defined nor implemented in this +device support. +Instead, regDev defines an interface for low level drivers that +implement the hardware access. +Examples are mmap (a driver for memory mapped registers, VME or +mmap()) or s7plc (a driver for network communication to a Siemens +S7 PLC). +What is defined in regDev is the interface to the standard +records. +Thus it is not necessary to deal with record when writing a new low-level +driver. +Consequently, all regDev compatible devices look the same +on the record level. +The general idea is to have a simple and flexible device support interface +which is independent of the underlying hardware structure. +

+

+To be usable with regDev, a driver must implement some API +functions and register a device to regDev by name. +Each piece of regDev hardware must have a name that is unique on +the IOC. +Typically, the low level driver registers a device in a configuration +function called from the startup script. +

+

+In principle, a piece of hardware can have many blocks of registers +(e.g. on differenct VME address spaces). +The low level driver may handle this by mapping ranges of register offsets +to different blocks. +Or the low level driver registers each block with an individual name. +But then, regDev will handle them as different independent +devices. +

+

+A demo driver is included. +

+

+Dirk +Zimoch <dirk.zimoch@psi.ch>, 2009. +

+ + + +

Device Support

+

+RegDev supports the standard record types +ai, +ao, +bi, +bo, +mbbi, +mbbo, +mbbiDirect, +mbboDirect, +longin, +longout, +stringin, +stringout, +and waveform. +From EPICS R3.14.5 on calcout is supported. +From EPICS R3.14.12 on aai and aao +records are supported. +(These records used to be commented out in earlier EPICS versions.) +From EPICS R3.16 on int64in and +int64out are supported. +

+

+The DTYP is "regDev" for all record types, +independent of the low level driver. +

+

+If a record processes when the device is not connected (off, down, +unreachable), the record raises an alarm with SEVR="INVALID" +and STAT="READ" or "WRITE" +

+

+There is also a connection status support for bi. The +DTYP is "regDev stat". This record does not +raise an alarm when the device is disconnected. It just changes to +0 when the device disconencts and to 1 when it connects. +

+

+It is possible to use SCAN="I/O Intr" if the low level driver +supports it. +Input records in "I/O Intr" process whenever new data has +been received from the device. +If supported by the driver, output records are processed in +"I/O Intr" mode whenever the driver is ready to accept new +output. +This may be useful for drivers with externally triggered or periodic +output cycles. +

+

+The general form of the INP or OUT link is:
+ + "@devicename:offset:initoffset T=type + L=low H=high B=bit I=invertmask + P=packing U=update_ms" + +

+
    +
  • +devicename is the name that a low level driver has +used to register the device. +
  • +
  • +offset is the address of the register relative to the +beginning of the register block for this device. +It depends on the low level driver if offset is measured in bytes +or anything else. +The offset must be a positive integer expression within the limits of +the device register block size. +It may be calculated using the operators +-*().
    +It is possible to calculate offset dynamically from +another record. In this case the name of the other record must be the the +first operand in the calculation. If the record name contains any of the +characters :+-*(), it must be single quoted.
    +Example: 'otherrecord'*8+0x100;
    +If dynamic offsets exceed the limits of the register block, the record +will rais an INVALID alarm. +
  • +
  • +initoffset is optionally used by output records to +initialize from a hardware register. +If initoffset is not specified but the second +: is there, the record initializes from the normal +offset address. +If :initoffset is skipped (including the +:), +the record is not initialized by regDev and may be initialized +for example by auto save and restore. +Records read from initoffset during the +init_record phase in unpredictable order. +
  • +
  • +T=type defines the data type of the register. +See table below. +The default is T=int16 for most record types. +
  • +
  • +L=low and H=high are used for +linear conversion in ai and ao records +if LINR=LINEAR and in waveform, +aai and aao if FTVL=FLOAT +or DOUBLE and T is an integer type. +They define the raw values which correspond to EGUL and +EGUF (or LOPR and HOPR for arrays) +respectively. +Output records will never write intger values lower than +L or higher than H. +Instead the output value saturates at the nearest limit. +The default values for +L and H depend on the data type. +
  • +
  • +B=bit is only used for bi and +bo records to define the bit number within the data +byte, word, or doubleword (depending on T). +Bit number 0 is the least significant bit. +Note that in big endian byte order (also known as motorola format) bit 0 +is in the last byte, while in little endian byte order (intel format) +bit 0 is in the first byte. +If in doubt and allowed by the hardware, use T=byte to avoid +all byte order problems when handling single bits. +
  • +
  • +I=invertmask is used to flip bits of integer values +before writing them to or after reading them from a register. +This allows to invert the logic of bits. +The default value is 0 (i.e. do not flip bits). +
  • +
  • +P=packing is used for accessing arrays through +FIFO registers. +It defines how many array elements are packed in one register access. +For example T=int16 P=1 defines a FIFO of 16 bit values +while T=int16 P=2 is a FIFO with 32 bits width that +contains two 16 bit values in each access. +
  • +
  • +U=update_ms is used to update output records +periodically. Every update_ms milliseconds the output +record reads back the value from the register at initoffset +or offset if initoffset is not specified. +
  • +
+

+Not all parameters T, L, H, +B, I, and P are always +required. +Unused parameters or parameters equal to the default value may be omitted. +The default values depend on the data type. +All parameters are case insensitive. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TRegister Data TypeDefault LDefault H
int8 + 8 bit (1 byte) signed integer number-0x7f
-127
0x7f
127
uint8
unsign8
unsigned8
byte
char
+
8 bit (1 byte) unsigned integer number0x00
0
0xff
255
int16
short
16 bit (2 bytes) signed integer number-0x7fff
-32767
0x7fff
32767
uint16
unsign16
unsigned16
word
16 bit (2 bytes) unsigned integer number0x0000
0
0xffff
65535
int32
long
32 bit (4 bytes) signed integer number-0x7fffffff
-2147483647
0x7fffffff
2147483647
uint32
unsign32
unsigned32
dword
32 bit (4 bytes) unsigned integer number0x00000000
0
0xffffffff
4294967295
int64
longlong
64 bit (8 bytes) signed integer number-0x7fffffffffffffff
-9223372036854775807
0x7fffffffffffffff
9223372036854775807
uint64
unsign64
unsigned64
dword
64 bit (8 bytes) unsigned integer number0x0000000000000000
0
0xffffffffffffffff
18446744073709551615
bcd8
bcd
+
8 bit (1 byte, 2 digits) unsigned binary coded decimal0099
bcd16 + 16 bit (2 bytes, 4 digits) unsigned binary coded decimal00009999
bcd32 + 32 bit (4 bytes, 8 digits) unsigned binary coded decimal0000000099999999
bcd64 + 64 bit (8 bytes, 16 digits) unsigned binary coded decimal00000000000000009999999999999999
real32
float32
float
single
32 bit (4 bytes) floating point numbern/an/a
real64
float64
double
64 bit (8 bytes) floating point numbern/an/a
stringcharacter array40n/a
+
+ +

+If T=string, L means length, +not low. +The length includes the terminating null byte. +The default value is the length of the VAL field. +In the case of the stringin and stringout records, this is 40. +In case of array records (aai, aao, +waveform) with CHAR +data this is the size of the array (usually NELM). +

+

+Note that for signed integer types, L is one off the smallest +possible value. This makes linear conversion symmatric on the positive +and negative side (i.e. makes sure 0 is in the middle). +As a side effect, the most negative value will never be written to the +register but will be saturated to L. +If that is a problem, set L explicitly (and maybe adjust +LOPR). +

+ +

Example Records

+

+In the following examples it is assumed that the low level driver supports +"I/O Intr" for input registers. +If that is not the case or not applicable for all registers use any other +scanning method instead. +All output records in the examples use PINI=YES to make sure +an initial value is written to the register. Depending on the low level driver, +this may not be necessary if the record gets initialized from an +initoffset. +

+ + +

Connection Status (bi)

+
+ record (bi, "$(RECORDNAME)") {
+  field (DTYP, "regDev stat")
+  field (INP,  "@$(DEVICE)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+The record value is 1 if a connection to the device is established and 0 +if not. +Disconnect does not raise an alarm. +

+ + +

Analog Input (ai)

+

Integer registers with linear conversion

+
+ record (ai, "$(RECORDNAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (SCAN, "I/O Intr")
+  field (LINR, "LINEAR")
+  field (EGUL, "$(MINVAL)")
+  field (EGUF, "$(MAXVAL)")
+ }
+
+

+If T is an integer type, the register is read into +RVAL. +If LINR=LINEAR, then the record +converts RVAL to VAL so that L +maps to MINVAL and H maps to MAXVAL. +

+

+Default type is T=int16. +Defaults for L and H depend +on T (see table above). +

+

Floating point registers

+

+

+
+ record (ai, "$(RECORDNAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+If T=float or T=double, +the register is read directly into VAL and L, +H, EGUL and EGUF are ignored. +The device support emulates adjustment scaling and smoothing according to +ASLO, AOFF and SMOO which is done +by the record itself only when using conversion from integer registers. +

+

+VAL = (register*ASLO+AOFF)*(1-SMOO) + +VALold*SMOO +

+

+T=string is not valid for ai records. +

+ + +

Analog Output (ao)

+

Integer registers with linear conversion

+
+ record (ao, "$(RECORDNAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (LINR, "LINEAR")
+  field (PINI, "YES")
+  field (EGUL, "$(MINVAL)")
+  field (EGUF, "$(MAXVAL)")
+ }
+
+

+If T is an integer type, RVAL is written to the +register. +If LINR=LINEAR, then the record +support first scales the record value (to be exact OVAL) so +that MINVAL maps to L and MAXVAL +maps to H. +The record may then use adjustment scaling to modify RVAL. +However, the device support will never write any value lower than +L or higher than H. +If necessary the value will be saturated to the nearest limit. +

+

+Default type is T=int16. +Defaults for L and H depend +on T (see table above). +

+

Floating point registers

+
+ record (ao, "$(RECORDNAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+ }
+
+

+If T=float or T=double, +OVAL is written to the register. L, +H, EGUL and EGUF are ignored. +The device support emulates adjustment scaling according to +AOFF and ASLO which is done by the +record itself only when converting to integer registers. +

+

+register=(OVAL-AOFF)/ASLO +

+

+T=string is not valid for ao records. +

+ + +

Calculation Output (calcout)

+
+ record(calcout, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=int16. +Defaults for L and H depend +on T (see table above). +

+

+OVAL (the result of CALC or OCAL, +depending on DOPT) is written to the register. If +T is an integer type, the value is truncated to an +integer and compared to L and H. +If OVAL is lower than L or higher than +H, it is saturated to the nearest limit. +

+

+If T=float or T=double, +OVAL is written to the register directly without any +conversion. +

+

+T=string is not valid for calcout records. +

+

+To use this device support with calcout records, you need at least EPICS R3.14.5. +

+ + +

Binary Input (bi)

+
+ record(bi, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T) B=$(B) I=$(I)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=int16. +Default bit is B=0. +Default invert mask is I=0. +

+

+Depending on T, B can vary from 0 to 7, 15, +or 31. +Bit 0 is the least significant bit. In little endian byte order, bit 0 is +in the first byte, in big endian byte order it is in the last byte of the +register. +If in doubt and allowed by the hardware, use T=byte to avoid +all byte order problems when handling single bits. +

+

+The register is read to RVAL and masked with +2B. +If I!=0 the bit is inverted. +The record sets VAL to 1 if RVAL is not 0. +

+

+RVAL=(I==0?register:~register)&(1<<B); +VAL=(RVAL!=0)?1:0 +

+

+T=string, T=float or T=double are +not valid for bo records. Signed and unsigned types are equivalent. +

+ + +

Binary Output (bo)

+
+ record(bo, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T) B=$(B)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=int16. Default bit is B=0. +

+

+Depending on T, B can vary from 0 to 7, 15, or +31. +Bit 0 is the least significant bit. +In little endian byte order, bit 0 is in the first byte, in big endian byte +order it is in the last byte of the register. +If in doubt and allowed by the hardware, use T=byte to avoid +all byte order problems when handling single bits. +

+

+If VAL is not 0, then RVAL is set to +2B, else RVAL is set to 0. +Only the referenced bit of the register is modified while all other bits +remain unchanged. +Thus, other output records can write to different bits of the same +register. +

+RVAL=(VAL!=0)?(1<<B):0; +register=(registerold&~(1<<B)) | +RVAL +

+

+T=string, T=float or T=double are +not valid for bo records. Signed and unsigned types are equivalent. +

+ + +

Multi Bit Binary Input (mbbi)

+
+ record(mbbi, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(RIGHT_SHIFT)")
+ }
+
+

+Default type is T=int16. +

+

+The register is read to RVAL, shifted right by +SHFT bits and masked with NOBT bits. +Valid values for NOBT and SHFT depend on +T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. +In little endian byte order, bit 0 is in the first byte, in big endian +byte order it is in the last byte of the register. +

+

+Example: Use bits 4 to 9 out of 16. +T=int16, NOBT=6, SHFT=4 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
register1514131211109876543210
RVAL          987654
+

+T=string, T=float or T=double are +not valid for mbbi records. Signed and unsigned types are equivalent. +

+ + +

Multi Bit Binary Output (mbbo)

+
+ record(mbbo, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(LEFT_SHIFT)")
+ }
+
+

+Default type is T=int16. +

+

+RVAL is masked with NOBT bits, shifted left by +SHFT bits and written to the register. Valid values for +NOBT and SHFT depend on T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. +In little endian byte order, bit 0 is in the first byte, in big endian +byte order it is in the last byte of the register. +

+

+Only the referenced NOBT bits of the register are modified. +All other bits remain unchanged. +Thus, other output records can write to different bits of the same +register. +

+

+Example: Use bits 5 to 8 out of 16. +T=int16, NOBT=4, SHFT=5 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RVAL            8765
register1514131211109876543210
+

+T=string, T=float or T=double are +not valid for mbbo records. Signed and unsigned types are equivalent. +

+ + +

Multi Bit Binary Input Direct (mbbiDirect)

+
+ record(mbbiDirect, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(RIGHT_SHIFT)")
+ }
+
+

+Default type is T=int16. +

+

+The register is read to VAL, shifted right by +SHFT bits and masked with NOBT bits (see +mbbi). +Valid values for NOBT and SHFT depend on +T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. +In little endian byte order, bit 0 is in the first byte, in big endian +byte order it is in the last byte of the register. +

+

+T=string, T=float or T=double are +not valid for mbbiDirect records. Signed and unsigned types are equivalent. +

+ + +

Multi Bit Binary Output Direct (mbboDirect)

+
+ record(mbboDirect, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(LEFT_SHIFT)")
+ }
+
+

+Default type is T=int16. +

+

+VAL is masked with NOBT bits, shifted left by +SHFT bits and written to the register (see +mbbo). +Valid values for NOBT and SHFT depend on +T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. +In little endian byte order, bit 0 is in the first byte, in big endian +byte order it is in the last byte of the register. +

+

+Only the referenced NOBT bits of the register are modified. +All other bits remain unchanged. Thus, other output records can write to +different bits of the same register. +

+

+T=string, T=float or T=double are +not valid for mbboDirect records. Signed and unsigned types are equivalent. +

+ + +

Long Input (longin)

+
+ record(longin, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=int16. +

+

+The register is read to VAL. If the type has less than 32 +bits, the value is zero extended or sign extended depending on the +signedness of the type. +

+

+T=string, T=float or T=double are +not valid for longin records. +

+ + +

Long Output (longout)

+
+ record(longout, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=int16. +

+

+Depending on T, the least significant 8, 16, or 32 bits +of VAL are written to the register. +

+

+T=string, T=float or T=double are +not valid for longout records. +

+ + +

Integer 64 Input (int64in)

+
+ record(int64in, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=int64. +

+

+The register is read to VAL. If the type has less than 64 +bits, the value is zero extended or sign extended depending on the +signedness of the type. +

+

+T=string, T=float or T=double are +not valid for int64in records. +

+

+To use int64in records, you need at least EPICS R3.16. +

+ + +

Integer 64 Output (int64out)

+
+ record(int64out, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=int64. +

+

+Depending on T, the least significant 8, 16, 32, or 64 bits +of VAL are written to the register. +

+

+T=string, T=float or T=double are +not valid for int64out records. +

+

+To use int64out records, you need at least EPICS R3.16. +

+ + +

String Input (stringin)

+
+ record(stringin, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET) L=$(LENGTH)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default and only valid type is T=string. +Default length is L=40. +

+

+L bytes are read from the register to VAL and +null terminated. Thus, the effective string length is maximal +L-1 bytes. +

+ + +

String Output (stringout)

+
+ record(stringout, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET) L=$(LENGTH)")
+  field (PINI, "YES")
+ }
+
+

+Default and only valid type is T=string. +Default length is L=40. +

+

+L bytes are written from VAL to the register. +If the actual string length of VAL is shorter than +L, the remaining space is filled with null bytes. If +it is longer than L, the string is truncated and not +null terminated. +

+ + +

Waveform Input (waveform)

+
+ record(waveform, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET)")
+  field (SCAN, "I/O Intr")
+  field (NELM, "$(NUMBER_OF_ELEMENTS)")
+  field (FTVL, "$(DATATYPE)")
+ }
+
+

+NELM elements are read from registers to VAL. +

+

+The default type T depends on FTVL. +For example FTVL=LONG results in T=INT32. +

+

+If T is an integer type, e.g. T=INT32 but +FTVL is either FLOAT or DOUBLE, +then values are scaled so that L=low and +H=high map to the fields LOPR and +HOPR respectively. +

+

+If T=string then FTVL must be CHAR or +UCHAR or STRING. +For CHAR and UCHAR, +L=length can be specified but +defaults to NELM and should not exceed it. +If L is less than NELM, the +remaining elements are left unchanged. +For STRING, NELM strings, each of length L +(default 40), are read. +

+ + +

Array Analog Input (aai)

+
+ record(aai, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (INP,  "@$(DEVICE):$(OFFSET)")
+  field (SCAN, "I/O Intr")
+  field (NELM, "$(NUMBER_OF_ELEMENTS)")
+  field (FTVL, "$(DATATYPE)")
+ }
+
+

+NELM elements are read from registers to VAL. +

+

+The default type T depends on FTVL. +For example FTVL=LONG results in T=INT32. +

+

+If T is an integer type, e.g. T=INT32 but +FTVL is either FLOAT or DOUBLE, +then values are scaled so that L=low and +H=high map to the fields LOPR and +HOPR respectively. +

+

+If T=string then FTVL must be CHAR or +UCHAR or STRING. +For CHAR and UCHAR, +L=length can be specified but +defaults to NELM and should not exceed it. +If L is less than NELM, the +remaining elements are left unchanged. +For STRING, NELM strings, each of length L +(default 40), are read. +

+

+The aai record is similar to the waveform record, but may be more +efficient, because the low level driver may use DMA to fill the record. +Aai records must be enabled in EPICS base, which is not the case by +default before EPICS version 3.14.12. +

+ + +

Array Analog Output (aao)

+
+ record(aai, "$(NAME)") {
+  field (DTYP, "regDev")
+  field (OUT,  "@$(DEVICE):$(OFFSET)")
+  field (NELM, "$(NUMBER_OF_ELEMENTS)")
+  field (FTVL, "$(DATATYPE)")
+  field (PINI, "YES")
+ }
+
+

+NELM elements of VAL are written to +registers. +

+

+The default type T depends on FTVL. +For example FTVL=LONG results in T=INT32. +

+

+If T is an integer type, e.g. T=INT32 but +FTVL is either FLOAT or DOUBLE, +then values are scaled so that fields LOPR and +HOPR map to L=low and +H=high respectively. +However, the device support will never write any value lower than +L or higher than H. +If necessary the value will be saturated to the nearest limit. +

+

+If T=string then FTVL must be CHAR or +UCHAR or STRING. +For CHAR and UCHAR, +L=length can be specified but +defaults to NELM and should not exceed it. +If L is less than NELM, the +remaining elements are ignored. +For STRING, NELM strings, each of length L +(default 40), are written. +

+

+The aai record is similar to the waveform record, but may be more +efficient, because the low level driver may use DMA to fill the record. +Aai records must be enabled in EPICS base, which is not the case by +default before EPICS version 3.14.12. +

+ + +

Driver Functions

+

Registration

+

+A driver must implement the API functions it wants to support and +fill the function pointers into a regDevSupport structure. +It contains the functions report, getInScanPvt, +getOutScanPvt, read, and write. +Write NULL for any API function that is not implemented by +the driver. +The support structure can be global and static like this: +

+

+

+static regDevSupport support = {
+    report,
+    getInScanPvt,
+    getOutScanPvt,
+    read,
+    write
+};
+
+

+

+Each configured device must be registered with the following function: +

+

+ +int regDevRegisterDevice (const char* devicename, + const regDevSupport* support, + regDevice* device); + +

+

+The devicename must be unique on the IOC and is used in the +record links to reference the device. +The support parameter is a pointer to the +regDevSupport structure of this driver. +The last parameter driver is a pointer to a driver private +regDevice structure. +It will be passed as a device handle to any API function. +The driver can freely define struct regDevice and put +in any information it needs to operate one device. +

+

API functions

+

+The driver can assume that all API functions are called in a thread save +context. +That means it will never happen that two API functions are called for the +same device at the same time. +However, API functions for different devices may be called at the same +time. +

+

+ +void report (regDevice* device, + int level); + +

+

+ +IOSCANPVT getInScanPvt (regDevice* device, + size_t offset, + unsigned int vec, + const char *user); + +

+

+ +IOSCANPVT getOutScanPvt (regDevice* device, + size_t offset, + unsigned int vec, + const char *user); + +

+

+ +int read (regDevice* device, + size_t offset, + unsigned int datalength, + size_t nelem, + void* pdata, + int priority, + regDevTransferComplete callback, + const char *user); + +

+

+ +int  write (regDevice* device, + size_t offset, + unsigned int datalength, + size_t nelem, + void* pdata, + void* pmask, + int priority, + regDevTransferComplete callback, + const char *user); + +

+ +
    +
  • +offset is the address offset of the register +relative to the beginning to the register block. +
  • +
  • +datalength is the length of the register in bytes +(one element in case of arrays). +
  • +
  • +nelem is the number of elements in an array. +It is 1 for scalar values but may be larger for arrays or strings. +It may also be 0. In that case the driver shall just report the connection +state by returning SUCCESS or an error code. +
  • +
  • +pdata is a pointer to a buffer of +nelem*dlen bytes. +registers values are copied to or from this buffer. +If nelem==0, pdata may be +NULL. +
  • +
  • +mask is a pointer to a bit mask of +datalength bytes or NULL. +Only those bits shall be modified where the mask contains 1 bits. +All other bits shall remain unchanged. +
  • +
  • +priority is a number 0...2 and may be used +as a hint for the driver to shedule requests. +
  • +
  • +callback is a function to be called upon request +completion if the driver decides to handle the request asynchronously +and returns ASYNC_COMPLETION. The driver may ignore it +completely and handle all requests synchronously. The function may be +NULL. In that case the driver must handle the request +synchroously and not return ASYNC_COMPLETION. +in wh +
  • +
  • +user is a string which can be used for messages. +It is the record name (actually a pointer to the record itself). If +the driver decides to use the callback, this pointer must be +passed to the callback function. +
  • +
+

+Strings are handled as arrays of characters: +datalength=1 and nelem is the +buffer size including space for the terminating null byte. +

+ +

1 Debugging

+

+The variable regDevDebug can be set in the startup script or +at any time on the command line to change the amount or debug output. +The following levels are supported: +

+

+-1:  fatal errors only
+ 0:  errors only
+ 1:  startup messages
+ 2:+ output record processing
+ 3:+ input record processing
+ 4:+ driver calls
+ 5:+ io printout
+

+

+Be careful using level>1 because many messages can introduce +considerable delays which may result in connection losses. +Default level is 0. +

+

+On vxWorks, regDevDebug can be set with +regDevDebug=level +

+

+In the iocsh use +var regDevDebug level +

+ +
+Dirk Zimoch, 2009 + + +
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 24.08.2021   +Source: /afs/psi.ch/project/epics/webhosting/software/regDev/index.php   + +
+ diff --git a/software/s7plc.html b/software/s7plc.html new file mode 100644 index 0000000..7e3fa50 --- /dev/null +++ b/software/s7plc.html @@ -0,0 +1,304 @@ + + + + + + +PLC communication + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 01.02.2012
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

PLC communication

+

+This driver is intended to connect Siemens S7 PLCs (programmable +logic controllers) via TCP/IP to an EPICS IOC, using the so called +"send/receive" protocol. However, it can be used for +any device sending and receiving blocks of process variables (PVs) in the +same way. I highly recommend to connect the PLCs to the PC on a +separate physical network using a second network interface +to avoid connection problems. +

+

+The driver has originally been developped for +SLS +(Swiss Light Source) in 2000. +Later is has been modified by +DESY +(Deutsches Elektronen Synchrotron). The +current version has been completely rewritten for +PPT +(Puls-Plasmatechnik GmbH) +to run on a R3.14.6 (or higher) PC based system, but it can also run on +R3.13 vxWorks systems. +

+

+Read the full +driver documentation +and Yu-Han Lin's +PLC configuration document (PDF). +Maybe this example Step7 project +also helps you to find a starting point for the PLC setup. +But don't ask me any questions about it. I don't know anything about Step7. +

+

+Download the driver package s7plc.tgz (30906 bytes). +

+

+Author: Dirk Zimoch +

+
+

+To make your own EPICS R3.14 drivers R3.13 compatible, you might want to use the +compatibility header file that I used in this driver. +It translates many of the new EPICS R3.14 funtions back to R3.13 and vxWorks. +(It is included in s7plc.tgz.) +

+
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 01.02.2012   +Source: /afs/psi.ch/project/epics/webhosting/software/s7plc/index.php   + +
+ diff --git a/software/s7plc/TCP_IP_TEST.zip b/software/s7plc/TCP_IP_TEST.zip new file mode 100644 index 0000000..995ce07 Binary files /dev/null and b/software/s7plc/TCP_IP_TEST.zip differ diff --git a/software/s7plc/YHLhtcPLCa.pdf b/software/s7plc/YHLhtcPLCa.pdf new file mode 100644 index 0000000..7316ba0 Binary files /dev/null and b/software/s7plc/YHLhtcPLCa.pdf differ diff --git a/software/s7plc/compat3_13.h b/software/s7plc/compat3_13.h new file mode 100644 index 0000000..d4ec00f --- /dev/null +++ b/software/s7plc/compat3_13.h @@ -0,0 +1,156 @@ +/* EPICS R3.13 compatibility header +* +* Including this header allows (some) EPICS R3.14 code to be compiled +* with EPICS R3.13 for a vxWorks system using a GNU compiler. +* +* It replaces R3.14 headers +* epicsTypes.h +* epicsAssert.h +* epicsString.h +* epicsExport.h +* epicsThread.h +* epicsTimer.h +* epicsMutex.h +* epicsEvent.h +* cantProceed.h +* +* Usage: +* #include +* #if ((EPICS_VERSION==3 && EPICS_REVISION>=14) || EPICS_VERSION>3) +* #include +* #include +* ... +* #else +* #include "compat3_13.h" +* #endif +* +* It is not complete and only simulates the C interfaces (not C++). +* It uses some gcc extensions and might not work with other compilers. +* It requires vxWorks. +* It might be buggy or produce slightly different behaviour than the +* original R3.14 functions. +* +* Since all functions are simulated as macros, you might not be able to +* take the address of a function. Be careful with arguments as they +* might be evaluated multiple times. +* This won't work: fptr = &epicsTimerStartDelay; +* Don't do this (changing arg): epicsTimerStartDelay(*ptimer++, delay); +* +* You can take the address of +* epicsMutexUnlock +* epicsMutexDestroy +* epicsEventSignal +* epicsEventDestroy +* +* You have been warned. +* Dirk Zimoch, March 2005 +*/ + +#ifndef compat3_13_h +#define compat3_13_h + +#include +#include +#include + +/* epicsAssert */ +#include + +/* epicsString */ +#define epicsStrDup(s) strcpy(malloc(strlen(s)+1),(s)) + +/* epicsExport */ +#define epicsExportAddress(a,b) extern void avoid_compiler_warning + +/* epicsThread */ +#include +#define epicsThreadId void* +#define EPICSTHREADFUNC FUNCPTR +#define epicsThreadPriorityLow 10 +#define epicsThreadPriorityMedium 50 +#define epicsThreadPriorityHigh 90 +#define epicsThreadStackBig 20000 /* io thread stack size */ + +#define epicsThreadCreate(name, pri, stack, func, args) \ + (void*)taskSpawn((name), 255-(pri)*255/99, VX_FP_TASK, (stack), (FUNCPTR)(func), (int)(args), \ + 0,0,0,0,0,0,0,0,0) + +#define epicsThreadSleep(sec) taskDelay((sec)*sysClkRateGet()) +#define epicsThreadIsSuspended(t) (taskIdVerify((int)(t)) || taskIsSuspended((int)(t))) +#define epicsThreadGetStackSize(stack) (stack) + +/* epicsTimer */ +#include +#define epicsTimerQueueId char* +#define epicsTimerQueueAllocate(a,b) NULL +typedef void (*epicsTimerCallback) (void* pPrivate); +typedef struct epicsTimerForC {WDOG_ID wd; FUNCPTR cb; int p;} *epicsTimerId; + +#define epicsTimerQueueCreateTimer(q, callback, param) __extension__ \ +({ \ + epicsTimerId ti = calloc(1,sizeof(struct epicsTimerForC)); \ + ti->wd = wdCreate(); \ + ti->cb = (FUNCPTR)(callback); \ + ti->p = (int)(param); \ + ti; \ +}) + +#define epicsTimerStartDelay(ti,delay) \ + (void) wdStart((ti)->wd, (delay)*sysClkRateGet(), (ti)->cb, (ti)->p) + +/* cantProceed */ +#define callocMustSucceed(n,s,m) __extension__ \ +({ \ + void *mem = calloc((n),(s)); \ + if (!mem) { printErr("FATAL: callocMustSucceed failed in %s line %d %s: \n", \ + __FILE__, __LINE__, (m), strerror(errno)); taskSuspend(0); } \ + mem; \ +}) + +/* epicsMutex */ +#include +#define epicsMutexId SEM_ID + +#define epicsMutexMustCreate() __extension__ \ +({ \ + SEM_ID m = semMCreate(SEM_Q_FIFO); \ + if (!m) { printErr("FATAL: epicsMutexMustCreate failed in %s line %d: %s\n", \ + __FILE__, __LINE__, strerror(errno)); taskSuspend(0); } \ + m; \ +}) + +#define epicsMutexMustLock(m) \ + (semTake(m, WAIT_FOREVER) && \ + (printErr("FATAL: epicsMutexMustLock failed in %s line %d: %s\n", \ + __FILE__, __LINE__, strerror(errno)), \ + taskSuspend(0), ERROR)) + +#define epicsMutexUnlock semGive +#define epicsMutexDestroy semDelete + +/* epicsEvent */ +#define epicsEventId SEM_ID +#define epicsEventEmpty SEM_EMPTY +#define epicsEventFull SEM_FULL + +#define epicsEventMustCreate(state) __extension__ \ +({ \ + SEM_ID e = semBCreate(SEM_Q_FIFO, state); \ + if (!e) { printErr("FATAL: epicsEventMustCreate failed in %s line %d: %s\n", \ + __FILE__, __LINE__, strerror(errno)); taskSuspend(0); } \ + e; \ +}) + +#define epicsEventMustWait(e) \ + (semTake(e, WAIT_FOREVER) && \ + (printErr("FATAL: epicsEventMustWait failed in %s line %d: %s\n", \ + __FILE__, __LINE__, strerror(errno)), \ + taskSuspend(0), ERROR)) + +#define epicsEventSignal semGive +#define epicsEventWaitWithTimeout(e,t) semTake((e),(t)*sysClkRateGet()) +#define epicsEventWait(e) semTake((e),WAIT_FOREVER) +#define epicsEventTryWait(e) semTake((e),NO_WAIT) +#define epicsEventDestroy semDelete + +#endif diff --git a/software/s7plc/s7plc.tgz b/software/s7plc/s7plc.tgz new file mode 100644 index 0000000..7a9081b Binary files /dev/null and b/software/s7plc/s7plc.tgz differ diff --git a/software/sequencer.html b/software/sequencer.html new file mode 100644 index 0000000..be489b0 --- /dev/null +++ b/software/sequencer.html @@ -0,0 +1,264 @@ + + + + + + +EPICS sequencer (snc/seq) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Michael Laznovsky
+Phone: +41 56 310 5301
+Updated: 14.05.2013
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

EPICS sequencer (snc/seq)

+ +

The EPICS sequencer now lives here: +http://www-csr.bessy.de/control/SoftDist/sequencer

+
+
+Author: Michael Laznovsky   Phone: +41 56 310 5301   Email: Michael.Laznovsky@psi.ch   Updated: 14.05.2013   +Source: /afs/psi.ch/project/epics/webhosting/software/sequencer/index.php   + +
+ diff --git a/software/streamdevice.html b/software/streamdevice.html new file mode 100644 index 0000000..94f52c7 --- /dev/null +++ b/software/streamdevice.html @@ -0,0 +1,339 @@ + + + + + + +StreamDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 17.10.2019
+
+
Printer friendly version +
 
+

StreamDevice

+ + +

What is StreamDevice?

+ +

+StreamDevice is a generic +EPICS +device support for devices with a "byte stream" based +communication interface. +That means devices that can be controlled by sending and +receiving strings (in the broadest sense, including non-printable +characters and even null-bytes). +Examples for this type of communication interface are +serial line (RS-232, RS-485, ...), +IEEE-488 (also known as GPIB or HP-IB), and TCP/IP. +StreamDevice comes with an interface to +asynDriver, which implements the low-level +support for those communication interfaces. +But it can be extended to support other bus drivers. +

+

+StreamDevice supports all +standard records +of EPICS base which can have device support. +It is also possible to write support for new record types. +

+

+The driver has originally been developped at +DELTA in 1999. +Version 2 has been completely rewritten for EPICS R3.14. +But with some tweaks, +it also runs on R3.13. +It supports many new features and its new API structure makes +it easier to add new formats, bus interfaces, etc. +

+

+StreamDevice has been tested on: +

+
    +
  • + EPICS R3.13.10, R3.14.8, R3.14.12, R7.0.3 +
  • +
  • + Linux (32/64 bit, Intel, ARM, PPC, RedHat/Fedora/CentOS, Ubuntu, Raspbian, ...) +
  • +
  • + solaris-sparc and solaris-sparc-gnu (SunOS 5.8) No longer supported. +
  • +
  • + cygwin-x86 (Windows XP, cygwin 1.5.20) No longer supported. +
  • +
  • + Windows (32/64 bit, XP, 7, 10) +
  • +
  • + vxWorks (32 bit PPC, vxWorks 5.3, 5.5, 6.2) +
  • +
  • + RTEMS (Unsupported, I don't have a test system.) +
  • +
  • + Mac OS (Unsupported, I don't have a test system.) +
  • +
+

+Thanks to all testers. +

+ +

+Read the full documentation. +

+ + +

Download

+

+The StreamDevice software is now in git. +Please use the github bug tracker to report any issues. +

+
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 17.10.2019   +Source: /afs/psi.ch/project/epics/webhosting/software/streamdevice/index.php   + +
+ diff --git a/software/tclioc.html b/software/tclioc.html new file mode 100644 index 0000000..0770b82 --- /dev/null +++ b/software/tclioc.html @@ -0,0 +1,593 @@ + + + + + + +Tcl-IOC + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 02.11.2005
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

Tcl-IOC

+

+Tcl-IOC provides a Tcl shell for an EPICS R3.14 IOC. +It is a replacement for iocsh that comes with EPICS base. +This adds the full capability of a scripting programming language +to EPICS iocCore. +Access to registered EPICS functions and variables is supported +similar to iocsh. +

+ +

Requirements

+

+Tcl +is required and +TclX +is recommended for its capability to switch from scripting mode to +interactive mode. +Alternatively, wish, the graphical extension to the Tcl +shell, can be used. +To build Tcl-IOC, the +sources or the +development rpm of Tcl (tcl-devel) is required +(i.e. the header file tcl.h is needed). +To run Tcl-IOC, a run time installation of +Tcl and +TclX is sufficient. +

+

+EPICS R3.14.7 is required +(higher versions might also work). +

+

+Download the tclioc.tgz package. +See below how to install it. +

+

+Tcl-IOC has been tested on the following systems: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Operating SystemEPICS ReleaseCompilerTcl Version
Redhat Linux 6.2R3.14.7gcc egcs-2.91.668.0
Redhat Linux 7.3R3.14.7gcc 2.968.3
Scientific Linux 3.0.5R3.14.7gcc 3.2.38.3
Fedora Core 3R3.14.7gcc 3.4.38.4
+ +

+It has not yet been tested on Windows systems. +If you make it run on other systems, feedback is welcome. +

+ + +

Features

+

+Tcl-IOC consistes of a shared library that can be linked with an IOC +application and loaded into any Tcl shell +(tclsh, tcl, wish, wishx, bltwish, ...) +with the +load command. +Loading the library automatically adds iocCore, including all EPICS +functions and variables to the Tcl shell. +

+ +

Functions

+

+For each registered EPICS function, a Tcl command with the same name +is created. +Thus, any EPICS function available in iocsh can be called from the +Tcl shell. +Since iocsh functions have void results, +the corresponding Tcl commands normally return an empty string. +Many EPICS functions write to stdout, but input and output +can be redirected: +

+
+
< filename
+
Stdin of the function is read from the file filename + which is opened for reading +
+
> filename
+
Stdout of the function is written to the file filename + which is opened for writing (and truncated). +
+
>> filename
+
Stdout of the function is written to the file filename + which is opened for appending. +
+
2> filename
+
Stderr of the function is written to the file filename + which is opened for writing (and truncated). +
+
2>> filename
+
Stderr of the function is written to the file filename + which is opened for appending. +
+
<@ fileId
+
Stdin of the function is read from fileId + which refers to a file, pipe, or socket that + must already be opened for reading. + (see open and + socket) +
+
>@ fileId
+
Stdout of the function is written to fileId + which refers to a file, pipe, or socket that + must already be opened for writing or appending. + (see open and + socket) +
+
2>@ fileId
+
Stderr of the function is written to fileId + which refers to a file, pipe, or socket that + must already be opened for writing or appending. + (see open and + socket) +
+
>$ varName
+
Stdout of the function is written to the variable varName. + Its previous contents are cleared. + If the variable does not yet exist, it is created. +
+
>>$ varName
+
Stdout of the function is appended to the variable varName. + If the variable does not yet exist, it is created. +
+
2>$ varName
+
Stderr of the function is written to the variable varName. + Its previous contents are cleared. + If the variable does not yet exist, it is created. +
+
2>>$ varName
+
Stderr of the function is appended to the variable varName. + If the variable does not yet exist, it is created. +
+
>$$
+
Stdout of the function is written to the return value. +
+
2>$$
+
Stderr of the function is written to the return value. +
+
+ +

+Note that most EPICS functions also write error messages to stdout +instead of stderr. +

+ +

Variables

+

+Each registered EPICS variable is mapped to a global Tcl variable with +the same name. +Reading and writing of those Tcl variables is redirected +to the corresponding EPICS variable. +EPICS variables cannot be +unset. +

+ +

Installing Tcl-IOC

+

+Tcl-IOC comes as a BaseApp-style EPICS R3.14 project. +It contains the following files: +

+ +
+tclioc
+|-- Makefile
+|-- myTclIocApp
+|   |-- Makefile
+|   |-- example.subs
+|   |-- example.template
+|   |-- exampleiocsh.tcl
+|   |-- myTclIocAppInclude.dbd
+|   `-- simpleiocsh.tcl
+`-- src
+    |-- Makefile
+    |-- README
+    |-- iocUtil.c
+    `-- iocsh.cpp
+
+ +

+Unpack the project it in a <TOP> location and run make. +This will create a loadable library and an example application. +For further information on EPICS projects and <TOP> directories, +please refer to the EPICS IOC Application Developer's Guide +(download PDF), +Chapter 4. + +

+ + +

Building a Tcl-IOC application

+ +

+A Tcl-IOC application is similar to any other EPICS IOC application. +The differences are in the Makefile and the startup script. +An example application can be found in the myTclIocApp subdirectory. +

+ +

Makefile changes

+
    +
  1. + Instead of a PROD executable, create a + LOADABLE_LIBRARY.
    + This means, change lines like
    + PROD = myApplication
    + to
    + LOADABLE_LIBRARY = myApplication
    + Replace PROD_SRCS, etc. by + LIBS_SRCS or myApplication_SRCS. +
  2. +
  3. + Instead of linking the application to $(EPICS_BASE_IOC_LIBS), + link it to tclioc.
    + That means replace
    + myApplication_LIBS += $(EPICS_BASE_IOC_LIBS)
    + with
    + myApplication_LIBS += tclioc +
  4. +
+ +

Example Makefile

+

+Differences to a standard application Makefile are marked blue. +

+
+TOP=../..
+include $(TOP)/configure/CONFIG
+
+LOADABLE_LIBRARY = myApplication
+
+DBD += myApplication.dbd
+myApplication_SRCS += myApplication_registerRecordDeviceDriver.cpp
+
+myApplication_LIBS += tclioc
+
+include $(TOP)/configure/RULES
+
+ +

Startup script changes

+
    +
  1. + Use /usr/bin/tcl (or wherever TclX is installed) + as the interpreter. That means the first line should be
    + #!/usr/bin/tcl +
  2. +
  3. + Load the application library into the Tcl interpreter and tell it + that it is a tclioc application. + Make sure that the library can be found + (e.g. set LD_LIBRARY_PATH accordingly):
    + load libmyApplication.so tclioc +
  4. +
  5. + While setting up the IOC as usual (using dbLoadDatabase, + myApplication_registerRecordDeviceDriver, + dbLoadTemplate or dbLoadRecords, + iocInit), it is possible to use Tcl language constructs. + This allows loops and conditionals, access to variables, etc. +
  6. +
  7. + At the end of the script, switch to interactive mode + (this is where TclX is required):
    + commandloop -prompt1 {puts -nonewline "epics> "} +
  8. +
+ +

Example startup script

+

+

+
+#!/usr/bin/tcl
+
+load libmyApplication.so tclioc
+dbLoadDatabase myApplication.dbd
+myApplication_registerRecordDeviceDriver
+
+#create records using TCL programming
+set scan "1 second"
+for {set n 1} {$n <= 100} {incr n} {
+    dbLoadRecords example.template "number=$n,scan=$scan"
+}
+
+#set an EPICS variable
+set asCaDebug 1
+
+#some EPICS commands with output redirection
+set logfile iocboot.log
+iocInit > $logfile
+dbnr 1 >> $logfile
+dbl >> $logfile
+
+# go interactive
+commandloop -prompt1 {puts -nonewline "epics> "}
+
+
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 02.11.2005   +Source: /afs/psi.ch/project/epics/webhosting/software/tclioc/index.php   + +
+ diff --git a/software/tclioc/tclioc.tgz b/software/tclioc/tclioc.tgz new file mode 100644 index 0000000..52579de Binary files /dev/null and b/software/tclioc/tclioc.tgz differ diff --git a/software/vme/VHQ.jpg b/software/vme/VHQ.jpg new file mode 100644 index 0000000..9b49973 Binary files /dev/null and b/software/vme/VHQ.jpg differ diff --git a/software/vme/VHQ.php.html b/software/vme/VHQ.php.html new file mode 100644 index 0000000..eefc2f2 --- /dev/null +++ b/software/vme/VHQ.php.html @@ -0,0 +1,358 @@ + + + + + VHQ Programmable High Voltage Power Supply + + + + + + + + + +VHQ Programmable High Voltage Power Supply + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dennis Armstrong
+Phone: +41 56 310 5109
+Updated: 12.6.2007
+
+
Printer friendly version +
 
+

VHQ Programmable High Voltage Power Supply

+ +

Introduction

+

The iseg Spezialelektronik GmbH company specialises in the development and production of High Voltage Power Supplies for Industry and Research.
+This is based on 20 years of experience in the development and +use of technologies of modern High Voltage generation.

+

These VME hardware modules are VME High Voltage power supplies in 2 slot width. They are available in 1 channel and 2 channel versions in same dimensions. This application supports the 2 channel versions.
+It has a LCD display to show the voltage or current.
+It supports a variable rate of change of output voltage, and has switchable polarity. It includes integrated protection and control circuits with +output overload and short circuit protection. It has a SHV connector on the front side for High Voltage connection.
+Full software control of parameters are available via the VMEbus.

+

The full specification is available on the iseg Spezialelektronik GmbH company website [Manuals: VHQ STANDARD] (499,7 kB).

+

Setup

+

There are 4 templates available for the different VME modules:-

+
    +
  • VHQ202M.template
  • +
  • VHQ203M.template
  • +
  • VHQ204L.template
  • +
  • VHQ205L.template
  • +
+

The simplest method to obtain the correct version of the template file is to use the +"getCommons" program. This requires a file called COMMON_FILES in your development directory.

+

The COMMON_FILES file has the following structure:

+ + +#####################################################
+# File name        CVS Location   CVS Tag
+####################################################
+VHQ202M.template   VHQ            HEAD
+
+
+

Create a substitution file and define the macro parameters needed

+

+Five macronames have been defined for these templates:- +

+ + + + + + + + + +
MacronameTypical ValuesDescription
DEVICEEXAMPLE-202MThe device name used to generate the PV names
cardN0Card number in the VME Crate
Mh3000This value depends on the M-h option for the template which is used.
> See the notes in the example substitution file
HOPRVA2000High Operating Range for Voltage A
> See the notes in the example substitution file
HOPRVB2000High Operating Range for Voltage B
> See the notes in the example substitution file
SIMMNODefault is NO, for Simulation use YES
SIML VHQ-TST PV name for Simulation mode.
> With the default of "NO", SIML pv link name is ignored
+ +

Graphical Interface

+

There is a MEDM engineering gui defined for this application, G_VHQ.adl.

+ + + + + + + + + + + + + + + +
VHQ engineering GUI
+It can be started with the following invocation:- +

+medm -x -macro VHQ-MODEL=VHQ202M,DEVICE=EXAMPLE-202M G_VHQ.adl +

+

with correct values for the macro names VHQ-MODEL and DEVICE

+

VHQ-MODEL macro can take the following names VHQ202M, VHQ203M, VHQ204L or VHQ205L

+

For each channel the required voltage is selected on the thumbwheel switch.

+

The required voltage ramp speed can be selected by entering its value.

+

The required current soft limit is also selectable.

+

The GUI shows when the voltage selected has exceeded the hard voltage limit by displaying a yellow background around the hard limit information.

+

Select a lower voltage on the wheelswitch or change the hard limit on the VME card.

VHQ engineering limit error GUI
VHQ engineering limit error GUI

A striptool like display is started by the Strip button on the GUI. This display shows the Voltage, Current and Power supplied by the selected channel.

+ +

Alarms

+

For each VME Module the following alarms are defined in the alh template:-

+
    +
  • $(DEVICE):ChanErr-A - Error on Channel A.
  • +
  • $(DEVICE):ChanErr-B - Error on Channel B.
  • +
  • $(DEVICE):Actual-VA - Channel A Voltage exceeded limit.
  • +
  • $(DEVICE):Actual-IA - Channel A Current exceeded limit.
  • +
  • $(DEVICE):Actual-VB - Channel B Voltage exceeded limit.
  • +
  • $(DEVICE):Actual-IB - Channel B Current exceeded limit.
  • +
+

When used in an application the alh alarm file must be created using the correct device names.

+

Changelog

+

Changes to the software are shown here Software Changelog.

+
+
Dennis Armstrong
+ + +Last modified: Tue Jun 12 10:18:13 CEST 2007 + + + +
+Author: Dennis Armstrong   Phone: +41 56 310 5109   Email: dennis.armstrong@psi.ch   Updated: 12.6.2007   +Source: /afs/psi.ch/project/epics/webhosting/software/vme/VHQ.php   + +
+ diff --git a/software/vme/VHQ_Changelog.html b/software/vme/VHQ_Changelog.html new file mode 100644 index 0000000..96188b0 --- /dev/null +++ b/software/vme/VHQ_Changelog.html @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
08:39 + +tag G_VHQ_0_3 added +
2007-06-12 +
08:39 +armstrong + +docs/VHQ.php +1.1
+
web version in php script +
09:38 + +tag G_VHQ_0_2 added +
2007-06-05 +
09:38 +armstrong + +docs/VHQ.html +1.6
+
Updated with gui display pictures +
09:36 +armstrong + +docs/VHQ.jpg +1.1
+docs/VHQ_slimit.jpg +1.1
+docs/VHQ_strip.jpg +1.1
+
Initial Import +
08:27 +armstrong + +docs/VHQx0x_eng.pdf +1.1
+
Manufacturers documentation for VME card +
08:23 +armstrong + +GNUmakefile +1.3
+App/scripts/GNUmakefile +1.2
+App/scripts/test.pl +1.3
+
Renamed PROJECT to MODULE +
2007-05-10 +
14:42 +armstrong + +App/config/medm/G_VHQ.adl +1.5
+
Corrected Polarity display +
14:40 +armstrong + +startup.script +1.1
+
Initial Import +
2007-05-09 +
14:47 +armstrong + +App/config/medm/G_VHQ.adl +1.4
+
Added strip button and yellow warning boxes for voltage and current selection over the hard limits. +
14:46 +armstrong + +App/config/medm/G_VHQ-strip.adl +1.1
+
Initial Import +
2007-05-08 +
14:49 +armstrong + +VHQ202M.template +1.13
+VHQ203M.template +1.13
+VHQ204L.template +1.13
+VHQ205L.template +1.13
+
Limits applied to soft current limit selection +
07:23 +armstrong + +EXAMPLE_high-voltage.subs +1.4
+VHQ202M.template +1.12
+VHQ203M.template +1.12
+VHQ204L.template +1.12
+VHQ205L.template +1.12
+
Added Striptool and Power Calculation PV,s +
2007-05-07 +
15:17 +armstrong + +VHQ202M.template +1.11
+VHQ203M.template +1.11
+VHQ204L.template +1.11
+VHQ205L.template +1.11
+
Changed value of PREC for voltage PV's +
2007-04-13 +
12:43 +armstrong + +docs/VHQ.html +1.4
+docs/VHQ.html +1.5
+
Problems with keyword substitution in html +
12:39 +armstrong + +docs/VHQ.html +1.3
+
Added Date keyword +
12:34 +armstrong + +docs/VHQ.html +1.2
+
Revision +
12:30 +armstrong + +docs/VHQ.html +1.1
+
Initial Import +
09:30 +armstrong + +App/config/alh/G_VHQ.alhInclude +1.1
+
Initial Import +
2007-04-10 +
09:37 +armstrong + +App/config/medm/G_VHQ.adl +1.3
+
Cleanup minor size changes +
15:14 + +tag G_VHQ_0_1 added +
2007-02-08 +
15:14 +armstrong + +VHQ202M.template +1.10
+VHQ203M.template +1.10
+VHQ204L.template +1.10
+VHQ205L.template +1.10
+App/config/medm/G_VHQ.adl +1.2
+
Added bits to define status register values +
2007-01-31 +
14:02 +armstrong + +VHQ203M.template +1.9
+VHQ204L.template +1.9
+VHQ205L.template +1.9
+
Added Alarm limits +
13:52 +armstrong + +VHQ202M.template +1.9
+
Added default alarm limits +
2007-01-30 +
10:02 +armstrong + +docs/README.txt +1.2
+
CVS keyword added +
2007-01-25 +
13:30 +armstrong + +VHQ202M.template +1.8
+VHQ203M.template +1.8
+VHQ204L.template +1.8
+VHQ205L.template +1.8
+
Added limits for current and voltage settings +
10:24 +armstrong + +VHQ202M.template +1.7
+VHQ203M.template +1.7
+VHQ204L.template +1.7
+VHQ205L.template +1.7
+
Added scan of .1 second to REG2 +
09:55 + +tag G_VHQ_0_0 added +
2007-01-23 +
09:55 +armstrong + +App/GNUmakefile +1.1
+App/config/medm/G_VHQ.adl +1.1
+
Initial import +
09:55 +armstrong + +App/scripts/test.pl +1.2
+
Corrected pv names +
09:34 +armstrong + +App/scripts/GNUmakefile +1.1
+App/scripts/test.pl +1.1
+
Initial import +
09:32 +armstrong + +GNUmakefile +1.2
+
Added subdirectory App +
2007-01-22 +
17:11 +armstrong + +EXAMPLE_high-voltage.subs +1.3
+
Corrected range of current limits +
2007-01-19 +
12:58 +armstrong + +VHQ202M.template +1.6
+VHQ203M.template +1.6
+VHQ204L.template +1.6
+VHQ205L.template +1.6
+
Ramp limits included in template +
2007-01-18 +
15:38 +armstrong + +VHQ202M.template +1.5
+VHQ203M.template +1.5
+VHQ204L.template +1.5
+VHQ205L.template +1.5
+
corrected precision values +
15:29 +armstrong + +VHQ202M.template +1.4
+VHQ203M.template +1.4
+VHQ204L.template +1.4
+VHQ205L.template +1.4
+
Set precision values +
14:34 +armstrong + +EXAMPLE_high-voltage.subs +1.2
+VHQ202M.template +1.3
+VHQ203M.template +1.3
+VHQ204L.template +1.3
+VHQ205L.template +1.3
+
Added simulation mode +
14:03 +armstrong + +App/config/medm/G_VHQ-test.adl +1.2
+
changed called adl filename +
2007-01-17 +
15:40 +armstrong + +GNUmakefile +1.1
+
initial import +
10:48 +armstrong + +docs/README.txt +1.1
+
initial import +
10:44 +armstrong + +App/config/medm/G_VHQ-test.adl +1.1
+
initial import +
10:41 +armstrong + +VHQ202M.template +1.2
+VHQ203M.template +1.2
+VHQ204L.template +1.2
+VHQ205L.template +1.2
+
Added CVS keyword +
10:38 +armstrong + +VHQ202M.template +1.1
+VHQ203M.template +1.1
+VHQ204L.template +1.1
+VHQ205L.template +1.1
+EXAMPLE_high-voltage.subs +1.1
+
Initial import +
10:28 +armstrong + +MODULE +1.1
+
initial import +
+

This page was created on Tue Jun 12 10:44:02 2007 using cl2html written by Simon Josefsson. diff --git a/software/vme/VHQ_slimit.jpg b/software/vme/VHQ_slimit.jpg new file mode 100644 index 0000000..18d9328 Binary files /dev/null and b/software/vme/VHQ_slimit.jpg differ diff --git a/software/vme/VHQ_strip.jpg b/software/vme/VHQ_strip.jpg new file mode 100644 index 0000000..76b9a60 Binary files /dev/null and b/software/vme/VHQ_strip.jpg differ diff --git a/software/vme/VHQx0x_eng.pdf b/software/vme/VHQx0x_eng.pdf new file mode 100644 index 0000000..4a41861 Binary files /dev/null and b/software/vme/VHQx0x_eng.pdf differ diff --git a/software/vme/index.html b/software/vme/index.html new file mode 100644 index 0000000..32270ac --- /dev/null +++ b/software/vme/index.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[DIR]vhq/12-Jun-2007 11:03 -  

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=D;O=A.html b/software/vme/index.html?C=D;O=A.html new file mode 100644 index 0000000..fba18a9 --- /dev/null +++ b/software/vme/index.html?C=D;O=A.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[DIR]vhq/12-Jun-2007 11:03 -  

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=D;O=D.html b/software/vme/index.html?C=D;O=D.html new file mode 100644 index 0000000..3c5f909 --- /dev/null +++ b/software/vme/index.html?C=D;O=D.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[DIR]vhq/12-Jun-2007 11:03 -  
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=M;O=A.html b/software/vme/index.html?C=M;O=A.html new file mode 100644 index 0000000..18febe7 --- /dev/null +++ b/software/vme/index.html?C=M;O=A.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[DIR]vhq/12-Jun-2007 11:03 -  
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=M;O=D.html b/software/vme/index.html?C=M;O=D.html new file mode 100644 index 0000000..8c44feb --- /dev/null +++ b/software/vme/index.html?C=M;O=D.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[DIR]vhq/12-Jun-2007 11:03 -  

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=N;O=A.html b/software/vme/index.html?C=N;O=A.html new file mode 100644 index 0000000..32270ac --- /dev/null +++ b/software/vme/index.html?C=N;O=A.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[DIR]vhq/12-Jun-2007 11:03 -  

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=N;O=D.html b/software/vme/index.html?C=N;O=D.html new file mode 100644 index 0000000..3c5f909 --- /dev/null +++ b/software/vme/index.html?C=N;O=D.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[DIR]vhq/12-Jun-2007 11:03 -  
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=S;O=A.html b/software/vme/index.html?C=S;O=A.html new file mode 100644 index 0000000..55ea51b --- /dev/null +++ b/software/vme/index.html?C=S;O=A.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[DIR]vhq/12-Jun-2007 11:03 -  
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/index.html?C=S;O=D.html b/software/vme/index.html?C=S;O=D.html new file mode 100644 index 0000000..ccfa67a --- /dev/null +++ b/software/vme/index.html?C=S;O=D.html @@ -0,0 +1,21 @@ + + + + Index of /software/vme + + +

Index of /software/vme

+ + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQx0x_eng.pdf12-Jun-2007 11:11 500K 
[IMG]VHQ.jpg12-Jun-2007 11:11 131K 
[IMG]VHQ_strip.jpg12-Jun-2007 11:11 63K 
[IMG]VHQ_slimit.jpg12-Jun-2007 11:11 38K 
[TXT]VHQ_Changelog.html12-Jun-2007 11:11 22K 
[   ]VHQ.php12-Jun-2007 11:17 6.0K 
[TXT]VHQ.html12-Jun-2007 11:11 5.7K 
[DIR]vhq/12-Jun-2007 11:03 -  

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq.html b/software/vme/vhq.html new file mode 100644 index 0000000..37e0d7f --- /dev/null +++ b/software/vme/vhq.html @@ -0,0 +1,109 @@ + + + + VHQ Programmable High Voltage Power Supply + + + +

VHQ Programmable High Voltage Power Supply

+ +

Introduction

+

The iseg Spezialelektronik GmbH company specialises in the development and production of High Voltage Power Supplies for Industry and Research.
+This is based on 20 years of experience in the development and +use of technologies of modern High Voltage generation.

+

These VME hardware modules are VME High Voltage power supplies in 2 slot width. They are available in 1 channel and 2 channel versions in same dimensions. This application supports the 2 channel versions.
+It has a LCD display to show the voltage or current.
+It supports a variable rate of change of output voltage, and has switchable polarity. It includes integrated protection and control circuits with +output overload and short circuit protection. It has a SHV connector on the front side for High Voltage connection.
+Full software control of parameters are available via the VMEbus.

+

The full specification is available on the iseg Spezialelektronik GmbH company website [Manuals: VHQ STANDARD] (499,7 kB).

+

Setup

+

There are 4 templates available for the different VME modules:- +

    +
  • VHQ202M.template
  • +
  • VHQ203M.template
  • +
  • VHQ204L.template
  • +
  • VHQ205L.template
  • +
+ +

+

The simplest method to obtain the correct version of the template file is to use the +"getCommons" program. This requires a file called COMMON_FILES in your development directory. +

+

The COMMON_FILES file has the following structure: +

+ + +#####################################################
+# File name        CVS Location   CVS Tag
+####################################################
+VHQ202M.template   VHQ            HEAD
+
+
+

Create a substitution file and define the macro parameters needed

+

+Five macronames have been defined for these templates:- +

+ + + + + + + + + +
MacronameTypical ValuesDescription
DEVICEEXAMPLE-202MThe device name used to generate the PV names
cardN0Card number in the VME Crate
Mh3000This value depends on the M-h option for the template which is used.
See the notes in the example substitution file
HOPRVA2000High Operating Range for Voltage A
See the notes in the example substitution file
HOPRVB2000High Operating Range for Voltage B
See the notes in the example substitution file
SIMMNODefault is NO, for Simulation use YES
SIML VHQ-TST PV name for Simulation mode.
With the default of "NO", SIML pv link name is ignored
+ +

Graphical Interface

+

There is a MEDM engineering gui defined for this application, G_VHQ.adl.

+ + + + + + + + + + + + + + + +
VHQ engineering GUI

It can be started with the following invocation:- +

+

+medm -x -macro VHQ-MODEL=VHQ202M,DEVICE=EXAMPLE-202M G_VHQ.adl +

+with correct values for the macro names VHQ-MODEL and DEVICE

+

VHQ-MODEL macro can take the following names VHQ202M, VHQ203M, VHQ204L or VHQ205L

+

Fore each channel the required voltage is selected on the thumbwheel switch.

+

The required voltage ramp speed can be selected by entering its value.

+

The required current soft limit is also selectable.

+

The GUI shows when the voltage selected has exceeded the hard voltage limit by displaying a yellow background around the hard limit information.

+

Select a lower voltage on the wheelswitch or change the hard limit on the VME card.

VHQ engineering limit error GUI
VHQ engineering limit error GUI

A striptool like display is started by the Strip button on the GUI. This display shows the Voltage, Current and Power supplied by the selected channel.

+ +

Alarms

+

For each VME Module the following alarms are defined in the alh template:- +

    +
  • $(DEVICE):ChanErr-A - Error on Channel A.
  • +
  • $(DEVICE):ChanErr-B - Error on Channel B.
  • +
  • $(DEVICE):Actual-VA - Channel A Voltage exceeded limit.
  • +
  • $(DEVICE):Actual-IA - Channel A Current exceeded limit.
  • +
  • $(DEVICE):Actual-VB - Channel B Voltage exceeded limit.
  • +
  • $(DEVICE):Actual-IB - Channel B Current exceeded limit.
  • +
+

+

When used in an application the alh alarm file must be created using the correct device names.

+

Changelog

+

Changes to the software are shown here Software Changelog.

+
+
Dennis Armstrong
+ + +Last modified: Tue Jun 5 11:38:00 CEST 2007 + + + diff --git a/software/vme/vhq/VHQ_0_3.tar b/software/vme/vhq/VHQ_0_3.tar new file mode 100644 index 0000000..12d2fda Binary files /dev/null and b/software/vme/vhq/VHQ_0_3.tar differ diff --git a/software/vme/vhq/index.html?C=D;O=A.html b/software/vme/vhq/index.html?C=D;O=A.html new file mode 100644 index 0000000..012d5db --- /dev/null +++ b/software/vme/vhq/index.html?C=D;O=A.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=D;O=D.html b/software/vme/vhq/index.html?C=D;O=D.html new file mode 100644 index 0000000..c21becd --- /dev/null +++ b/software/vme/vhq/index.html?C=D;O=D.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=M;O=A.html b/software/vme/vhq/index.html?C=M;O=A.html new file mode 100644 index 0000000..3650e7a --- /dev/null +++ b/software/vme/vhq/index.html?C=M;O=A.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=M;O=D.html b/software/vme/vhq/index.html?C=M;O=D.html new file mode 100644 index 0000000..c21becd --- /dev/null +++ b/software/vme/vhq/index.html?C=M;O=D.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=N;O=A.html b/software/vme/vhq/index.html?C=N;O=A.html new file mode 100644 index 0000000..ea5cd52 --- /dev/null +++ b/software/vme/vhq/index.html?C=N;O=A.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=N;O=D.html b/software/vme/vhq/index.html?C=N;O=D.html new file mode 100644 index 0000000..c21becd --- /dev/null +++ b/software/vme/vhq/index.html?C=N;O=D.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=S;O=A.html b/software/vme/vhq/index.html?C=S;O=A.html new file mode 100644 index 0000000..f6a8432 --- /dev/null +++ b/software/vme/vhq/index.html?C=S;O=A.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/software/vme/vhq/index.html?C=S;O=D.html b/software/vme/vhq/index.html?C=S;O=D.html new file mode 100644 index 0000000..c21becd --- /dev/null +++ b/software/vme/vhq/index.html?C=S;O=D.html @@ -0,0 +1,14 @@ + + + + Index of /software/vme/vhq + + +

Index of /software/vme/vhq

+ + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]VHQ_0_3.tar12-Jun-2007 11:02 930K 

+
Apache/2.2.15 (Scientific Linux) Server at epics.web.psi.ch Port 80
+ diff --git a/style/software/s7plc/s7plc.html b/style/software/s7plc/s7plc.html new file mode 100644 index 0000000..aa62236 --- /dev/null +++ b/style/software/s7plc/s7plc.html @@ -0,0 +1,1320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Updated: 06.04.2021
+
+
Printer friendly version +
 
+ + + +S7plc EPICS driver + + + + + +

S7plc EPICS driver documentation

+

Contents

+
    +
  1. Introduction
  2. +
  3. Theory of Operation
  4. +
  5. Driver Configuration
  6. +
  7. Device Support +
      +
    1. Connection Status
    2. +
    3. Analog Input
    4. +
    5. Analog Output
    6. +
    7. Binary Input
    8. +
    9. Binary Output
    10. +
    11. Multibit Binary Input
    12. +
    13. Multibit Binary Output
    14. +
    15. Multibit Binary Input Direct
    16. +
    17. Multibit Binary Output Direct
    18. +
    19. Long Input
    20. +
    21. Long Output
    22. +
    23. String Input
    24. +
    25. String Output
    26. +
    27. Waveform Input
    28. +
    29. Calculation Output
    30. +
  8. +
  9. Driver Functions
  10. +
+ +

1 Introduction

+

+This driver is intended to connect a Siemens S7 PLC (programmable +logic controller) via TCP/IP to an EPICS IOC, using the so called +"send/receive" protocol. +However, it can be used for any device sending and receiving blocks of +process variables (PVs) in the same way. +I highly recommend to connect to the PLC on a separate physical +network using a second network interface to avoid connection problems. +

+

+The driver was originally developped for SLS (Swiss Light Source) in 2000. +Later is has been modified by DESY (Deutsches Elektronen Synchrotron). The +current version has been completely rewritten for PPT (Puls-Plasmatechnik GmbH) +to run on a R3.14.6 PC based system, but it can also run on R3.13 vxWorks +system. Author of the current version is +Dirk +Zimoch <dirk.zimoch@psi.ch>. +

+

+In this document, it is assumed that the reader is familiar with EPICS, the +record concept and meanings of the fields of the standard records. +Recommended documentation: EPICS Record Refecrence Manual. +

+ + +

2 Theory of Operation

+

+The driver and the PLC periodically exchange data (process variables) +over the network. +For each direction (IOC to PLC and PLC to IOC), there is one fixed size +data block that bundles all process variables for this direction. +The process variables are identified by their bytes offset in the data +block. +

+

+Process variables can be 8, 16, or 32 bit wide signed or unsigned integers +or bit fields, single or double precision floating point values, +or arrays of these, as well as strings of single byte characters. +Both byte orders, big endian and little endian, are supported. +

+

+The IOC programmer typically connects one input record to each process +variable sent from the PLC to the IOC and one output record for each +process variable sent from the IOC to the PLC. +This requires that the programmer of the PLC and the programmer of the IOC +agree on the data block sizes and layouts. +The layout is not negotiated between IOC and PLC in any automated way. +

+

+When the IOC starts, the driver tries to connect to the PLC +which must run a TCP server. +If connection cannot be established (e.g. because the PLC is off) +the driver periodically retries to set up the connection. +Once connected, the driver waits for data blocks sent by the PLC. +The PLC must be set up to send its data periodically. +If the driver does not receive any data within a configurable timeout +(which should be 2 to 10 times the send period of the PLC) or the +data block does not have the correct size, the driver considers the +communication broken and closes the connection. +After a short time it tries to reconnect. +

+Upon reciving the data block, the driver copies the process variables +from this block into input records and then triggers processing of the +records. +To allow this triggering, the input records should use "I/O Intr" scanning +(or alternatively be processed by another record that uses "I/O Intr" +and is conencted to the same PLC). +All input records connected to the same PLC are triggered at the same time +after all input values have been updated. +The order of processing is undefined. +

+

+On the other hand, the driver periodically checks if any of the output +records connected to this PLC has processed since the last cycle. +If and only if this is the case, a data block containing all output +variables is sent to the PLC. +Sending output only starts after the "PINI" run at IOC startup. +This allows to initialize all output records before any data is sent +to the IOC. +Thus all output records should have the "PINI" field set to "YES" (or +alternatively be processed by another record that uses "PINI"). +Any output that has not been processed before the data block is sent +to the PLC transfers only 0 bytes (usually meaning integer 0, floating +point 0.0, or empty string, depending on the data type). +

+Data blocks are always transfered completely. +That means all process variables in that block are transfered, even +if they have not changed since the last cycle. +There is no way to write or read only a sub-set of process variables. +In between two cycles, any number of process variables may have changed. +These changes are only transfered to the other communication partner +in the next cycle. +Thus, there is always a delay until the values update on the other side +of the connection. +Also if values change too quickly, faster than the transfer cycle, +intermediate values are lost. +

+ +

3 Driver Configuration

+

+In the IOC startup script, the s7plc driver needs to be configured: +

+

+ +s7plcConfigure (PLCname, IPaddr, port, inSize, +outSize, bigEndian, recvTimeout, sendIntervall) + +

+

+PLCname is an arbitrary symbolic name for the PLC running +a server TCP socket on IPaddr:port. +The records reference the PLC with this name in their INP or +OUT link. PLCname must not contain the +slash character (/). +

+

+inSize and outSize are the data block +sizes in bytes read from and sent to the PLC, respectively. Any of them can +be 0. Byte order is defined by bigEndian. If +this is 1, the IOC expects the PLC to send and receive any +multibyte PV (word, float, etc) most significant byte first. If it is +0, the data is least significant byte first. This is independent +of the byte order of the IOC. +

+

+If the IOC does not receive new data from the PLC for +recvTimeout milliseconds, it closes the connection and +tries to reopen it after a few seconds. recvTimeout +should be 2 to 10 times the send intervall of the PLC. +

+

+The IOC checks for data to send every sendIntervall +milliseconds. If any output record has been processed in this time, the +complete buffer is sent to the PLC. If no new output is available, nothing +is sent. +

+

Example:

+

+ +s7plcConfigure ("vak-4", "192.168.0.10", 2000, 1024, 32, 1, 500, 100) + +

+

+In the vxWorks target shell, PLCname, and +IPaddr must be quoted. In the iocsh, quotes are +optional. +

+

+The variable s7plcDebug can be set in the statup script or +at any time on the command line to change the amount or debug output. +The following levels are supported: +

+

+-1:  fatal errors only
+ 0:  errors only
+ 1:  startup messages
+ 2:+ output record processing
+ 3:+ inputput record processing
+ 4:+ driver calls
+ 5:+ io printout
+

+

+Be careful using level>1 since many messages can introduce considerable +delays which may result in connection losses. Default level is 0. +

+

+On vxWorks, s7plcDebug can be set with +s7plcDebug=level +

+

+In the iocsh use +var s7plcDebug level +

+ + +

4 Device Support

+

+The driver supports the standard record types ai, +ao, bi, bo, +mbbi, mbbo, +mbbiDirect, mbboDirect, +longin, longout, +stringin, stringout, +and waveform. With EPICS R3.14, +calcout is supported, too. +The DTYP is "S7plc". If the record processes when +the PLC is not connected (off, down, unreachable), the record raises an +alarm with SEVR="INVALID" and STAT="CONN". +

+

+There is also a connection status support for bi. The +DTYP is "S7plc stat". This record does not +raise an alarm when the PLC is disconnected. It just changes to +0 state in that case. +

+

+SCAN="I/O Intr" is supported. Whenever input data is received +from a PLC, all "I/O Intr" input records connected to this PLC +are processed. In each output cyle, all "I/O Intr" output +records are processed. +

+

+The general form of the INP or OUT link is +

+

+ + "@PLCname/offset T=type L=low H=high B=bit" + +

+

+Not all parameters T, L, H, and +B are required for each record type and parameters equal to the +default value may be omitted. The default values depend on the record type. +

+

+PLCname is the PLC name as defined by +s7plcConfigure in the startup script. +

+

+offset is the byte offset of the PV relative to the +beginning of the input or output data block for this PLC. It must be an +integer number or a sum of integer numbers like 20+3+2. +

+

+T=type defines the data type for transmitting the PV +from or to the PLC. It is not case sensitive and has several aliases (see +table below). +The default is T=INT16 for most record types. +L=low and H=high are used in analog +input and output records if LINR is set to "LINEAR" +to convert analog values to integer values and back. They define the raw +values which correspond to EGUL and EGUF, +respectively. +Analog output records will never write integer values lower than +L or higher than H. If necessary, the raw output +value is truncated to the nearest limit. The default values for +L and H depend on T. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T=Data TypeDefault L=Default H=
INT8 + 8 bit (1 byte) signed integer number-0x7F
-127
0x7F
127
UINT8
UNSIGN8
BYTE
CHAR
+
8 bit (1 byte) unsigned integer number0x00
0
0xFF
255
INT16
SHORT
16 bit (2 bytes) signed integer number-0x7FFF
-32767
0x7FFF
32767
UINT16
UNSIGN16
WORD
16 bit (2 bytes) unsigned integer number0x0000
0
0xFFFF
65535
INT32
LONG
32 bit (4 bytes) signed integer number-0x7FFFFFFF
-2147483647
0x7FFFFFFF
2147483647
UINT32
UNSIGN32
DWORD
32 bit (4 bytes) unsigned integer number0x00000000
0
0xFFFFFFFF
4294967295
REAL32
FLOAT32
FLOAT
32 bit (4 bytes) floating point numberN/AN/A
REAL64
FLOAT64
DOUBLE
64 bit (8 bytes) floating point numberN/AN/A
STRINGcharacter array40N/A
+
+ +

+If T=STRING, L means length, not low. +The default value is the length of the VAL field. +In the case of the stringin and stringout records, this is 40 (including +the terminating null byte). +

+

+B=bit is only used for bi and bo records to define the +bit number within the data byte, word, or doubleword (depending on +T). Bit number 0 is the least significant bit. +Note that in big endian byte order (also known as motorola format) bit 0 is +in the last byte, while in little endian byte order (intel format) bit 0 is +in the first byte. If in doubt, use T=BYTE to avoid all +byte order problems when handling single bits. +

+

+Note that the output buffer is initialised with null bytes at startup and +any output record that has not been processed after reboot will send null +values to the PLC. The driver does not send anything before the global +variable interruptAccept has been set TRUE at the +end of iocInit. All records with PINI set to +"YES" have already been processed by that time. The driver +does not change the VAL field of any output record at +initialisation. Thus, auto save and restore can be used in combination with +PINI="YES". +

+ + + +

4.1 Connection Status

+
+ record (bi, "$(RECORDNAME)") {
+  field (DTYP, "S7plc stat")
+  field (INP,  "@$(PLCNAME)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+The record value is 1 if a connection to the PLC is established and 0 if not. +Disconnect does not raise an alarm. +

+ + +

4.2 Analog Input

+With conversion from integer data type: +
+ record (ai, "$(RECORDNAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (SCAN, "I/O Intr")
+  field (LINR, "Linear")
+  field (EGUL, "$(MINVAL)")
+  field (EGUF, "$(MAXVAL)")
+ }
+
+Using floating point data type: +
+ record (ai, "$(RECORDNAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=INT16. +Defaults for L and H depend +on T (see table above). +

+

+If T is an integer type, the PV is read into +RVAL. If LINR is set to "LINEAR", +then the record support converts RVAL to VAL +so that RVAL=L converts to VAL=EGUL and +RVAL=H converts to VAL=EGUF. +

+

+VALtemp=(RVAL-L)*(EGUF-EGUL)/(H-L)+EGUL +

+

+After this conversion, VALtemp is still +subject to scaling and smoothing. +

+

+VAL=(VALtemp*ASLO+AOFF)*(1-SMOO)+VALold*SMOO. +

+

+If T=FLOAT or T=DOUBLE, +the PV is read directly into VAL and L, +H, EGUL and EGUF are ignored. +The device support emulates scaling and smoothing which is otherwise done +by the record support during conversion. +

+

+VAL=(PV*ASLO+AOFF)*(1-SMOO)+VALold*SMOO +

+

+T=STRING is not valid for ai records. +

+ + +

4.3 Analog Output

+With conversion to integer data type: +
+ record (ao, "$(RECORDNAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (LINR, "Linear")
+  field (PINI, "YES")
+  field (EGUL, "$(MINVAL)")
+  field (EGUF, "$(MAXVAL)")
+ }
+
+Using floating point data type: +
+ record (ao, "$(RECORDNAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=INT16. +Defaults for L and H depend +on T (see table above). +

+

+If T is an integer type, RVAL is +written to the PV. If LINR is set to "LINEAR", +then the record support first scales OVAL. +

+

+OVALtemp=(OVAL-AOFF)/ASLO +

+

+After that, the value is converted to RVAL so that +OVALtemp=EGUL converts to RVAL=L and +OVALtemp=EGUF converts to RVAL=H. +

+

+RVAL=(OVALtemp-EGUL)*(H-L)/(EGUF-EGUL)+L +

+

+If RVAL is higher than H or lower than +L, the value is truncated to the nearest limit. +

+

+If T=FLOAT or T=DOUBLE, +OVAL is written directly to the PV. L, +H, EGUL and EGUF are ignored. +The device support emulates scaling which is otherwise done by the +record support during conversion. +

+

+PV=(OVAL-AOFF)/ASLO +

+

+T=STRING is not valid for ao records. +

+ + +

4.4 Binary Input

+
+ record(bi, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T) B=$(B)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=INT16. Default bit is B=0. +

+

+Depending on T, B can vary from 0 to 7, 15, or 31. +Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +If in doubt, use T=BYTE to avoid all byte order problems when +handling single bits. +

+

+The PV is read to RVAL and masked with +2B. +VAL is 1 if RVAL is not 0. +

+

+RVAL=PV&(1<<B); VAL=(RVAL!=0)?1:0 +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for bo records. Signed and unsigned types are equivalent. +

+ + +

4.5 Binary Output

+
+ record(bo, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T) B=bit")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=INT16. Default bit is B=0. +

+

+Depending on T, B can vary from 0 to 7, 15, or 31. +Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +If in doubt, use T=BYTE to avoid all byte order problems when +handling single bits. +

+

+If VAL is not 0, then RVAL is set to +2B, else RVAL is set to 0. +Only the referenced bit of the PV is changed while all other bits remain +untouched. Thus, other output records can write to different bits of the +same PV. +

+RVAL=(VAL!=0)?(1<<bit):0; +PV=(PVold&~(1<<bit))|RVAL +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for bo records. Signed and unsigned types are equivalent. +

+ + +

4.6 Multibit Binary Input

+
+ record(mbbi, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(RIGHT_SHIFT)")
+ }
+
+

+Default type is T=INT16. +

+

+The PV is read to RVAL, shifted right by SHFT bits +and masked with NOBT bits. Valid values for NOBT +and SHFT depend on T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +

+

+Example: Use bits 4 to 9 out of 16. +T=INT16, NOBT=6, SHFT=4 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PV1514131211109876543210
RVAL          987654
+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for mbbi records. Signed and unsigned types are equivalent. +

+ + +

4.7 Multibit Binary Output

+
+ record(mbbo, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(LEFT_SHIFT)")
+ }
+
+

+Default type is T=INT16. +

+

+RVAL is masked with NOBT bits, shifted left by +SHFT bits and written to the PV. Valid values for +NOBT and SHFT depend on T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +

+

+Only the referenced NOBT bits of the PV are changed. All other +bits remain untouched. Thus, other output records can write to different bits +of the same PV. +

+

+Example: Use bits 5 to 8 out of 16. +T=INT16, NOBT=4, SHFT=5 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RVAL            8765
PV1514131211109876543210
+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for mbbo records. Signed and unsigned types are equivalent. +

+ + +

4.8 Multibit Binary Input Direct

+
+ record(mbbiDirect, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(RIGHT_SHIFT)")
+ }
+
+

+Default type is T=INT16. +

+

+The PV is read to VAL, shifted right by SHFT +bits and masked with NOBT bits (see mbbi). +Valid values for NOBT and SHFT depend +on T: NOBT+SHFT must +not exceed the number of bits of the type. +

+

+Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for mbbiDirect records. Signed and unsigned types are equivalent. +

+ + +

4.9 Multibit Binary Output Direct

+
+ record(mbboDirect, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+  field (NOBT, "$(NUMBER_OF_BITS)")
+  field (SHFT, "$(LEFT_SHIFT)")
+ }
+
+

+Default type is T=INT16. +

+

+VAL is masked with NOBT bits, shifted left by SHFT +bits and written to the PV (see mbbo). Valid values for +NOBT and SHFT depend on T: +NOBT+SHFT must not exceed the number of bits of +the type. +

+

+Bit 0 is the least significant bit. In little endian byte order, bit 0 is in +the first byte, in big endian byte order it is in the last byte of the PV. +

+

+Only the referenced NOBT bits of the PV are changed. All other +bits remain untouched. Thus, other output records can write to different bits +of the same PV. +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for mbboDirect records. Signed and unsigned types are equivalent. +

+ + +

4.10 Long Input

+
+ record(longin, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default type is T=INT16. +

+

+The PV is read to VAL. If the type has less than 32 bits, the +value is zero extended or sign extended depending on the signedness of +the type. +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for longin records. +

+ + +

4.11 Long Output

+
+ record(longout, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=INT16. +

+

+Depending on T, the least significant 8, 16, or 32 bytes +of VAL are written to the PV. +

+

+T=STRING, T=FLOAT or T=DOUBLE are not +valid for longout records. +

+ + +

4.12 String Input

+
+ record(stringin, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET) L=$(LENGTH)")
+  field (SCAN, "I/O Intr")
+ }
+
+

+Default and only valid type is T=STRING. +Default length is L=40. +

+

+L bytes are read from the PV to VAL and null +terminated. Thus, the effective string length is maximal +L-1 bytes. +

+ + +

4.13 String Output

+
+ record(stringout, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) L=$(LENGTH)")
+  field (PINI, "YES")
+ }
+
+

+Default and only valid type is T=STRING. +Default length is L=40. +

+

+L bytes are written from VAL to the PV. +If the actual string length of VAL is shorter than +L, the remaining space is filled with null bytes. If +it is longer than L, the string is truncated and not +null terminated +

+ + +

4.14 Waveform Input

+
+ record(waveform, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (INP,  "@$(PLCNAME)/$(OFFSET)")
+  field (SCAN, "I/O Intr")
+  field (NELM, "$(NUMBER_OF_ELEMENTS)")
+  field (FTVL, "$(DATATYPE)")
+ }
+
+

+NELM elements are read from the PV to VAL. +

+

+The default type depends on FTVL. For example +FTVL=LONG results in T=INT32. +T and FTVL must match but can differ +in signedness. In most cases, better just specify FTVL and +leave T to the default. +

+

+If T=STRING, FTVL must be "CHAR" or +"UCHAR". L=length can be specified but +defaults to and must not exceed NELM. +If L is less than NELM, the +remaining elements are left untouched. +

+

+FTVL="STRING" is not supported. +

+

+The special type T=TIME is supported for +waveforms records only. FTVL must be +"CHAR" or "UCHAR" and NELM should be +"8". The input bytes are converted from BCD (binary coded decimal) +to integer values in the range from 0 to 99 each. This type is intended +to transfer BCD coded real time clock timestamps. +

+

+The Siemens "STEP 7" manual defines the 8 byte PLC timetamp as follows: +

+ + + + + + + + + + + + + + + + + + + + + +
01234567
yearmonthdayhourminutesecondmsec(hi)msec(lo)*10+day of week
+

+Years 90 to 99 mean 1990 to 1999, years 0 to 89 mean 2000 to 2089. Months +and days start with 1. Hour is 0 to 23, minute and second 0 to 59. Msec are +milliseconds in the range 0 to 999. The first two digits (0-99 hundredth of +a second) are in msec(hi). The last digit (0-9 thousandth of a second) +is multiplyed by 10 and added to the day of week (Sunday=1 to Saturday=7). +If you want to have the unconverted BCD bytes, do not use +T=TIME. +

+ + +

4.15 Calculation Output

+
+ record(calcout, "$(NAME)") {
+  field (DTYP, "S7plc")
+  field (OUT,  "@$(PLCNAME)/$(OFFSET) T=$(T) L=$(L) H=$(H)")
+  field (PINI, "YES")
+ }
+
+

+Default type is T=INT16. +Defaults for L and H depend +on T (see table above). +

+

+OVAL (the result of CALC or OCAL, +depending on DOPT) is written to the PV. If +T is an integer type, the value is truncated to an +integer and compared to L and H. +If OVAL is lower than L or higher than +H, it is truncated to the nearest limit. +

+

+If T=FLOAT or T=DOUBLE, +OVAL is written to the PV directly without any conversion. +

+

+T=STRING is not valid for calcout records. +

+

+To use this device support with calcout records, you need EPICS R3.14. +

+ + +

5 Driver Functions

+

+Device support for other record types can be written with calls to the +following driver functions: +

+

+ +s7plcStation* s7plcOpen (char* PLCname); + +

+

+ +int s7plcRead (s7plcStation* station, +unsigned int offset, unsigned int dlen, +void* pdata); + +

+

+ +int s7plcReadArray (s7plcStation* station, +unsigned int offset, unsigned int dlen, +unsigned int nelem, void* pdata); + +

+

+ +int s7plcWrite (s7plcStation* station, +unsigned int offset, unsigned int dlen, +void* pdata); + +

+

+ +int s7plcWriteMasked (s7plcStation* station, +unsigned int offset, unsigned int dlen, +void* pdata, void* pmask); + +

+

+ +int s7plcWriteArray (s7plcStation* station, +unsigned int offset, unsigned int dlen, +unsigned int nelem, void* pdata); + +

+

+ +int s7plcWriteMaskedArray (s7plcStation* station, +unsigned int offset, unsigned int dlen, +unsigned int nelem, void* pdata, void* pmask); + +

+

+The functions s7plcRead(), s7plcWrite(), +s7plcWriteMasked(), and s7plcWriteArray() +are actually macros for +s7plcReadArray() and s7plcWriteMaskedArray() with +nelem=1 and/or mask=NULL. +

+

+station is a handle previously obtained by a call to +s7plcOpen(). +

+

+offset is the byte offset of the PV relative +to the beginning to the data block. +

+

+dlen is the length of the PV in bytes (one element in case of +arrays). If the endianess of the PLC differs from the IOC, the byte order of +the dlen bytes is swapped by the driver. +

+

+nelem is the number of elements in an array. +

+

+pdata is a pointer to a buffer of +nelem*dlen bytes. +PVs are read to or written from this buffer. +

+

+mask is a pointer to a bitmask of dlen bytes. +Only those bits are changed where the mask contains 1 bits. All other bits +remain untouched. +

+

+For strings, use array functions with dlen=1 and +nelem=buffersize. +

+
+Dirk Zimoch, March 2005 - February 2012 + + +
+Updated: 06.04.2021   +Source: /afs/psi.ch/project/epics/webhosting/software/s7plc/s7plc.html   + +
+ diff --git a/training.html b/training.html new file mode 100644 index 0000000..7995b64 --- /dev/null +++ b/training.html @@ -0,0 +1,317 @@ + + + + + + +EPICS Training Materials + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Elke Zimoch
+Phone: +41 56 310 5121
+Updated: 10.05.2007
+
+
Printer friendly version +
 
+

EPICS Training Materials

+ + + 
+ + + + + + + + + + + + + + + + + + + +
DeutschEnglish
+

EPICS Training am PSI

+Die Sektion Kontrollsysteme des PSI bietet eintägige Schulungen zum +Kontrollsystem EPICS an. Der Kurs wird in englischer oder in deutscher Sprache +angeboten. Hier erfährt man mehr über +Termine und Details. +
+

EPICS Training at PSI

+The section Control Systems of the PSI offers a one-day course on the +Control System EPICS. The training is offered in Englisch or in German. +Find here +dates and details. +
+

Tutorien

+Die angebotenen Tutorien sind kommentierte Beispielanwendungen. Sie sollten +selbständig durchgearbeitet werden. + +
+

Tutorials

+The Tutorials are commented examples. You should work and learn with them on +your own. + +
+

Downloads

+Dokumente, Unterlagen und Präsentationsfolien können +hier herunter geladen werden. +
+

Downloads

+Documents, handouts, and presentation slides can be found and downloaded +here. +
+
+Author: Elke Zimoch   Phone: +41 56 310 5121   Email: elke.zimoch@psi.ch   Updated: 10.05.2007   +Source: /afs/psi.ch/project/epics/webhosting/training/index.php   + +
+ diff --git a/training/PLC_lesson/Handout.doc b/training/PLC_lesson/Handout.doc new file mode 100644 index 0000000..1e8bfc9 Binary files /dev/null and b/training/PLC_lesson/Handout.doc differ diff --git a/training/PLC_lesson/Handout.pdf b/training/PLC_lesson/Handout.pdf new file mode 100644 index 0000000..6b7bd29 Binary files /dev/null and b/training/PLC_lesson/Handout.pdf differ diff --git a/training/PLC_lesson/Special_EPICS_Training_20101119.pdf b/training/PLC_lesson/Special_EPICS_Training_20101119.pdf new file mode 100644 index 0000000..162da7f Binary files /dev/null and b/training/PLC_lesson/Special_EPICS_Training_20101119.pdf differ diff --git a/training/PLC_lesson/Special_EPICS_Training_20101119.ppt b/training/PLC_lesson/Special_EPICS_Training_20101119.ppt new file mode 100644 index 0000000..ae3b412 Binary files /dev/null and b/training/PLC_lesson/Special_EPICS_Training_20101119.ppt differ diff --git a/training/PLC_lesson/Special_EPICS_Training_20101119.tar.gz b/training/PLC_lesson/Special_EPICS_Training_20101119.tar.gz new file mode 100644 index 0000000..dd48537 Binary files /dev/null and b/training/PLC_lesson/Special_EPICS_Training_20101119.tar.gz differ diff --git a/training/PLC_lesson/Special_EPICS_Training_20101119_records.tar.gz b/training/PLC_lesson/Special_EPICS_Training_20101119_records.tar.gz new file mode 100644 index 0000000..9641631 Binary files /dev/null and b/training/PLC_lesson/Special_EPICS_Training_20101119_records.tar.gz differ diff --git a/training/PSI-training.html b/training/PSI-training.html new file mode 100644 index 0000000..2117ee8 --- /dev/null +++ b/training/PSI-training.html @@ -0,0 +1,424 @@ + + + + + + +EPICS Training + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Elke Zimoch
+Phone: +41 56 310 5121
+Updated: 20.04.2020
+
+
Printer friendly version +
 
+

EPICS Training

+ + 
+ + + + + + + + + + + + + + + + + + + + + + + + + +
DeutschEnglish
+Die Sektion Kontrollsysteme des PSI bietet eintägige Schulungen zum +Kontrollsystem EPICS an. Das Training findet ein bis zweimal im Monat +Mittwochs im Raum 008 (WSLA) statt. +Beginn ist um 9 Uhr, gegen 16 Uhr sind wir ungefähr fertig. +Unterlagen und Trainingscomputer werden gestellt. +Der Kurs richtet sich besonders an wissenschaftliches und technisches +Personal des PSI. + +The section Control Systems of the PSI offers a one-day course on the Control System +EPICS. The training is held once or twice a month in room 008 (WSLA). +It starts at 9:00 and ends about 16:00. Handouts and Computers are provided. +The course is geared towards scientific or technical staff of the PSI. +
+Notizen und Folien kann man sich auf folgender Seite ansehen und +herunterladen:
+http://epics.web.psi.ch/training/downloads
+Die Notizen werden während des Kurses als Ausdruck verteilt. +
+Notes and presentations slides can be viewed and downloaded on the following +page:
+http://epics.web.psi.ch/training/downloads
+Printouts of the notes are provided in the training. +
+Wir arbeiten unter anderem mit Linux Computern, deshalb sind +Vorkenntnisse nützlich (aber nicht unbedingt nötig). Die Unterlagen +enthalten eine kurze Liste der benötigten Befehle. + +We are using Linux Computer amongst others, therefore it is nice if you have +already worked with Linux (but it is not necessary). There is a list of all +needed commands in the handouts. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DatumSprache/LanguageAnmeldungen/RegistrationsLeitung/Teacher
11. Dezember 2019English3Elke Zimoch
12. Februar 2020! canceled !2Elke Zimoch
11. März 2020! canceled !-Elke Zimoch
8. April 2020! canceled !-Elke Zimoch
13. Mai 2020! canceled !-Elke Zimoch
+
+Anmeldungen bitte per mail an +Elke Zimoch. +Es sind mindestens drei Anmeldungen nötig, damit der Kurs stattfinden kann. Da +nur vier Trainingscomputer zur Verfügung stehen werden nur in Ausnahmefällen +mehr Anmeldungen für einen Termin akzeptiert. + +To register send a mail to +Elke Zimoch. +Three registrations are minimum for one date, four are maximum. +
+ + +
+Author: Elke Zimoch   Phone: +41 56 310 5121   Email: elke.zimoch@psi.ch   Updated: 20.04.2020   +Source: /afs/psi.ch/project/epics/webhosting/training/PSI-training.php   + +
+ diff --git a/training/caClientLessons.html b/training/caClientLessons.html new file mode 100644 index 0000000..cfb9385 --- /dev/null +++ b/training/caClientLessons.html @@ -0,0 +1,467 @@ + + + + + + +Lessons on Channel Access Client Programming + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 11.05.2007
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

Lessons on Channel Access Client Programming

+ +

+This lessons should qualify a C-programmer to make efficient use +of the Channel Access client libraries and to write his/her own +EPICS client applications in C. +Special attention is directed to network traffic and possible pitfalls. +

+

+This tutorial is not yet complete. +Whenever I have some time, I will add more lessons. +

+ +

Contents

+ + +

Audience

+

+The lessons are directed to all users of EPICS who want to write +their own Channel Access client applications in C. +They are recommend for all programmers who are new to Channel Access, +not only to members of the PSI controls section. +

+

+You should be experienced with C. +I will not try to explain how the C compiler, preprocessor, or linker +works and what Makefiles are. +If this is new to you, I recommend to get some programming practice first. +For some lesson, experience with multi-threading is recommended. +

+

+If you don't have experience with EPICS yet, you should participate in +an EPICS trainig, here at PSI +or +at some other EPICS site. +I expect that you know what the terms IOC, record and +processing mean in the EPICS world. +Experience with medm or other existing Channel Access clients is +also helpful. +

+ + +

References

+

+See the EPICS home page www.aps.anl.gov/epics for +everything about EPICS. +An overwiew what EPICS and Channel Access are is given on the + +EPICS Overwiew page. +Especially read the + +chaper about Channel Access. +

+

+Today, two major releases of Channel Access are in use: R3.12 (which is still used +in EPICS release R3.13) and R3.14. +On the EPICS home page you can find the (very thin) + +EPICS R3.12 Channel Access Reference Manual +and the much more detailled + +EPICS R3.14 Channel Access Reference Manual. +

+

+APS provides many lectures in their + +Getting Started with Epics series. +You should definitely read the + +Introduction to Channel Access Clients. +

+

+Much valueable information can be found in header files. +If you work at a standard SLS Linux PC, have a look at:
+/usr/local/epics/base/include/cadef.h
+Otherwise find this file in your local EPICS installation. +

+ + +

Lessons

+

+The lessons are provided as tgz archives. Unpack them anywhere in +your home directory. Each lesson is in its own directory. +The lesson itself is contained in the comments in the C files. +Read them carefully. +Some lessons contain README files. Read them first. +

+

+The provided Makefiles are tailored to the SLS installation of EPICS. +It should not be too difficult to modify them for other installations. +You may use them as a starting point for your own Channel Access clients. +

+

+The environment variable EPICS_HOST_ARCH must be defined. +I have tested all programs on Scientific Linux 3, where we have +EPICS_HOST_ARCH=SL3-x86 at the SLS. +Other installation will most probably use different values. +

+

+The used record names exist at the SLS. If you are in the machine network +or in a beamline network, you will see real life data. From the SLS +office, you will either see simulations or you can +connect to the machine network with the cam command. +In some lessons, we will write to records. +Depending on the relative location of you and the record, you may +be allowed to write to real components of the machine! +This is not a game! +

+

+If you are not at SLS, you should change the record names so something +which exists at your site. Probably use a so called softioc +to provide some records to play with. +

+ + +

caLesson1

+

+This lesson shows how to write a very simple CA client program. +It connects to some channels, reads them, prints them and exits. +

+

+Download caLesson1.tgz. +

+ + +

caLesson2

+

+Here you will learn how to read more than a bare number from a channel. +This is very useful to format a value correctly or to know the physical +units of a value. +In fact, it is this additional information that makes the difference +between a value and a bare number. +

+

+You will also see one way to get your data a bit more structured. +There are many ways to achive the same result, of course. +You should know how macros work in C to understand this lesson. +

+

+Download caLesson2.tgz. +

+ + +

caLesson3

+

+In this lesson, you will learn about different data types in Channel Access. +You will also see the difference between "static" and "dynamic" data of a +channel and how use this to reduce network traffic when reading data +repeatedly. +

+

+Download caLesson3.tgz. +

+ + +

caLesson4

+

+This lesson introduces "monitors". +When you install a monitor, a user-defined callback function is called +by the Channel Access library whenever a channel has new values available. +This is much more "network friendly" than high rate polling. +

+

+You will also see the differences beween the Channel Access APIs of EPICS +R3.13 and R3.14. +In R3.14, you can still use the R3.13 API and Channel Access clients written +for EPICS R3.13 should work without modifications with EPICS R3.14. +Anyway, to be able to understand other people's code, you should know +both flavours and only R3.14 is designed for multi-threading. +

+

+Download caLesson4.tgz. +

+ + +

caLesson5

+

+In this lesson we will write to a device for the first time. +We will use a "put-wait" method, that does not return before the device has +understood and executed the written value. +This method is best suited for GUI-less programs which can block. +(In later lessons, we will learn a different way to write values.) +

+

+After the value is written, we will wait unil the device has finished +using a monitor on a done flag. +This is much more efficient than polling a done flag in a loop. +

+

+Download caLesson5.tgz. +

+
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 11.05.2007   +Source: /afs/psi.ch/project/epics/webhosting/training/caClientLessons/index.php   + +
+ diff --git a/training/caClientLessons/caLesson1.tgz b/training/caClientLessons/caLesson1.tgz new file mode 100644 index 0000000..2246368 Binary files /dev/null and b/training/caClientLessons/caLesson1.tgz differ diff --git a/training/caClientLessons/caLesson2.tgz b/training/caClientLessons/caLesson2.tgz new file mode 100644 index 0000000..b47ee2d Binary files /dev/null and b/training/caClientLessons/caLesson2.tgz differ diff --git a/training/caClientLessons/caLesson3.tgz b/training/caClientLessons/caLesson3.tgz new file mode 100644 index 0000000..8201b6f Binary files /dev/null and b/training/caClientLessons/caLesson3.tgz differ diff --git a/training/caClientLessons/caLesson4.tgz b/training/caClientLessons/caLesson4.tgz new file mode 100644 index 0000000..c6a587e Binary files /dev/null and b/training/caClientLessons/caLesson4.tgz differ diff --git a/training/caClientLessons/caLesson5.tgz b/training/caClientLessons/caLesson5.tgz new file mode 100644 index 0000000..10300f7 Binary files /dev/null and b/training/caClientLessons/caLesson5.tgz differ diff --git a/training/caClientLessons/index.html b/training/caClientLessons/index.html new file mode 100644 index 0000000..e754fca --- /dev/null +++ b/training/caClientLessons/index.html @@ -0,0 +1,467 @@ + + + + + + +Lessons on Channel Access Client Programming + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Dirk Zimoch
+Phone: +41 56 310 5182
+Updated: 11.05.2007
+
+
Printer friendly version +
 

[Validate HTML][Validate CSS]
+
+

Lessons on Channel Access Client Programming

+ +

+This lessons should qualify a C-programmer to make efficient use +of the Channel Access client libraries and to write his/her own +EPICS client applications in C. +Special attention is directed to network traffic and possible pitfalls. +

+

+This tutorial is not yet complete. +Whenever I have some time, I will add more lessons. +

+ +

Contents

+ + +

Audience

+

+The lessons are directed to all users of EPICS who want to write +their own Channel Access client applications in C. +They are recommend for all programmers who are new to Channel Access, +not only to members of the PSI controls section. +

+

+You should be experienced with C. +I will not try to explain how the C compiler, preprocessor, or linker +works and what Makefiles are. +If this is new to you, I recommend to get some programming practice first. +For some lesson, experience with multi-threading is recommended. +

+

+If you don't have experience with EPICS yet, you should participate in +an EPICS trainig, here at PSI +or +at some other EPICS site. +I expect that you know what the terms IOC, record and +processing mean in the EPICS world. +Experience with medm or other existing Channel Access clients is +also helpful. +

+ + +

References

+

+See the EPICS home page www.aps.anl.gov/epics for +everything about EPICS. +An overwiew what EPICS and Channel Access are is given on the + +EPICS Overwiew page. +Especially read the + +chaper about Channel Access. +

+

+Today, two major releases of Channel Access are in use: R3.12 (which is still used +in EPICS release R3.13) and R3.14. +On the EPICS home page you can find the (very thin) + +EPICS R3.12 Channel Access Reference Manual +and the much more detailled + +EPICS R3.14 Channel Access Reference Manual. +

+

+APS provides many lectures in their + +Getting Started with Epics series. +You should definitely read the + +Introduction to Channel Access Clients. +

+

+Much valueable information can be found in header files. +If you work at a standard SLS Linux PC, have a look at:
+/usr/local/epics/base/include/cadef.h
+Otherwise find this file in your local EPICS installation. +

+ + +

Lessons

+

+The lessons are provided as tgz archives. Unpack them anywhere in +your home directory. Each lesson is in its own directory. +The lesson itself is contained in the comments in the C files. +Read them carefully. +Some lessons contain README files. Read them first. +

+

+The provided Makefiles are tailored to the SLS installation of EPICS. +It should not be too difficult to modify them for other installations. +You may use them as a starting point for your own Channel Access clients. +

+

+The environment variable EPICS_HOST_ARCH must be defined. +I have tested all programs on Scientific Linux 3, where we have +EPICS_HOST_ARCH=SL3-x86 at the SLS. +Other installation will most probably use different values. +

+

+The used record names exist at the SLS. If you are in the machine network +or in a beamline network, you will see real life data. From the SLS +office, you will either see simulations or you can +connect to the machine network with the cam command. +In some lessons, we will write to records. +Depending on the relative location of you and the record, you may +be allowed to write to real components of the machine! +This is not a game! +

+

+If you are not at SLS, you should change the record names so something +which exists at your site. Probably use a so called softioc +to provide some records to play with. +

+ + +

caLesson1

+

+This lesson shows how to write a very simple CA client program. +It connects to some channels, reads them, prints them and exits. +

+

+Download caLesson1.tgz. +

+ + +

caLesson2

+

+Here you will learn how to read more than a bare number from a channel. +This is very useful to format a value correctly or to know the physical +units of a value. +In fact, it is this additional information that makes the difference +between a value and a bare number. +

+

+You will also see one way to get your data a bit more structured. +There are many ways to achive the same result, of course. +You should know how macros work in C to understand this lesson. +

+

+Download caLesson2.tgz. +

+ + +

caLesson3

+

+In this lesson, you will learn about different data types in Channel Access. +You will also see the difference between "static" and "dynamic" data of a +channel and how use this to reduce network traffic when reading data +repeatedly. +

+

+Download caLesson3.tgz. +

+ + +

caLesson4

+

+This lesson introduces "monitors". +When you install a monitor, a user-defined callback function is called +by the Channel Access library whenever a channel has new values available. +This is much more "network friendly" than high rate polling. +

+

+You will also see the differences beween the Channel Access APIs of EPICS +R3.13 and R3.14. +In R3.14, you can still use the R3.13 API and Channel Access clients written +for EPICS R3.13 should work without modifications with EPICS R3.14. +Anyway, to be able to understand other people's code, you should know +both flavours and only R3.14 is designed for multi-threading. +

+

+Download caLesson4.tgz. +

+ + +

caLesson5

+

+In this lesson we will write to a device for the first time. +We will use a "put-wait" method, that does not return before the device has +understood and executed the written value. +This method is best suited for GUI-less programs which can block. +(In later lessons, we will learn a different way to write values.) +

+

+After the value is written, we will wait unil the device has finished +using a monitor on a done flag. +This is much more efficient than polling a done flag in a loop. +

+

+Download caLesson5.tgz. +

+
+Author: Dirk Zimoch   Phone: +41 56 310 5182   Email: dirk.zimoch@psi.ch   Updated: 11.05.2007   +Source: /afs/psi.ch/project/epics/webhosting/training/caClientLessons/index.php   + +
+ diff --git a/training/downloads.html b/training/downloads.html new file mode 100644 index 0000000..9f732c9 --- /dev/null +++ b/training/downloads.html @@ -0,0 +1,447 @@ + + + + + + +EPICS Training Materials: Downloads + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+PAUL SCHERRER INSTITUT
+EPICS at PSI +
+
+
PSIEPICSSLSSwissFELProscan
+
+
+


+
EPICS at PSI +
+
Software + +
+
Training + +
+
+ +
+
+ + + web + epics.web.psi.ch
+
+
+

+Author: Elke Zimoch
+Phone: +41 56 310 5121
+Updated: 17.12.2014
+
+
Printer friendly version +
 
+

EPICS Training Materials:
Downloads

+ + 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Deutsch

English

+

EPICS Training am PSI

+ +
+

EPICS Training at PSI

+ +
+

Fortgeschrittenkurse

+ Dies ist eine Liste von Präsentationen, die im Rahmen des SLS EPICS Trainings + für Fortgeschrittene gehalten wurden. + Die Beschreibungen darin beziehen sich auf die Softwareumgebung an der SLS und sind nicht + ohne weiteres auf andere Institute übertragbar. + Die Folien sind auf Englisch. + +
+

Advanced courses

+ This is a liste of talks given at the SLS Advanced EPICS Trainings. + The descriptions herein are specific for the SLS software environment and are not + necessarily usable at other facilities. + +
+

Introduction to asynDriver

+Dieser ganztägige Vortrag wurde während des EPICS-Collaboration-Meetings im +April 2007 am DESY in Hamburg von Dirk Zimoch gegeben. Er bietet eine Einführung in die +asynDriver Struktur. Behandelt werden die Konzepte, die zu Verfügung stehenden +Werkzeuge und Anleitungen zur Programmierung. Der Kurs richtet sich an +Programmierer, die Device-Supports oder Treiber schreiben möchten, welche das +asynDriver-System benutzen sollen.
+Der Vortrag ist in englischer Sprache. + +
+

Introduction to asynDriver

+This full-day talk was given by Dirk Zimoch during the EPICS Collaboration Meeting in April +2007 at DESY, Hamburg. It gives an introduction to the asynDriver framework, +including concepts, utilities and howtos. It is directed to programmers who +want to write device supports or drivers that use the asynDriver framework. + +
+

EPICS Training mit SPS Treiber

+Am 19. November 2010 haben Dirk und Elke Zimoch am PSI einen Kurs zum Einsatz +des SPS S7 Treibers +gehalten. Der Kurs umfasst eine kurze Einführung in EPICS, +die eine gekürzte Version des normalen PSI Trainings darstellt und eine +Kurzanleitung, wie man EPICS installiert.
+Der Vortrag ist in englischer Sprache. + +
+

EPICS Training including PLC Driver

+This half-day training course was given by Dirk and Elke Zimoch on 19th of +November 2010. It covers a brief introduction into EPICS (maily slides from +the standard PSI training), some instructions how to install EPICS and +a tutorial how to use the +S7 PLC driver. + +
+

Loslegen mit EPICS

+(Die englischen Originalvorträge findet man auf + http://www.aps.anl.gov/aod/bcda/epicsgettingstarted) + +
+

Getting Started with EPICS

+(The following links point to + http://www.aps.anl.gov/aod/bcda/epicsgettingstarted) + +
+

EPICS Einführung

+Im Rahmen des EPICS Workshops im Herbst 2011 fand eine Einführung in EPICS statt. Die englischen Folien und die dazu gehörigen Handout finden sich hier: + +
+

EPICS Introduction

+During the EPICS Workshop in autumn 2011 an EPICS introduction was given. Here you can download the slides and the handouts for the hands on training: + +
+
+Author: Elke Zimoch   Phone: +41 56 310 5121   Email: elke.zimoch@psi.ch   Updated: 17.12.2014   +Source: /afs/psi.ch/project/epics/webhosting/training/downloads.php   + +
+ diff --git a/training/handouts/EPICS_Introduction_PSI2011.ppt b/training/handouts/EPICS_Introduction_PSI2011.ppt new file mode 100644 index 0000000..4f23586 Binary files /dev/null and b/training/handouts/EPICS_Introduction_PSI2011.ppt differ diff --git a/training/handouts/EPICS_Introduction_PSI2011_Handouts.pdf b/training/handouts/EPICS_Introduction_PSI2011_Handouts.pdf new file mode 100644 index 0000000..91aafe2 Binary files /dev/null and b/training/handouts/EPICS_Introduction_PSI2011_Handouts.pdf differ diff --git a/training/handouts/d_EPICS_Training_at_PSI.ppt b/training/handouts/d_EPICS_Training_at_PSI.ppt new file mode 100644 index 0000000..570523d Binary files /dev/null and b/training/handouts/d_EPICS_Training_at_PSI.ppt differ diff --git a/training/handouts/d_TrainingHandout.pdf b/training/handouts/d_TrainingHandout.pdf new file mode 100644 index 0000000..25a23a1 Binary files /dev/null and b/training/handouts/d_TrainingHandout.pdf differ diff --git a/training/handouts/e_EPICS_Training_at_PSI.ppt b/training/handouts/e_EPICS_Training_at_PSI.ppt new file mode 100644 index 0000000..bc1a2f2 Binary files /dev/null and b/training/handouts/e_EPICS_Training_at_PSI.ppt differ diff --git a/training/handouts/e_TrainingHandout.pdf b/training/handouts/e_TrainingHandout.pdf new file mode 100644 index 0000000..5ce0b5f Binary files /dev/null and b/training/handouts/e_TrainingHandout.pdf differ diff --git a/training/lectures-series/C_code_for_IOCs.ppt b/training/lectures-series/C_code_for_IOCs.ppt new file mode 100644 index 0000000..7fc2891 Binary files /dev/null and b/training/lectures-series/C_code_for_IOCs.ppt differ diff --git a/training/lectures-series/C_on_IOCs.tgz b/training/lectures-series/C_on_IOCs.tgz new file mode 100644 index 0000000..19864a7 Binary files /dev/null and b/training/lectures-series/C_on_IOCs.tgz differ diff --git a/training/lectures-series/ChannelAccessClientProgramming.ppt b/training/lectures-series/ChannelAccessClientProgramming.ppt new file mode 100644 index 0000000..be19903 Binary files /dev/null and b/training/lectures-series/ChannelAccessClientProgramming.ppt differ diff --git a/training/lectures-series/ChannelAccessMatlab.ppt b/training/lectures-series/ChannelAccessMatlab.ppt new file mode 100644 index 0000000..17e3cd9 Binary files /dev/null and b/training/lectures-series/ChannelAccessMatlab.ppt differ diff --git a/training/lectures-series/ChannelAccessTcl.ppt b/training/lectures-series/ChannelAccessTcl.ppt new file mode 100644 index 0000000..bab260b Binary files /dev/null and b/training/lectures-series/ChannelAccessTcl.ppt differ diff --git a/training/lectures-series/asynDriverIntroduction.ppt b/training/lectures-series/asynDriverIntroduction.ppt new file mode 100644 index 0000000..8cb219c Binary files /dev/null and b/training/lectures-series/asynDriverIntroduction.ppt differ diff --git a/training/lectures-series/deutsch_epics_intro_pt1.ppt b/training/lectures-series/deutsch_epics_intro_pt1.ppt new file mode 100644 index 0000000..23f876b Binary files /dev/null and b/training/lectures-series/deutsch_epics_intro_pt1.ppt differ diff --git a/training/lectures-series/deutsch_epics_intro_pt2.ppt b/training/lectures-series/deutsch_epics_intro_pt2.ppt new file mode 100644 index 0000000..3bb703d Binary files /dev/null and b/training/lectures-series/deutsch_epics_intro_pt2.ppt differ