epicsQt

EPICS Qt at GitHub

Introduction

Welcome to EPICS Qt at GitHub.

EPICS Qt is a layered framework based on Qt for accessing Experimental Physics and Industrial Control System (EPICS) data using Channel Access (CA) and PV Access (PVA). It has been designed for rapid development of control system graphical interfaces, initially developed at the Australian Synchrotron.

The EPICS Qt (QE) Framework can be used in three ways:

Note, there are many variations to the above, such as using another Integrated Development Environment like Eclipse, or developing new plugin widgets to implement desired functionality, then using those widgets within a code free GUI development.

Other documents you may be interested in are:

License

The EPICS QT Framework is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

The EPICS QT Framework is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with the EPICS QT Framework. If not, see https://www.gnu.org/licenses/.

Repository Structure

The repository structure is documented separately in structure.html.

Quick Road-map for Code Free GUI Development

Getting Started

This is documented separately in getting_started.html.

Release Notes

These are documented separately and are available here.

Environment Variables

There are two classes of environment variables, namely those that affect the building EPICS Qt and those that impact EPICS Qt at runtime. Both of these are documented separately in environment_variables.html.

Archiver Appliance (Optional)

Please visit EPICS Archiver Appliance support documentation.

PV Access Support

Please visit the PV Access support documentation for details.

PSI’s caQtDM Integration

Please visit the caQtDM integration documentation for details.

Andrew Rhyder’s Notes for Windows 10

For in house EPICS Qt Windows builds, we use the mingw compiler. However, EPICS Qt has been successfully built using MSVC. Please see Andrew Rhyder’s notes for details. This is somewhat old now, any contructive feed back is welcome.

Future Plans

In brief:

Qt6 migration [version 3.9.1]

While version 3.9.1 will not support Qt6 as such, all the updates required for Qt6 which are compatible with Qt5.12.8 will be used in this release. For example, this includes the use of:

It will also purge any remaining Qt4 clutter. Users constrained to Qt4, alas, are on your own from 3.9.1 onwards.

Qt6 [version 4.1.1]

The framework will be updated to fully support Qt6 (specifically Qt6.4). Depending on the number of conditional complier directives that would be required, this version might also support Qt5.12 - this is still to be deceided.

Refactor Enumerations [version 4.1.1]

Version 4 will also refactor the common QE widget property enumeration values into a single defintion module/class. This will reduce the amount of repeated boiler code in the widget header files, and hence reduce the chance of mistakes and generally make maintenance and understandibilty easier.

The other main advanatge is that it will enable these properties to be moved up or down the widget hierarchy without impacting the ui files. However, there there be need to modify existing ui files to change the enumeration property values from, for example:

  <property name="displayAlarmStateOption" stdset="0">
     <enum>QELabel::WhenInAlarm</enum>
  </property>

would need to become:

  <property name="displayAlarmStateOption" stdset="0">
     <enum>QE::WhenInAlarm</enum>
  </property>

This would only apply when an enumeration value other than the default value has been selected. The drop down menu presented in designer for selecting an enumeration value will appear the same. A python script to update ui files is under developemnt to support this transition.

For any third party code using the EPICS Qt framework which sets a widget enumeration property value will have to be modified. While no script is envisioned to support this transtion, my experiance with the proto type is that this task it is not too onerrous - the complier is a great help.

PV Access

Update PV Access functionality to support all image formats. Currently we only support mono.

Feed Back and Collaboration

Please email: andrews@ansto.gov.au

Note: this is new e-mail address - the old synchrotron.org.au address is no more.

Credits

Developers

Andrew Ryder, Glenn Jackson, Anthony Owen, Ricardo Fernandes, Anton Maksimenko, Andraz Pozar, Andrew Starritt, Zai Wang.

3rd Party Software

Apart from EPICS base and Qt itself, the EPICS Qt framework uses the following:

The framework relies on QWT for plotting https://sourceforge.net/projects/qwt/.

To access the Channel Access Archive data, the framework relies on the maiaXmlRpcClient and support classes written by Frerich Raabe raabe@kde.org, Ian Reinhart Geiser geiseri@kde.org, Karl Glatz and Sebastian Wiedenroth wiedi@frubar.net.

When build with EPICS Archiver Appliance support, the EPICS Qt framework relies on Google Protocol Buffers https://developers.google.com/protocol-buffers/.

When built with MPEG support, the EPICS Qt framework relies on FFmpeg for reading MPEG image streams https://www.ffmpeg.org/.

The QEGui application can be built to support caQtDM (version 3 and after EPICS Qt release 3.7.2 will support version 4) widgets provided by The Paul Scherrer Institute. http://epics.web.psi.ch/software/caqtdm/.

Last updated: Wed Dec 7 13:32:13 2022