Introduction¶
The fcf
component is part of the ifw package. This release is
intended to allow Consortia Developers trying out the control of
instrument hardware functions using the libraries and applications
delivered as part of this version, as well as getting acquainted
with the design choices and their implementations.
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.
- A generic GUI 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.
- A set of PLC libraries implementing the supported device controllers and their HMIs for local control.
Top Directory Structure¶
The first level of the fcf
directory contains the following:
<root> # FCF component root
├── controllers # directory containing the PLC libraries
├── devmgr # directory containing the FCF manager and devices classes
├── devsim # directory containing the device simulators
├── gui # directory containing the different GUIs modules
└── wscript # WAF build script
Device Manager (devmgr)¶
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++.
Note
In this version, the devmgr supports only six different type of devices: lamps, shutters, motors, sensors, derotators and ADCs.
Directory Structure¶
In the present version of the FCF, the device manager contains:
<root> # devmgr root directory
├── client
├── common
├── devices
├── modif
├── server
├── templates
└── wscript
Where:
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.modif
is the interface module containing the google buffer payload definition for commands and topics.server
is the server application (devmgrServer). This is a reference implementation that can be configured for controlling 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
Device Simulators (devsim)¶
The FCF includes a set of Simulators with the purpose of allowing the Device Manager running without a PLC. These Simulators are implemented in Python and they run on a Linux WS. Each Device Simulator implements an OPC-UA Server and the business logic of a particular Device Controller.
Note
In this version, Device Simulator for the following standard devices are provided:
- Lamp.
- Motor.
- Shutter.
Directory Structure¶
In the present version of the FCF, the devsim
contains:
fcf/devsim
├── packages
│ ├── devsimLampLib
│ ├── devsimLib
│ └── devsimMotorLib
└── programs
├── devsimLamp
├── devsimMotor
└── devsimShutter
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
├── wdglib # Motor device engineering graphical interface
├── motgui # Motor device engineering graphical interface
├── pymotgui # Motgui implemented in Python.
├── msglib # Library for sending commands to the server from GUIs.
└── wscript
PLC Libraries (controllers)¶
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 control. These directories are Microsoft Visual Studio projects and they shall be edited under Windows.
Directory Structure¶
In the present version of the FCF, the controllers
contains:
<root> # controller root directory
├── ioDev # IoDev PLC library
├── lamp # Lamp PLC library
├── motor # Motor PLC library
├── piezo # Piezo PLC library
├── rsComm # Serial communication PLC library
├── shutter # Shutter PLC library
├── switch # Generic switch PLC library
├── timer # Timer PLC library
└── trklib # PLC C++ modules
Note
Currently not all Device Controllers are supported by
the devmgr
.