External-Facing Devices
These will interact with higher levels of the SKA control system (i.e. Low.CSP) All require the SKA LMC base classes, which will be installed into the Docker image as part of the build process.
LowCbfController
The sub-element controller is the primary point of control and coordination for general operations from CSP_Low.LMC.
In the future (not yet implemented): * Controller will subscribe to attributes of the internal Allocator device, and split them out into simpler attributes that can be consumed by Taranta Dashboards. * Controller will compare the state of Processors published by the Allocator to their actual state to give a measure of their “health”
LowCbfSubarray
A Low.CBF subarray represents grouping of input signal data streams (from SPS), and controls Low.CBF’s processing of those signals to generate desired visibility and beam outputs.
The subarray device implements the SKA obsstate state machine but delegates the remainder of most requests it receives to the Allocator device which coordinates access to shared hardware.
There will be 16 instances of the subarray Tango device, inclusive of any engineering subarrays.
Attribute/Command list
Subarray device Tango attributes
- LowCbfSubarray.adminMode()
Read the Admin Mode of the device.
It may interpret the current device condition and condition of all managed devices to set this. Most possibly an aggregate attribute.
- Return type:
AdminMode- Returns:
Admin Mode of the device
- LowCbfSubarray.assigned_processors()
Get a list of processors assigned to the subarray.
- Return type:
- Returns:
JSON string, a list of processor serial numbers
- LowCbfSubarray.delaysValid()
Get per-subarray delay polynomial validity value.
Legal values are:
0 - INVALID
1 - VALID
2 - UNUSED
- Returns:
delay validity status as integer
- Return type:
DevUShort
- LowCbfSubarray.processorsReadyPercent()
Get a percentage of processors ready for subarray scan.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pstJonesAppliedPercent()
Get a percentage of PST Jones applied.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pssJonesAppliedPercent()
Get a percentage of PSS Jones applied.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pstJonesAge()
Get the age of latest PST Jones applied.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
age: age of the PST Jones Matrix
time: float
quality: AttrQuality
- LowCbfSubarray.pssJonesAge()
Get the age of latest PSS Jones applied.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
age: age of the PST Jones Matrix
time: float
quality: AttrQuality
- LowCbfSubarray.processorEthernetLockedPercent()
Get a percentage of Ethernet ports (processor/switch) ready for scan.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pssBeams()
Return the
pssBeamsattribute.- Return type:
- LowCbfSubarray.pstBeams()
Return the
pstBeamsattribute.- Return type:
- LowCbfSubarray.sps_archive_interval()
Set/get archive interval (1 in N updates)
- Return type:
- LowCbfSubarray.sps_beam_freqs()
- Return type:
- Returns:
beam/freq order used for SPS stats
- LowCbfSubarray.sps_station_substations()
Return station/substation order used for SPS stats
- Return type:
- LowCbfSubarray.sps_stats_flag_percent()
Return latest SPS flagging statistics
- Returns:
2D array (stations * channels) of
np.uint8; range: [0, 100]%, 255 if no data
- LowCbfSubarray.sps_stats_rms_xpol()
Return latest SPS X-polarisation RMS statistics
- Returns:
2D array (stations * channels) of
np.uint8
- LowCbfSubarray.sps_stats_rms_ypol()
Return latest SPS Y-polarisation RMS statistics
- Returns:
2D array (stations * channels) of
np.uint8
- LowCbfSubarray.stationBeams()
Return the
stationBeamsattribute.- Return type:
- LowCbfSubarray.stations()
Report
station&substationmembership in subarray- Return type:
- LowCbfSubarray.write_adminMode(value)[source]
Set the Admin Mode of the device. Overide of ska-tango-base to prevent being set offline while resourced
- Parameters:
value (
AdminMode) – Admin Mode of the device.- Raises:
ValueError – for unknown adminMode
- Return type:
- LowCbfSubarray.stationBeamDelayReadyPercent()
Get a percentage of station beam delay subscriptions ready for subarray scan.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pssBeamDelayReadyPercent()
Get a percentage of PSS beam delay subscriptions ready for for subarray scan.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.pstBeamDelayReadyPercent()
Get a percentage of PST beam delay subscriptions ready for for subarray scan.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
tuple[int,float,AttrQuality]- Returns:
tuple
percentage: rounded integer in the range [0, 100], None when ATTR_INVALID
time: float
quality: AttrQuality
- LowCbfSubarray.sdpHostsResolvedPercent()
Return percentage of SDP hosts resolved.
- LowCbfSubarray.pssHostsResolvedPercent()
Return the percentage of PSS hosts resolved.
- LowCbfSubarray.pstHostsResolvedPercent()
Return the percentage of PST hosts resolved.
- LowCbfSubarray.processorFpgaTemperatureMean()
Get the mean FPGA temperature across all assigned processors.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
- Returns:
tuple
value: mean temperature in degrees C
time: float
quality: AttrQuality
- LowCbfSubarray.processorFpgaPowerMean()
Get the mean FPGA power across all assigned processors.
The value is meaningful only when
obsStateis READY or SCANNING so we also return Tango attribute quality.- Return type:
- Returns:
tuple
value: mean power in Watts
time: float
quality: AttrQuality
Controller device Tango attributes
- LowCbfController.all_alveos()
Return JSON string listing all Alveos registered with Allocator.
- Return type:
- LowCbfController.available_alveos()
Return JSON string listing all available Alveos.
- Return type:
- LowCbfController.health_table()
Read FQDNs and health states of all monitored devices.
- Return type:
- Returns:
JSON string
- LowCbfController.read_searchBeamBandwidthMode()[source]
Search Beam Bandwidth Mode is configured at sub-element level and applies for all the instances of the Capability Search Beams in all sub-arrays.
Supported modes are listed and described in Table 9-9
TM can change the value of the parameter Search Beam Bandwidth Mode only when all the sub-arrays are IDLE.
- Return type:
SearchBeamBandwidthMode- Returns:
the searchBeamBandwidthMode attribute (SINGLE, DOUBLE)
- LowCbfController.subelementSubarrays()
List of Low.CBF SubArray TANGO Device names.
- LowCbfController.write_searchBeamBandwidthMode(value)[source]
Set the searchBeamBandwidthMode attribute.
- Parameters:
value (
SearchBeamBandwidthMode) – SINGLE, DOUBLE
- LowCbfController.spsLinkUpPercent()
Return the quality attribute percent SPS.
Note that this quality attribute needs to be pulled by TMC. This is not automatically updated.
- Return type:
- LowCbfController.cbfPacketCorruptionRate()
Get the CBF Packet Corruption Rate.
This packet corruption rate is calculated as PCR = corrupted packets / received SPEAD packets Note that the number of packets counters are coded over 32 bits. This might provide erroneous values from time to time when they wrap around
When there are no Alveos assigned to any subarrays set the attribute quality to
ATTR_INVALID- Return type:
- LowCbfController.cbfPacketLossRate()
Get the CBF Packet Loss Rate.
This packet loss rate is calculated as PLR = absent SPEAD packets / received SPEAD packets Note that the number of packets counters are coded over 32 bits. This might provide erroneous values from time to time when they wrap around
When there are no Alveos assigned to any subarrays set the attribute quality to
ATTR_INVALID- Return type:
Internal Devices
These devices are not expected to directly interface with the wider control system.
LowCbfAllocator
The Allocator coordinates how hardware processing resources are shared between subarrays. Subarrays delegate most of the processing involved in their ConfigureScan requests to the Allocator. Allocator publishes two key attributes that other devices subscribe to: * internal_subarray provides information about every configured subarray. This info is needed by all processors to e.g determine destination addresses for beams or visibilties * internal_alveo is a JSON dictionary with Alveo serial numbers as keys, and values describing the desired internal state of every in-use Alveo All processor devices subscribe to the attributes and make best effort to conform themselves to the published state
Attribute/Command list
Allocator device Tango attributes
- LowCbfAllocator.alveo_firmware_image_names()
Read the firmware to run on each alveo.
- Return type:
- Returns:
JSON string - dict of alveo firmware entries
INTERNAL use only
- LowCbfAllocator.internalAlveoLimits()
Read the current override limits
- Return type:
- LowCbfAllocator.internal_alveo()
Get representation of internal state of all Processor devices that are configured with firmware (no firmware, no entry here)
- Return type:
- Returns:
JSON string containing a dictionary
key = alveo serial number;
value = dict containing keys
fw,regs.
fwvalue is a dict withpersonalityandurlkeys (each strings).INTERNAL use only
- LowCbfAllocator.internal_subarray()
Get representation of internal state of all configured subarrays (no configuration, no entry in dict)
- Return type:
- Returns:
JSON string containing a dictionary
key =
subarray_idnumbervalue = subarray definition (also a dict)
INTERNAL use only
- LowCbfAllocator.p4_stn_routes()
Get route info needed by P4 switches to route SPS packets
- Return type:
- Returns:
JSON string
- LowCbfAllocator.procDevFqdn()
Return a JSON string representation of dictionary mapping Alveo serial numbers to Tango device fqdn, e.g.
{ "XFL1XCRTUC22": "low-cbf/processor/0.0.0", "XFL1TJCHM3ON": "low-cbf/processor/0.0.1" }
- Return type:
- LowCbfAllocator.resourceTableP4()
Return the P4 resource table attribute.
- Return type:
- Returns:
JSON string
- LowCbfAllocator.sdp_routes()
Get list of SDP routes for each switch
- Return type:
- Returns:
JSON string dictionary
key = switch_id or “arp_rq”
value = routes or arp_list
- LowCbfAllocator.stats_alveo()
Get list of alveo statistics.
Return Alveo details, its usage by subarrays and any unused capacities that it may have.
- Return type:
- Returns:
JSON string containing a list of Alveo details
INTERNAL use only
- LowCbfAllocator.write_alveo_firmware_image_names(value)[source]
Set up or clear a firmware renaming for test
- LowCbfAllocator.write_internalAlveoLimits(limit_json)[source]
Expert level attribute: Change per-alveo allocation limits
Use empty dictionary to reset to defaults. EG current FPGA maximums are
{ "pst": { "vch": 900, # Virtual chans per pipeline (bf clock freq) "sps_ch": 1024, # SPS chan per pipeline (packetizer limit) }, "pss": { "vch": 960, # VCH per pipeline (intermittent fails @ 1020) "sps_ch": 128 # SPS chans per pipeline (packetizer limit) }, "vis": { "vch": 1024, # Virtual Channels into FPGA "hbm": 606, # VChans in one matrix correlator's (MxC) HBM "bli": 131328 # Baselines (=512*513/2) in one MxC } }
- Parameters:
limit_json –
limit dictionary as JSON.
INTERNAL use only
Allocator device Tango commands
- LowCbfAllocator.InternalRegisterAlveo(argin)
Called by Processors to register their presence.
arginSerial numbers and FQDN to register, JSON string, e.g.{ "serial": "A123", "fqdn": " "low-cbf/processor/0.1.0", "hardware": "u55c" # unused at present }
Return None
INTERNAL use only
- LowCbfAllocator.ReleaseAllCapabilities(argin)
Called by Subarrays to release all current “Capabilities”
arginstring ignored at present.Return informational text string.
- LowCbfAllocator.ReserveCapabilities(argin)
Called by Subarrays to request “Capabilities” (stations, PST/PSS beams, visibilities)
arginAllocation request, JSON stringReturn success/fail as JSON string
- LowCbfAllocator.RunScan(argin)
Called by Subarrays to start/stop their processors scanning.
arginJSON string, presently ignoredReturn informational text string.
- LowCbfAllocator.SubscribeToConnector()
Temporary method called to cause Allocator to subscribe to events from a Tango device that has attributes providing ARP reply info
arginA JSON string containing Tango device name and attribute name e.g.'{"dev": "low-cbf/connector/0", "attr": "sdp_arp_reply"}'
- LowCbfAllocator.UnsubscribeFromConnector()
Temporary method called to cause Allocator to unsubscribe from ARP events sent by connector
INTERNAL use only