Tango Controls is the collaborative effort of many people. It is a Free Open Source Software (FOSS) project. The source code is available free of charge under GPL and LGPL open source licenses. The source code are on GitHub organised in core libraries in tango-controls, archiver tools and libraries in tango-controls-hdbpp, and a large number of device servers in tango-ds on SourceForge. The source code can downloaded and modified by anybody. Development happens on GitHub. Everyone is welcome to fork the git repositories and fix or improve them. Pull request with bug fixes or new features are reviewed and integrated in the official source code by authorized developers.
Tango Controls started at the ESRF in 1999 and has since then been adopted by many sites. The following sites have committed to the sustainable development of Tango Controls by signing a Collaboration Contract and committing to financing the development of Tango for the next 5 years (at least):
Many other sites use Tango Controls. Refer to the Partners to see some of the users of Tango Controls.
The mission of the Tango Controls software community is to:
Develop an open source tool kit called Tango Controls for building high performance and high quality distributed control systems for small and large installations. The toolkit design is based on the concept of distributed objects called devices and provides native support for multiple programming languages. The toolkit must implement a full set of tools for developing, managing and monitoring small and large control systems. Build a sustainable community dedicated to ensuring that the Tango Controls toolkit continually improves and remains modern to serve the needs of the community for at least the next 20 years. The goal of Tango Controls is to become a de facto industrial standard for industrial distributed control systems.
Tango Controls system libraries are made available under LGPL licence. This means that Tango Controls can be used and modified without constraints on the derived system built on Tango Controls.
The graphical tools and some of device servers are made available under GPL licence. This means modifications to them need to be shared with the community.
The Roadmap described below is being implemented thanks to the Tango Controls Collaboration and the community efforts. The Roadmap addresses the general evolution of Tango and associated tools. Input is usually gathered via email and presented in the form of Feature Requests. The Feature requests are then discussed in the interactive session.
The Executive Committee is working on identifying and investing resources in implementing these features. The Community is invited to contribute to implementing the above topics. A call for comments for the next major release of Tango (V10) has been made on the forum in RFC #4.
The most requested features:
- Improve documentation;
- Move source code to GIT;
- Replace CORBA with ZMQ (or other protocol);
- Improve code sharing of device servers;
- Continue to improve code quality (as always).
The Tango project can be divided into 3 parts in terms of the source code: C++, Java, Python. All of these parts are planned to be updated without minimum changes to the end users. Progress of Tango source code can be followed on the git repositories: C++, Java, Python, REST API.
The Tango Web platform is being developed and a first release of the project has been made.
Information about the Major Tango V9 release can be found in the Major Releases page.
Visit the Feature Requests page to follow the latest progress. New feature requests should be submitted to the forum.
The original proposal for Tango was made in a paper written in 31/7/1998 by W-D. Klotz, A. Götz, E. Taurel and J. Meyer :
Tango - object oriented device control implemented in CORBA and DCOM.
It was built on the ideas of a previous control system developed at the ESRF called TACO which was based on RPCs. The concept of Devices in a Device Server as the key concept was developed in TACO and then refined and improved in Tango. The first international presentation of Tango was at the ICALEPCS conference in 1999 in Trieste (Italy) in a paper written by J-M. Chaize, A. Götz, W-D. Klotz, J. Meyer, M. Perez and E. Taurel and entitled:
Developing Tango started in 1999 at the ESRF. Very soon after that they were joined in 2000 by the control's team from the Soleil Synchrotron. The two institutes co-developed the first releases of Tango. They were then later on joined by Elettra, ALBA, and DESY. The community quickly grew and today counts over 50 sites.
Ten years of Tango Controls history in 5 minutes
A graphical representation of the development of Tango Controls
The latest major release of Tango V9 was made in September 2015. The latest release is V9.2.3. The Device implementation version, major features and previous releases are in the Major Releases web page.
At ICALEPCS 2011 the ICALEPCS Lifetime Achievement Award was given to Emmanuel Taurel (ESRF), Nicolas Leclerq (SOLEIL), Pascal Verdier (ESRF) for their contribution to the Tango core development over the last 10 years.
The Tango Controls executive body is the Steering Committee. It makes strategic decisions about core developments in the Tango collaboration. There is one representative from each institute who has signed the Tango Controls Collaboration Contract. The representative is the person who is highest in each institutes’s hierarchy and has sufficient technical knowledge about Tango. This representative should have enough power to decide on allocating resources to developing software for Tango. To ensure that the right decisions are made and match those of the user community, advice must be sought by the committee from their respective users and developers on a regular basis.
There are 2 types of members of the Tango Controls Steering Committee Members:
- Core members - contribute financially to the maintenance of Tango and commit at least 6 months of an engineer annually to develop and commit source to the Tango Controls core projects
- Contributing members - contribute to the financing of the maintenance of Tango.
Both members normally use Tango and write and share Tango device classes with the community.
The current Tango Controls Steering Committee member representatives are:
|Chairman:||Andy Götz (ESRF)|
|Coordinator:||Jean-Michel Chaize (ESRF)|
|ALBA (core)||Guifre Cuni|
|ELETTRA (core)||Lorenzo Pivetta ( deputy Claudio Scafuri )|
|ESRF (core)||Andy Götz, deputy Jean-Michel Chaize|
|SOLEIL (core)||Alain Buteau|
|DESY (contributing)||Thorsten Kracht, deputy Teresa Nunez|
|INAF (contributing)||Matteo Canzari|
|MAX-IV (contributing)||Vincent Hardion|
|SKAO (contributing)||Nick Rees|
|SKA-ZA (contributing)||Anton Joubert|
|SOLARIS (contributing)||Michał Ostoja-Gajewski, deputy Grzegorz Kowalski|
The last meeting of the Steering Committee was organized by ELI-beamlines at Dolní Břežany (Czech Republic) on the 5th of June 2018 (before the Tango Meeting).
Minutes of the latest Steering Committee meetings:
- SC meeting held in 2019 @ DESY (Hamburg) minutes
- SC meeting held in 2018 @ ELI-beamlines (Dolní Břežany) minutes
- SC meeting held in 2017 @ INAF (Firenze) minutes
- SC meeting held in 2016 @ ONERA (Toulouse) minutes
- Kernel Meeting held in November 2016 @ SOLEIL
- Kernel Meeting held in September 2016 @ ESRF
- EC meeting held in 2015 @ SOLARIS minutes
- EC meeting held in 2014 @ ESRF minutes
- EC meeting held in 2013 @ Alba minutes
- EC meeting held in 2012 @ FRMII minutes
Questions of general interest
Tango is a software toolkit for building distributed control systems.
Tango Controls was originally developed at the European Synchrotron Radiation Facility (ESRF) in Grenoble (FRANCE) to replace their previous control system called TACO. They were joined early on by SOLEIL (French synchrotron in Paris), then ELETTRA (Italian synchrotron in Trieste), ALBA (Spanish Synchrotron in Barcelona) and PETRA III (German synchrotron in Hamburg). A number of other communities have since adopted Tango for their control system - lasers, telescopes, wind tunnels, and physics experiments. The list is growing.
The kernel of Tango is maintained by the ESRF, SOLEIL, ELETTRA and ALBA. A group of 8 sites contributes financially to the maintenance of Tango and form the Steering Committee. A number of other sites contribute tools and device servers based on Tango. The list can be found in the Tango EcoSystem page.
Tango guarantees backwards and forwards compatibility between all major and minor versions of the Tango library. This means that a device server compiled with version N will be able to communicate with all clients and servers compiled with versions 1 to N-1.
The Tango library detects the highest version which both client and server can communicate with and then uses this. This negotiation is done at runtime and is one of thee killer features of Tango. It allows a Tango system to be upgraded gradually by introducing new versions only where it is needed in a running system. There is no need to recompile all device servers and clients. Of course new features in the latest versions will not be available to servers and clients linked with old versions e.g. pipes are not available in versions lower than 9.
Questions about installing Tango
Tango is available as source code, binary packages or virtual machine. You can choose the method which you prefer or which suits your needs best:
- Binary packages - the easiest method. Packages exist for Debian Linux and Windows. Other unofficial packages exist. Ask on the mailing list if anyone has packages for your favourite platform.
- Source code - the easiest way to get new versions or to have a version you can debug,. The source code package is built using autotools and runs on most Linux distributions. Go to the Downloads page to get the latest source code package.
- Virtual Machine - an easy to try out Tango without installing anything. Go to the Virtual Machine page to download the VM.
Questions related to coding.
In 2016 the source code for the kernel and all common tools were moved to a number of git repositories on GitHub .The source code repositories can be browsed online here:
All bugs should be reported as an issue on the respective Tango Controls git repository on GitHub. In case you do not know which repository the bug issue should be created in, then, please, create an issue in this generic repository for the issue. The kernel developers will move the issue to the right repository:
Feature requests should be submitted as issues with the tag "enhancement" to the respective git repositories or to the generic issue git repo:
The State of a device in TANGO is (for historical reasons) available via a method called state() or as an attribute called State. Reading the state of a device server gives a different behaviour depending on which method you use. If you read the state using the state() method ( e.g. mydevice.state() ) then the device server will always call the method implementing the state reading. This usually means the hardware is accessed every time you call state(). If you read the attribute called State ( e.g. mydevice.read_attribute("State") ) then the device server will check to see if the state is being polled. If so then it will return the state in the cache. This can be much faster than accessing the hardware. Take note of this when deciding which method to use to read the state. In most cases use the read_attribute() call to profit from the polling (when configured).
The source code for a large number of device classes is still on Sourceforge and is available for browsing and downloading here:
Originally it was hoped that all TANGO developers would upload their device servers to this repository. This is true for a number of developers and sites. But a growing number of device classes are in other repositories either on GitHub or other sites. We have developed a searchable database to make these easier to find and access.
Please, upload the metadata (xmi file) for your device classes to the catalogue!