Two to Tango - Building control systems using PyTango
Dipankar Niranjan (~dipankar) |
NOTE: The slide deck has been put up.
Let's consider a scenario where you're interested in building a system composed of multiple hardware devices (e.g. DC motor(s), Temperature sensor(s), Camera(s), Computing device(s), etc.) Each device uses a different communication protocol and provides support for its specific command set in a specific language and on a specific OS. You wish to have a client which collects information from these devices, issues commands to them and you may also want to establish communication between these devices. A toolkit like Tango may well be what you're looking for. You would write Tango device servers for each of these devices. These device server classes would expose commands, attributes and properties. When you write the code for a Tango device server command, you would call the device specific command, in the device supported language to be executed from the device specific OS, whereas the Tango device server command could be called from anywhere and using any language (like a wrapper around the underlying device command) You could also use Tango to write client side application code in a language and on a platform of your choice.
Tango Controls is a free and open source device oriented, distributed control system toolkit for controlling any kind of hardware or software. If you're looking at building solutions for Distributed Control Systems (DCS), SCADA systems or if you're into embedded platforms, IoT applications or System Integration Platforms, Tango might be the solution. At a high level, it is a toolkit for building and integrating systems and for connecting things together.
Some of its key features are - it provides a unified interface to all equipment (hardware), is operating system independent, provides Python, C++ and Java support for all of its components, is flexible, highly scalable, supports multiple communication protocols, has a rich API, has a thriving community which contributes hundreds of device classes (most of your use cases might already have code written for it), support for building custom UIs using toolkits like Taurus, etc.
This session will delve into the following aspects:
- A brief look into the Tango toolkit (with a focus on why you might be interested in it)
- A high level overview of the design principles and what a 'device oriented' model means.
- Writing device servers and client applications in Python with PyTango (this is the primary focus of the talk)
- Using tools like Jive (to manage device servers), Taurus (for creating UIs), Pogo (code generator for creating device classes) to illustrate the ease of using the Tango toolkit.
- A PyTango use case example - the Health Monitor Server of the Italian Mars Society.
By the end of this talk, you would be able to appreciate the utility of the Tango toolkit and be able to decide if it fits your use case. More importantly, you will be in a position to write Python device server classes and client side code using PyTango. You will also have a brief idea of the design principles and how things work in practice.
Working with the Tango toolkit (PyTango to be specific) is a part of my GSoC project.
A basic working understanding of Python (Data Types and Structures, Classes, Methods, Loops) and a familiarity with Object Oriented Programming.
You will not be needing to know any of the above mentioned architectures like SCADA, DCS, etc. Tango is very generic and flexible.
Link to slide deck - Slides have been uploaded - they will be updated based on the comments if need be.
Tango - Wikipedia
Tango Control System - SourceForge
Tango Device Servers - SourceForge
Italian Mars Society - GitHub
Link to my GSoC blog and my project partner's
I am a passionate developer, currently working as a Google Summer of Code Student at the Python Software Foundation (PSF). I've previously worked with the LibreOffice foundation. I'm a CS dual degree student at IIIT Hyderabad and I just completed my junior year. Apart from that, I'll sometimes be found playing football.