Introduction¶
The FCF is the ICS Framework component with the purpose of helping consortia in building the FCS software. Its main goal is to provide ready to use and configurable software entities for controlling and monitoring instrument hardware functions and sensing systems. The FCF includes subcomponents along the three layers of the ICS three-tier architecture.
Scope¶
This document is the user manual for the ELT ICS Framework - FCF. The intended audience are ELT users, consortia developers or software quality assurance engineers.
This release is to be used by the Consortia developers in trying out the control of instrument hardware functions using the provided libraries and applications, as well as getting acquainted with the design choices and their implementations.
Acronyms¶
ADC |
Atmospheric Dispersion Correction |
DB |
Database |
CCS |
Central Control System |
ELT |
Extremely Large Telescope |
FCF |
Function Control Framework |
FCS |
Function Control System |
GUI |
Graphical User Interface |
ICS |
Instrument Control System |
LCS |
Local Control System |
PLC |
Programming Logical Controller |
RAD |
Rapid Application Development |
RPC |
Remote Procedure Call |
SCXML |
State Chart XML |
Main Components¶
The present version of the FCF covers the following main components:
A Device Manager implementation that can control a configurable number of devices from a standard ELT WS. It includes a set of modules implementing the device classes, a python client library and the main server (fcfDevmgr).
A sample GUI (fcfGui) for the Device Manager that allow users to control devices graphically.
A set of Device Simulators capable of emulating the behaviour of a device controller and its interface within a WS. Device simulators implement the OPCUA server funcionality for each device.
A set of PLC libraries implementing the supported device controllers, corresponding PLC simulators and HMIs for local control.
Top Directory Structure¶
The first level of the fcf
directory contains the following:
<root> # FCF component root
├── devmgr # directory containing the FCF manager and devices classes
├── devsim # directory containing the device simulators
├── gui # directory containing the different GUIs modules
├── doc # directory containing the FCF user manual (sphinx format)
├── test # directory containing the FCF integration tests
└── wscript # WAF build script
Device Manager (fcfDevmgr)¶
The server implementation is based on the ICS application framework (rad). Following the ELT and ICS development standards, the client and server are implemented in C++.
Directory Structure¶
In the present version of the FCF, the device manager contains:
<root> # devmgr root directory
├── cli # FCF CLI added in version 3
├── client
├── common
├── devices
├── fcfif
├── clib # Renamed in version 4
├── server
├── templates
└── wscript
Where:
cli
is a dedicated shell to interact with the Device Manager. the server from the command line.client
is an application that can be used to send commands to the server from the command line.common
is a library implementing core server classes like actions and activities.devices
is a library implementing the device classes.fcfif
is the CII XML interface module with the payload definition for commands and topics.clib
is a python library that simplifies the interaction with the server from Python scripts.server
is the server application (devmgrServer). This is a reference implementation that can be configured to control instrument functions of a given type.templates
is a directory containing templates for code and configuration generation. Template files use the Jinja2 template engine: Jinja 2 documentation
Note
In version 5.0.0, the FCF devices migrated from Softing to open62541 as the OPCUA library for implementing the client functionality.
Device Simulators (devsim)¶
The FCF includes a set of Simulators with the purpose of allowing the Device Manager to run without the need for a PLC. These Simulators are implemented in Python and they run on a Linux WS. Each Device Simulator implements an OPC-UA Server as well as the business logic of a particular Device Controller.
Graphical Interfaces (gui)¶
In order to simplify the usage of the server, the fcf
provides a prototype of an engineering
interface. The graphical interface has been implemented in Qt using the QtWidget library.
Directory Structure¶
In the present version of the FCF, the gui
contains:
<root> # gui root directory
├── fcfgui # FCF generic engineering graphical interface (fcfGui)
├── wdglib # Motor device engineering graphical interface
├── pymotgui # Motor device engineering graphical interface implemented in Python (fcfMotGui).
├── pylampgui # Lamp device engineering graphical interface implemented in Python (fcfLampGui).
├── msglib # Library for sending commands to the server from GUIs.
└── wscript
PLC Libraries (controllers)¶
With the adoption of GIT, some components have been split into high and low level parts. This is the
case of the FCF where PLC controller projects are found now under the ifw-ll
GIT project which contains
the controller directory with all PLC library projects. This directory contains the
list of TwinCAT projects implementing the Device Controllers and Simulators for each of the hardware
functions to be controlled by the FCF at the local level.
These directories are Microsoft Visual Studio projects and they shall be edited under Windows using the TwinCAT IDE.
Warning
Unlike the old IFW version, the TwinCAT projects do not contain the compiled libraries only the source code.
We have compiled and packed all PLC libraries binaries into a dedicated GIT project. In this project it is stored PLC libraries, C++ modules and some sample projects. They can be retrieved from the GIT repository here.
Directory Structure¶
In the present version of the FCF, the libraries
folder contains:
<root> # libraries root directory
├── IODev # IoDev PLC library
├── Lamp # Lamp PLC library
├── Motor # Motor PLC library
├── Mudpi # Motor PLC library
├── Piezo # Piezo PLC library
├── Shutter # Shutter PLC library
├── Actuator # Actuator PLC library
├── common # PLC commonly used function library
├── ccslib # CCS PLC library
├── ccssim # CCS simulation PLC library
├── cryo # Cryogenic Toolkit PLC library
├── plctpl # PLC Template library
├── utils # PLC Utilities library
├── rsCommCommon # Serial communication Common PLC library
├── rsCommSerial # Serial communication PLC library
├── rsCommTcp # Serial communication TCP PLC library
├── rsCommTcpRt # Serial communication TCP RT PLC library
└── timer # Timer PLC library