Overview of Tango Controls
Intended audience: beginners, developers, administrators, users
What is Tango Controls
Tango Controls is an object oriented, distributed control system framework which defines a communication protocol, an Application Programmers Interface (API) and provides a set of tools and libraries to build software for control systems, especially SCADA.
It is build around concept of devices and device classes. This is unique feature of Tango Controls and make it different to other SCADA software which usually treats a controls system as a set of signals and read and write of process values.
Devices are created by device servers. Device servers are processes implementing set of device classes. Device classes implement a state machine, command (actions or methods), pipes and attributes (data fields) for each class. Each device therefore has state, zero or more commands, zero or more pipes and zero or more attributes. Device classes are responsible for translating hardware communication protocols into Tango Controls communication. This way you may control and monitor all your equipment like motors, valves, oscilloscopes, etc. Device classes can be used to implement any algorithm or act as a mailbox to any other software program or system.
Tango Controls has been designed to manage small and large systems. Each system has a centralised (MariaDB/MySQL) database. The database stores configuration data used at startup of a device server, and acts as name server by storing the dynamic network addresses. The database acts as permanent store of dynamic settings which need to be memorised. Each Tango Control system has a database and is identified by its Tango Host. A large system can be made up of tens of thousands or devices (the limit has not been reached yet). Systems of systems are supported by the protocol i.e. the API supports transparent access to devices from multiple systems.
Tango Controls communication protocol defines how all components of the system communicates with each other. Tango uses CORBA for synchronous communications and ZeroMQ for asynchronous communication. The detail of these protocols are hidden from the developer and user of Tango by the API and high level tools.
TANGO is based on the 21 century technologies :
CORBA and ZMQ to communicate between device server and clients
C++, Python and Java as reference programming languages
Linux and Windows as operating systems
Modern object oriented design patterns
Naturally implements a microservices architecture
Unit tested, continuous integration enabled
Hosted on Github (https://github.com/tango-controls)
Extensive documentation + tools, large community
Over the last 17 years that Tango exists over 40 small and large sites (see http://www.tango-controls.org/partners/) have adopted Tango for their control system. Tango is now used to control not only accelerators but also experimental lasers (ELI), wind tunnels (Onera), and most recently has been adopted by the world’s largest radio telescope as its core control system (SKA).