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