Hello everyone.
We discussed how to write distributed Device Servers with hundreds of attributes on ICALEPCS conference, but I also want to clarify some details and get more opinions and advice.
So, let me describe some examples of hardware that we have.
First example is a CAEN SY4527 crate with up to 16 different modules - different number of channels, output maximums, resolution, polarity, etc.
And we want at least read values from these modules and archive them.
If we have 32-channel module and about 10 different variables (Iset, Imon, Vset, Vmon …), there are about 320 scalar attributes for one Device Server.
How can I organize reading process from the crate and modules for better performance and to make it more Tango-ish way? Reading must be fast enought to detect changes, e.g. for Imon.
I’ve drawn three options (pictures 1, 2, 3) that came to my mind, can anyone comment every picture and help me choose the best way?
Another example - custom HV system, it’s distributed and has controller with only one active Socket connection and 48 modules connected to one RS-485 bus.
Every module has 16 channels with Vset and one status variable (in bits), which means I have to read the board 17 times to get all the data.
So there are more than 800 variables, which means >800 attributes. I think it’s to much for one DS.
Maybe it’s better to separate all modules to distinct DS, but we will have 2400 modules (50 controllers x 48 modules) for detector in total → 2400 device servers and 40k+ attributes only for one system!
The reading can be not so fast, but reasonable to have up-to-date values.
Pictures 4 and 5 are attached for this options.
I’m a bit confused with such numbers, because we used spectrum attributes for the same type of data, but it’s the waste of disk space and Tango was not designed to work like that.
Any thoughts, ideas, examples from your experience and comments are appreciated.