Front-End Software Architecture (FESA)

FESA wiki (CERN only)

What is FESA?

FESA is a comprehensive environment for equipment specialists to design, develop, test and deploy real-time control software written in C++ for front-end computers (in the context of CERN’s control system, Front-End refers to computers which control particle accelerator’s equipment, and has nothing to do with Web development).

FESA encompasses the following:

  • A generic model that captures the recurrent aspects of real-time software programming in the domain of accelerator control.
  • A method whereby equipment specialists reuse/apply the generic architecture and tailor it to their specific needs on a case-by-case basis.
  • A set of software tools to support equipment specialists, users and the exploitation team at all stages of development and operation.

In other words, FESA is an implementation of standard control system concepts in the domain of accelerator control.




Why use FESA?

FESA provides a common way to develop control software. By using FESA, developers benefit from the following features without having to implement them themselves:

  • Communication with applications used by operators
  • Real-time scheduling
  • Data management (e.g. persistence)
  • Integration with standard tools and monitoring systems

Developers can focus on writing the code that actually controls the hardware, and reuse the FESA implementation of the recurring parts of a control software. The advantages are multiple:

  • Guided development
  • Benefit from a complete framework where many concerns are already covered
  • Complexity kept to the minimum
  • Guaranteed compliance with control system standards
  • Tested infrastructure




How is FESA made?

There are three main components in the FESA framework:

  • The FESA runtime is a C++ library, used by all the projects developed with the FESA framework. It contains all the common real-time code shared by every FESA project.
  • The FESA model defines concepts and rules used to create and validate FESA projects designs.
  • The FESA code generation module generates C++ code based on a FESA project design. Java interfaces can also be generated in order to facilitate integration of client applications.

In order to work with FESA projects, the FESA editor is provided. It comprises a fully graphical editor in the form of an Eclipse RCP plug-in, as well as a command-line application for those who prefer using their own editor.