Tango is the collaborative effort of many people. It is a free open source project, i.e. the source code is available under GPL and LGPL open source licenses (on tango-cs and tango-ds on SourceForge) and it can be downloaded and modified by anybody. Anyone can send a patch with their changes, but changes to the official source code are done by authorized developers. If you want your modifications to be included, then send them to the Tango Controls mailing list.
Tango Controls started at the ESRF but has since then been adopted by a number of 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:
Many other sites use Tango Controls. Refer to the Partners to see many others who use 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 tool kit design is based on the concept of distributed devices or objects and provides native support for multiple programming languages. The tool kit implements 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 tool kit 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.
SCADA systems are typically industrial type systems using standard hardware. Distributed Control Systems are more flexible control systems used in more complex environments.
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 disturbing the end users. Progress of Tango source code: C++, Java, Python, REST API.
The Tango Web platform is to be done.
Information about the Major Tango V9 release can be found in the Major Releases page.
Visit the Feature Requests page to see the 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:
Tango started at the ESRF in 1999 but was soon joined in 2000 by the control's team from the Soleil Synchrotron. The two institutes co-developed the first versions of Tango. They were then joined by Elettra, ALBA, and DESY. The community quickly grew and today counts over 20 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 Device implementation version, major features and previous releases are in the Major Releases web page.
In 2011 the ICALEPCS Lifetime Achievement Award was given to Emmanuel Taurel (ESRF), Nicolas Leclerq (SOLEIL), Pascal Verdier (ESRF) for their contribution to the Tango collaboration 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)||David Fernandez, deputy Guifre Cuni|
|ELETTRA (core)||Claudio Scafuri|
|ESRF (core)||Andy Götz, deputy Jean-Michel Chaize|
|SOLEIL (core)||Alain Buteau|
|DESY (contributing)||Thorsten Kracht, deputy Teresa Nunez|
|INAF (contributing)||Cristina Knapic|
|MAX-IV (contributing)||Vincent Hardion|
|SKAO (contributing)||Nick Rees|
|SKA-ZA (contributing)||Lize Van Der Heever|
|SOLARIS (contributing)||Wojciech Kitka|
The last meeting of the Steering Committee was organized by the Arcetri Astrophysical Observatory a member of INAF (National Institute for AstroPhysics) in Florence on the 6th of June 2017 (before the Tango Meeting).
Minutes of the latest Steering Committee meetings:
- SC meeting held in 2017 @ INAF (Firenze) minutes
- SC meeting held in 2016 @ ONERA 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!