Tracking with DishManager
DishManager has attributes and commands that provide functionality for tracking. DishManager does not do any complex conditioning, validation or caching of inputs related to tracking. Dish Structure Manager is a subcomponent of DishManager that is used for translating between OPCUA and Tango interfaces for the Dish Structure Controller. The main functionality of DishManager is to provide an interface to the Dish Structure Controller and aggregate states amongst subdevices to provide a global state of a dish.
The attributes related to tracking are:
trackTableLoadMode
This attribute is used in conjuntion with
programTrackTableto either load aNEWtrack table or load additional tables withAPPEND. When tables are loaded withNEW, thetrackTableCurrentIndexis reset to 0, the track table is loaded at beginning of the buffer andtrackTableEndIndexpoints to the last entry of the track table. When tables are loaded withAPPEND, one can expect thetrackTableEndIndexto increment with the number of points provided. The dish structure controller has a circular buffer of length 10000. The current index in the table, represented bytrackTableCurrentIndexchases the end index, represented bytrackTableEndIndexwhen tracking is active. One must be aware of this limitation to ensure that there is enough space for appending additional tables.programTrackTable
This attribute contains the timestamped points of desired azimuth and elevation that the dish structure controller will try to achieve. Note that the dish structure controller performs interpolation between track table points, hence it is not necessary to provide track tables with short time intervals between points unless agile maneuvering cannot be achieved.
achievedPointing
This is the actual azimuth and elevation achieved by the dish structure controller (timestamped).
trackTableCurrentIndex
The current position of the internal circular buffer of the dish structure controller. This index advances with time while tracking is active.
trackTableEndIndex
The end position of the internal circular buffer of the dish structure controller. This represents the last point loaded that should be tracked. The distance between the
trackTableCurrentIndexandtrackTableEndIndexrepresent the valid track table entries that shall be tracked when tracking is active. If the track table points are in the past when being processed (when tracking is active), then the points will be ignored and the next valid point will be used. The circular buffer size is defined as 10000. As the buffer type is circular, this maximum size is necessary to calculate the space available at any point in time in the buffer. The space available can be calculated as follows:if trackTableEndIndex == trackTableCurrentIndex: used_space = 0 else: used_space = (trackTableEndIndex - trackTableCurrentIndex) % 10000 + 1 space_available = 10000 - used_space
pointingState
This is the current pointing state:
READY: dish is not moving
SLEW: dish is moving to an initial target
TRACK: dish pointing error is within defined tracking tolerance
UNKNOWN: when not in above states
For details on pointing state see pointing state documentation.
Track()
This is the command to start tracking. There must be valid entries loaded into the track table for a track to start successfully. Once the entries are consumed in the track table, the dish stops tracking. If one wishes to maintain tracking state, the track table must be replenished with valid entries to track - valid in the sense that the timestamp is not in the past.
TrackStop()
This command is used to stop tracking.
Note
KAROO simulator: If one encounters an error when loading track tables, the client receives an exception with a failure message from the dish structure manager and the simulator. In most cases, it is likely that the track table buffer is full - this can be confirmed from the simulator logs. If a buffer overflow occurs while tracking, then the rate of track table loading is greater than the consumption. Note that due to computational jitter timing drift can result in supplying tables faster than they are consumed in long tracking operations. It is advised for the clients to monitor their lead time. The lead time for a track table is defined as the duration between when the track table is constructed to the start time of the track table block. The lead time should remain fairly constant. If the lead time drifts, it indicates that track tables are being supplied faster or slower than being consumed. On rare occasions, the error can also be caused by delays on the network traffic or some other unknown cause resulting in a timeout on the client side. The client should be able to retry loading the track table - a further intervention will be to increase the default client timeout value (3000ms) using set_timeout_millis(ms_value).
In the KAROO simulator, expired track table entries are only skipped over while tracking is active i.e. one can fill the buffer with invalid/expired entries and cause a buffer overflow. It is only while tracking is active that the internal buffer is consumed (and discarded if expired) - there is no continuous supervision of the track table.