• General

    Questions of general interest

    • What is Tango ?

      Tango is a software toolkit for building distributed control systems.

    • How did Tango start ?

      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.

    • Who is behind Tango Controls ?

      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.

    • Compatibility between versions

      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.

  • Installation

    Questions about installing Tango

    • How to install 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:

      1. 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.
      2. 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.
      3. Virtual Machine - an easy to try out Tango without installing anything. Go to the Virtual Machine page to download the VM.
  • Coding

    Questions related to coding.

    • Where to find a source code?

      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:

      https://github.com/tango-controls

    • How to report a bug?

      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:

      https://github.com/tango-controls/TangoTickets

    • How to report an issue/make a feature request?

      Feature requests should be submitted as issues with the tag "enhancement" to the respective git repositories or to the generic issue git repo:

      https://github.com/tango-controls/TangoTickets

    • What is the difference between state as a method or state as an attribute?

      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).

    • Where to find device classes?

      The source code for a large number of device classes is still on Sourceforge and is available for browsing and downloading here:

      https://sourceforge.net/p/tango-ds/code/HEAD/tree/DeviceClasses/

      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!