diff --git a/tangostationcontrol/tangostationcontrol/beam/hba_tile.py b/tangostationcontrol/tangostationcontrol/beam/hba_tile.py index 14475cf2ab561db97801758e471d032e0894ec42..9ab46e5bf544f652ef5790188016c1a7fcf3c487 100644 --- a/tangostationcontrol/tangostationcontrol/beam/hba_tile.py +++ b/tangostationcontrol/tangostationcontrol/beam/hba_tile.py @@ -1,9 +1,6 @@ import numpy from math import sin, cos -# Number of antenna dipoles in each HBA tile -NUMBER_OF_ELEMENTS_PER_TILE = 16 - class HBATAntennaOffsets(object): """ This class helps calculate the absolute offsets of the antennas within a tile, diff --git a/tangostationcontrol/tangostationcontrol/common/constants.py b/tangostationcontrol/tangostationcontrol/common/constants.py index 912ef63f3bad4b9b8344ccc73955da7ee71d54fc..4e1891c507bc9fd5cb183089d82ac803cea34672 100644 --- a/tangostationcontrol/tangostationcontrol/common/constants.py +++ b/tangostationcontrol/tangostationcontrol/common/constants.py @@ -1,17 +1,12 @@ - -#TODO SDP TR_tod_R = attribute_wrapper(comms_annotation=["TR_tod_R"], datatype=numpy.int64, dims=(2,)) -#TODO statistics replicator_nof_bytes_sent_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "replicator", "parameter": "nof_bytes_sent"}, datatype=numpy.uint64) - - class constants: """ - For now this class assumes a 'LB' configuration TODO: support configurations A good source for a good chunk of the constants can be found here: https://support.astron.nl/confluence/display/L2M/L2+STAT+Decision%3A+SC+-+SDP+OPC-UA+interface """ + # TODO FIX # number of dual polarization antennas in the band. N_ant = 48 @@ -21,6 +16,7 @@ class constants: # number of polarisations per antenna (X and y polarisations) N_pol = 2 + # TODO FIX # Single polarization signal inputs ( N_ant * N_pol) S_ant = 96 @@ -59,8 +55,8 @@ class constants: # Maximum number of subbands we support N_sub = 512 - # Number of points of the FFT. - N_fft = N_sub * 2 + # Number of points per subband + N_fft = 1024 # Maximum array size to allocate for beam_device pointings, MAX_POINTINGS = 1024 @@ -69,7 +65,7 @@ class constants: PSOC_SOCKETS = 8 # main clock frequency of the subrack is 200MHz NOTE: type is a float here - clock_frequency = 200e6 + F_CLOCK = 200e6 # default subband we use because of its low RFI DEFAULT_SUBBAND = 102 @@ -77,28 +73,27 @@ class constants: # Maximum number of antenna inputs we support (used to determine array sizes) MAX_INPUTS = 192 - # max size for a statistic packet - MAX_PACKET_SIZE = 9000 - - # UNB2 constants # number of uniboards in a subrack - N_UNB = 2 + N_unb = 2 # number of FPGA's in a uniboard - N_FPGA = 4 + N_fpga = 4 # number of DDR modules per FPGA - N_DDR = 2 + N_ddr = 2 # number of QSFP tranceivers per uniboard - N_QSFP = 24 + N_qsfp = 24 + + # max size for a statistic packet + MAX_PACKET_SIZE = 9000 # Maximum number of supported simultaneous replicator clients - statistics_max_clients = 128 + MAX_STATISTICS_CLIENTS = 128 # maximum number of devices boot.py supports - boot_max_clients = 128 + MAX_BOOT_DEVICES = 128 # The default polling period for polled attributes - default_polling_period = 1000 + DEFAULT_POLLING_PERIOD = 1000 """ These classes for now exist for future use diff --git a/tangostationcontrol/tangostationcontrol/devices/apsct.py b/tangostationcontrol/tangostationcontrol/devices/apsct.py index 983db98bfaba9d9c864587380055955f6eff8978..72bd74350520ad022940da36d83b70dce3fd97b2 100644 --- a/tangostationcontrol/tangostationcontrol/devices/apsct.py +++ b/tangostationcontrol/tangostationcontrol/devices/apsct.py @@ -102,7 +102,7 @@ class APSCT(opcua_device): self.read_attribute("APSCT_PLL_160MHz_locked_R") and self.read_attribute("APSCT_PLL_160MHz_error_R")] return any(errors) - APSCT_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.default_polling_period) + APSCT_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.DEFAULT_POLLING_PERIOD) APSCT_VOUT_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed") def read_APSCT_TEMP_error_R(self): diff --git a/tangostationcontrol/tangostationcontrol/devices/apspu.py b/tangostationcontrol/tangostationcontrol/devices/apspu.py index 142a689b5a1a33f737eefc340846affb333c286d..8c18ce5c42707ac9aec0e03335366fe3f097e98e 100644 --- a/tangostationcontrol/tangostationcontrol/devices/apspu.py +++ b/tangostationcontrol/tangostationcontrol/devices/apspu.py @@ -78,7 +78,7 @@ class APSPU(opcua_device): or self.alarm_val("APSPU_FAN3_RPM_R")) APSPU_IOUT_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed") - APSPU_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.default_polling_period) + APSPU_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.DEFAULT_POLLING_PERIOD) APSPU_VOUT_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed") def read_APSPU_IOUT_error_R(self): diff --git a/tangostationcontrol/tangostationcontrol/devices/boot.py b/tangostationcontrol/tangostationcontrol/devices/boot.py index e620fc7ce06b1bcba51098e4d76883568658e0a9..338d88cd2e8bca397c6fdfba9c258dc85f668a2f 100644 --- a/tangostationcontrol/tangostationcontrol/devices/boot.py +++ b/tangostationcontrol/tangostationcontrol/devices/boot.py @@ -261,8 +261,8 @@ class Boot(lofar_device): booting_R = attribute(dtype=bool, access=AttrWriteType.READ, fget=lambda self: self.initialiser.is_running(), doc="Whether booting is in progress.") progress_R = attribute(dtype=numpy.int32, access=AttrWriteType.READ, fget=lambda self: numpy.int32(self.initialiser.progress), doc="Percentage of devices that was initialised") status_R = attribute(dtype=str, access=AttrWriteType.READ, fget=lambda self: self.initialiser.status, doc="Description of current boot activity") - initialised_devices_R = attribute(dtype=(str,), max_dim_x=constants.boot_max_clients, access=AttrWriteType.READ, fget=lambda self: [name for name,initialised in self.initialiser.device_initialised.items() if initialised], doc="Which devices were initialised succesfully") - uninitialised_devices_R = attribute(dtype=(str,), max_dim_x=constants.boot_max_clients, access=AttrWriteType.READ, fget=lambda self: [name for name,initialised in self.initialiser.device_initialised.items() if not initialised], doc="Which devices have not been initialised or failed to initialise") + initialised_devices_R = attribute(dtype=(str,), max_dim_x=constants.MAX_BOOT_DEVICES, access=AttrWriteType.READ, fget=lambda self: [name for name, initialised in self.initialiser.device_initialised.items() if initialised], doc="Which devices were initialised succesfully") + uninitialised_devices_R = attribute(dtype=(str,), max_dim_x=constants.MAX_BOOT_DEVICES, access=AttrWriteType.READ, fget=lambda self: [name for name, initialised in self.initialiser.device_initialised.items() if not initialised], doc="Which devices have not been initialised or failed to initialise") # -------- # overloaded functions diff --git a/tangostationcontrol/tangostationcontrol/devices/ccd.py b/tangostationcontrol/tangostationcontrol/devices/ccd.py index 2650fd721b36b9a764b3d007d5e64fac6091d6b7..4d0c12c1b5dd4e247a93c929bf074c7f2b14f117 100644 --- a/tangostationcontrol/tangostationcontrol/devices/ccd.py +++ b/tangostationcontrol/tangostationcontrol/devices/ccd.py @@ -92,7 +92,7 @@ class CCD(opcua_device): not self.read_attribute("CCD_PLL_locked_R")] return any(errors) - CCD_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.default_polling_period) + CCD_TEMP_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed", polling_period=constants.DEFAULT_POLLING_PERIOD) CCD_VOUT_error_R = attribute(dtype=bool, fisallowed="is_attribute_access_allowed") def read_CCD_TEMP_error_R(self): diff --git a/tangostationcontrol/tangostationcontrol/devices/observation.py b/tangostationcontrol/tangostationcontrol/devices/observation.py index 843b5d0447e6ea32a0485131003c1d7584729d91..1d506f92f4fcffb472d57cf809ca602dffa6ec96 100644 --- a/tangostationcontrol/tangostationcontrol/devices/observation.py +++ b/tangostationcontrol/tangostationcontrol/devices/observation.py @@ -43,7 +43,7 @@ class Observation(lofar_device): # Attributes - observation_running_R = attribute(dtype=numpy.float64, access=AttrWriteType.READ, polling_period=constants.default_polling_period, period=constants.default_polling_period, + observation_running_R = attribute(dtype=numpy.float64, access=AttrWriteType.READ, polling_period=constants.DEFAULT_POLLING_PERIOD, period=constants.DEFAULT_POLLING_PERIOD, rel_change="1.0") observation_id_R = attribute(dtype=numpy.int64, access=AttrWriteType.READ) stop_time_R = attribute(dtype=numpy.float64, access=AttrWriteType.READ) diff --git a/tangostationcontrol/tangostationcontrol/devices/recv.py b/tangostationcontrol/tangostationcontrol/devices/recv.py index d6eded6d1af51e97e5a955aee0133e67d7e68c28..e2af04031106819c05fd6d6009c4d2061ea0b1b9 100644 --- a/tangostationcontrol/tangostationcontrol/devices/recv.py +++ b/tangostationcontrol/tangostationcontrol/devices/recv.py @@ -208,7 +208,7 @@ class RECV(opcua_device): ) RECV_IOUT_error_R = attribute(dtype=(bool,), max_dim_x=S_ant, fisallowed="is_attribute_access_allowed") - RECV_TEMP_error_R = attribute(dtype=(bool,), max_dim_x=N_rcu, fisallowed="is_attribute_access_allowed", polling_period=constants.default_polling_period) + RECV_TEMP_error_R = attribute(dtype=(bool,), max_dim_x=N_rcu, fisallowed="is_attribute_access_allowed", polling_period=constants.DEFAULT_POLLING_PERIOD) RECV_VOUT_error_R = attribute(dtype=(bool,), max_dim_x=N_rcu, fisallowed="is_attribute_access_allowed") def read_RECV_IOUT_error_R(self): diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py index 635438b6252a3baa1e369e741ac98affed07eb21..ac8401d400d25ada81a2a0e161aee6a8e24eaef7 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py @@ -77,10 +77,10 @@ class DigitalBeam(beam_device): dtype=numpy.float64, fget=lambda self: self._delays.statistics["last"] or 0) input_select_RW = attribute(doc='Selection of inputs to use for forming each beamlet. Allows selecting broken antennas.', - dtype=((bool,),), max_dim_x=constants.N_beamlets_ctrl, max_dim_y=constants.S_ant, access=AttrWriteType.READ_WRITE, fisallowed="is_attribute_access_allowed") + dtype=((bool,),), max_dim_x=constants.N_beamlets_ctrl, max_dim_y=constants.MAX_INPUTS, access=AttrWriteType.READ_WRITE, fisallowed="is_attribute_access_allowed") antenna_select_RW = attribute(doc='Selection of antennas desired to use for forming each beamlet (= a subset of input_select of the configured antennas). Unselects broken antennas.', - dtype=((bool,),), max_dim_x=constants.N_beamlets_ctrl, max_dim_y=constants.S_ant, access=AttrWriteType.READ_WRITE, fisallowed="is_attribute_access_allowed") + dtype=((bool,),), max_dim_x=constants.N_beamlets_ctrl, max_dim_y=constants.MAX_INPUTS, access=AttrWriteType.READ_WRITE, fisallowed="is_attribute_access_allowed") nr_inputs_R = attribute(doc='Number of configured inputs from the associated antenna field.', dtype=numpy.uint32, fget="nr_inputs") @@ -175,7 +175,7 @@ class DigitalBeam(beam_device): Returns delays[antenna][beamlet] """ - delays = numpy.zeros((self.MAX_INPUTS, constants.N_beamlets_ctrl), dtype=numpy.float64) + delays = numpy.zeros((constants.MAX_INPUTS, constants.N_beamlets_ctrl), dtype=numpy.float64) d = self.delay_calculator d.set_measure_time(timestamp) diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/sdp.py b/tangostationcontrol/tangostationcontrol/devices/sdp/sdp.py index d8fa0298077bbded02ef19a4ee50723a3ebbeb62..def422eb51f67c9ce052356afc48ed4c1fd9644d 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/sdp.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/sdp.py @@ -76,7 +76,7 @@ class SDP(opcua_device): dtype='DevVarDoubleArray', mandatory=False, # Emit a signal on subband 102 - default_value=[[constants.DEFAULT_SUBBAND * constants.clock_frequency/1024] * S_pn] * N_pn + default_value=[[constants.DEFAULT_SUBBAND * constants.F_CLOCK / 1024] * S_pn] * N_pn ) FPGA_wg_phase_RW_default = device_property( @@ -106,7 +106,7 @@ class SDP(opcua_device): clock_RW_default = device_property( dtype='DevULong', mandatory=False, - default_value = int(constants.clock_frequency) + default_value = int(constants.F_CLOCK) ) TRANSLATOR_DEFAULT_SETTINGS = [ @@ -192,10 +192,10 @@ class SDP(opcua_device): dtype=str, fget=lambda self: self.AntennaType) nyquist_zone_R = attribute(doc='Nyquist zone of the input frequencies', dtype=numpy.uint32, fisallowed="is_attribute_access_allowed", - polling_period=constants.default_polling_period, abs_change=1) + polling_period=constants.DEFAULT_POLLING_PERIOD, abs_change=1) clock_RW = attribute(doc='Configured sampling clock (Hz)', dtype=numpy.uint32, access=AttrWriteType.READ_WRITE, fisallowed="is_attribute_access_allowed", - polling_period=constants.default_polling_period, abs_change=1) + polling_period=constants.DEFAULT_POLLING_PERIOD, abs_change=1) def _nyquist_zone(self, clock): """ Return the Nyquist zone for the given clock (in Hz). diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/statistics.py b/tangostationcontrol/tangostationcontrol/devices/sdp/statistics.py index 315a52ded2fcc3942486e5ce257c050a46480ea0..89da1c4f4362a605185f9b47558696e3f7d74a24 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/statistics.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/statistics.py @@ -72,7 +72,7 @@ class Statistics(opcua_device): queue_collector_fill_percentage_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "queue", "parameter": "collector_fill_percentage"}, datatype=numpy.uint64) queue_replicator_fill_percentage_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "queue", "parameter": "replicator_fill_percentage"}, datatype=numpy.uint64) - replicator_clients_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "replicator", "parameter": "clients"}, dims=(constants.statistics_max_clients,), datatype=str) + replicator_clients_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "replicator", "parameter": "clients"}, dims=(constants.MAX_STATISTICS_CLIENTS,), datatype=str) replicator_nof_bytes_sent_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "replicator", "parameter": "nof_bytes_sent"}, datatype=numpy.uint64) replicator_nof_packets_sent_R = attribute_wrapper(comms_id=StatisticsClient, comms_annotation={"type": "replicator", "parameter": "nof_packets_sent"}, datatype=numpy.uint64) diff --git a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py index 4c0c631d2a707250f61a463d4e8376262e716716..0a8d067d233cbb55d20f33a4e19da461a9a79b16 100644 --- a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py +++ b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py @@ -122,7 +122,7 @@ class TemperatureManager(lofar_device): dev_attr.proxy.unsubscribe_event(dev_attr.subscription_id) del dev_attr - is_alarming_R = attribute(dtype=bool, polling_period=constants.default_polling_period, fisallowed="is_attribute_access_allowed") + is_alarming_R = attribute(dtype=bool, polling_period=constants.DEFAULT_POLLING_PERIOD, fisallowed="is_attribute_access_allowed") def read_is_alarming_R(self): # return whether any of the devices are alarming diff --git a/tangostationcontrol/tangostationcontrol/devices/unb2.py b/tangostationcontrol/tangostationcontrol/devices/unb2.py index 61136b62103a77ee2e83fb4b92ef042ba9df054a..66ae6cc3775a70d16a0df3242a75d01f0a1a3f48 100644 --- a/tangostationcontrol/tangostationcontrol/devices/unb2.py +++ b/tangostationcontrol/tangostationcontrol/devices/unb2.py @@ -32,10 +32,10 @@ __all__ = ["UNB2", "main"] class UNB2(opcua_device): # redeclared commonly used constants for convenience - N_UNB = constants.N_UNB - N_FPGA = constants.N_FPGA - N_DDR = constants.N_DDR - N_QSFP = constants.N_QSFP + N_unb = constants.N_unb + N_fpga = constants.N_fpga + N_ddr = constants.N_ddr + N_qsfp = constants.N_qsfp # ----------------- # Device Properties @@ -44,7 +44,7 @@ class UNB2(opcua_device): UNB2_mask_RW_default = device_property( dtype='DevVarBooleanArray', mandatory=False, - default_value=[True] * N_UNB + default_value=[True] * N_unb ) UNB2TR_monitor_rate_RW_default = device_property( @@ -71,65 +71,65 @@ class UNB2(opcua_device): 'UNB2TR_monitor_rate_RW' ] - UNB2TR_I2C_bus_DDR4_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_DDR4_error_R"],datatype=numpy.int64 , dims=(N_UNB,N_FPGA)) - UNB2TR_I2C_bus_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_error_R" ],datatype=numpy.int64 , dims=(N_UNB,)) - UNB2TR_I2C_bus_FPGA_PS_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_FPGA_PS_error_R"],datatype=numpy.int64 , dims=(N_UNB,N_FPGA)) - UNB2TR_I2C_bus_PS_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_PS_error_R" ],datatype=numpy.int64 , dims=(N_UNB,)) - UNB2TR_I2C_bus_QSFP_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_QSFP_error_R"],datatype=numpy.int64 , dims=(N_UNB,N_QSFP)) + UNB2TR_I2C_bus_DDR4_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_DDR4_error_R"], datatype=numpy.int64, dims=(N_unb, N_fpga)) + UNB2TR_I2C_bus_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_error_R" ], datatype=numpy.int64, dims=(N_unb,)) + UNB2TR_I2C_bus_FPGA_PS_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_FPGA_PS_error_R"], datatype=numpy.int64, dims=(N_unb, N_fpga)) + UNB2TR_I2C_bus_PS_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_PS_error_R" ], datatype=numpy.int64, dims=(N_unb,)) + UNB2TR_I2C_bus_QSFP_error_R = attribute_wrapper(comms_annotation=["UNB2TR_I2C_bus_QSFP_error_R"], datatype=numpy.int64, dims=(N_unb, N_qsfp)) UNB2TR_monitor_rate_RW = attribute_wrapper(comms_annotation=["UNB2TR_monitor_rate_RW" ],datatype=numpy.int64 , access=AttrWriteType.READ_WRITE) UNB2TR_translator_busy_R = attribute_wrapper(comms_annotation=["UNB2TR_translator_busy_R" ],datatype=bool) - UNB2_DC_DC_48V_12V_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_DC_DC_48V_12V_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_DC_DC_48V_12V_VIN_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_VIN_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_DC_DC_48V_12V_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_FPGA_DDR4_SLOT_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_DDR4_SLOT_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA * N_DDR)) - UNB2_FPGA_POL_CORE_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_CORE_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_CORE_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_ERAM_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_ERAM_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_ERAM_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_HGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_HGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_HGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_PGM_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_PGM_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_PGM_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_RXGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_IOUT_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_RXGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_RXGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_VOUT_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_TXGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_IOUT_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_TXGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_POL_TXGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_VOUT_R"],datatype=numpy.float64, dims=(N_UNB,N_FPGA)) - UNB2_FPGA_QSFP_CAGE_LOS_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_QSFP_CAGE_LOS_R" ],datatype=numpy.int64 , dims=(N_UNB,N_QSFP)) - UNB2_FPGA_QSFP_CAGE_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_QSFP_CAGE_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,N_QSFP)) - UNB2_Front_Panel_LED_colour_R = attribute_wrapper(comms_annotation=["UNB2_Front_Panel_LED_colour_R"],datatype=numpy.int64 , dims=(N_UNB,)) - UNB2_Front_Panel_LED_colour_RW = attribute_wrapper(comms_annotation=["UNB2_Front_Panel_LED_colour_RW"],datatype=numpy.int64 , dims=(N_UNB,), access=AttrWriteType.READ_WRITE) - UNB2_mask_RW = attribute_wrapper(comms_annotation=["UNB2_mask_RW" ],datatype=bool, dims=(N_UNB,), access=AttrWriteType.READ_WRITE) - UNB2_PCB_ID_R = attribute_wrapper(comms_annotation=["UNB2_PCB_ID_R" ],datatype=numpy.int64 , dims=(N_UNB,)) - UNB2_PCB_number_R = attribute_wrapper(comms_annotation=["UNB2_PCB_number_R" ],datatype=str , dims=(N_UNB,)) - UNB2_PCB_version_R = attribute_wrapper(comms_annotation=["UNB2_PCB_version_R" ],datatype=str , dims=(N_UNB,)) - UNB2_POL_CLOCK_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_CLOCK_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_CLOCK_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N01_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N01_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N01_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N23_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_IOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N23_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_TEMP_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_QSFP_N23_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_VOUT_R" ],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_1V2_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_IOUT_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_1V2_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_1V2_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_VOUT_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_PHY_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_IOUT_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_PHY_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_TEMP_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_POL_SWITCH_PHY_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_VOUT_R"],datatype=numpy.float64, dims=(N_UNB,)) - UNB2_PWR_on_R = attribute_wrapper(comms_annotation=["UNB2_PWR_on_R" ],datatype=bool, dims=(N_UNB,)) + UNB2_DC_DC_48V_12V_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_IOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_DC_DC_48V_12V_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_TEMP_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_DC_DC_48V_12V_VIN_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_VIN_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_DC_DC_48V_12V_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_DC_DC_48V_12V_VOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_FPGA_DDR4_SLOT_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_DDR4_SLOT_TEMP_R"], datatype=numpy.float64, dims=(N_unb, N_fpga * N_ddr)) + UNB2_FPGA_POL_CORE_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_IOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_CORE_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_TEMP_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_CORE_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_CORE_VOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_ERAM_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_IOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_ERAM_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_TEMP_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_ERAM_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_ERAM_VOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_HGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_IOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_HGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_TEMP_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_HGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_HGXB_VOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_PGM_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_IOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_PGM_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_TEMP_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_PGM_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_PGM_VOUT_R" ], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_RXGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_IOUT_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_RXGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_TEMP_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_RXGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_RXGXB_VOUT_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_TXGXB_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_IOUT_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_TXGXB_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_TEMP_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_POL_TXGXB_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_POL_TXGXB_VOUT_R"], datatype=numpy.float64, dims=(N_unb, N_fpga)) + UNB2_FPGA_QSFP_CAGE_LOS_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_QSFP_CAGE_LOS_R" ], datatype=numpy.int64, dims=(N_unb, N_qsfp)) + UNB2_FPGA_QSFP_CAGE_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_FPGA_QSFP_CAGE_TEMP_R"], datatype=numpy.float64, dims=(N_unb, N_qsfp)) + UNB2_Front_Panel_LED_colour_R = attribute_wrapper(comms_annotation=["UNB2_Front_Panel_LED_colour_R"], datatype=numpy.int64, dims=(N_unb,)) + UNB2_Front_Panel_LED_colour_RW = attribute_wrapper(comms_annotation=["UNB2_Front_Panel_LED_colour_RW"], datatype=numpy.int64, dims=(N_unb,), access=AttrWriteType.READ_WRITE) + UNB2_mask_RW = attribute_wrapper(comms_annotation=["UNB2_mask_RW" ], datatype=bool, dims=(N_unb,), access=AttrWriteType.READ_WRITE) + UNB2_PCB_ID_R = attribute_wrapper(comms_annotation=["UNB2_PCB_ID_R" ], datatype=numpy.int64, dims=(N_unb,)) + UNB2_PCB_number_R = attribute_wrapper(comms_annotation=["UNB2_PCB_number_R" ], datatype=str, dims=(N_unb,)) + UNB2_PCB_version_R = attribute_wrapper(comms_annotation=["UNB2_PCB_version_R" ], datatype=str, dims=(N_unb,)) + UNB2_POL_CLOCK_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_IOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_CLOCK_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_TEMP_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_CLOCK_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_CLOCK_VOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N01_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_IOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N01_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_TEMP_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N01_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N01_VOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N23_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_IOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N23_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_TEMP_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_QSFP_N23_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_QSFP_N23_VOUT_R" ], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_1V2_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_IOUT_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_1V2_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_TEMP_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_1V2_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_1V2_VOUT_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_PHY_IOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_IOUT_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_PHY_TEMP_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_TEMP_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_POL_SWITCH_PHY_VOUT_R = attribute_wrapper(comms_annotation=["UNB2_POL_SWITCH_PHY_VOUT_R"], datatype=numpy.float64, dims=(N_unb,)) + UNB2_PWR_on_R = attribute_wrapper(comms_annotation=["UNB2_PWR_on_R" ], datatype=bool, dims=(N_unb,)) # ---------- # Summarising Attributes # ---------- - UNB2_error_R = attribute(dtype=(bool,), max_dim_x=N_UNB, fisallowed="is_attribute_access_allowed") + UNB2_error_R = attribute(dtype=(bool,), max_dim_x=N_unb, fisallowed="is_attribute_access_allowed") def read_UNB2_error_R(self): return self.read_attribute("UNB2_mask_RW") & ( @@ -140,9 +140,9 @@ class UNB2(opcua_device): | (self.read_attribute("UNB2TR_I2C_bus_QSFP_error_R") > 0).any(axis=1) ) - UNB2_IOUT_error_R = attribute(dtype=(bool,), max_dim_x=N_UNB, fisallowed="is_attribute_access_allowed") - UNB2_TEMP_error_R = attribute(dtype=(bool,), max_dim_x=N_UNB, fisallowed="is_attribute_access_allowed", polling_period=constants.default_polling_period) - UNB2_VOUT_error_R = attribute(dtype=(bool,), max_dim_x=N_UNB, fisallowed="is_attribute_access_allowed") + UNB2_IOUT_error_R = attribute(dtype=(bool,), max_dim_x=N_unb, fisallowed="is_attribute_access_allowed") + UNB2_TEMP_error_R = attribute(dtype=(bool,), max_dim_x=N_unb, fisallowed="is_attribute_access_allowed", polling_period=constants.DEFAULT_POLLING_PERIOD) + UNB2_VOUT_error_R = attribute(dtype=(bool,), max_dim_x=N_unb, fisallowed="is_attribute_access_allowed") def read_UNB2_IOUT_error_R(self): return self.read_attribute("UNB2_mask_RW") & ( @@ -211,7 +211,7 @@ class UNB2(opcua_device): # Save actual mask values UNB2_mask = self.proxy.UNB2_mask_RW # Set the mask to all Trues - self.UNB2_mask_RW = [True] * constants.N_UNB + self.UNB2_mask_RW = [True] * constants.N_unb # Turn off the uniboards self.UNB2_off() self.wait_attribute("UNB2TR_translator_busy_R", False, self.UNB2_On_Off_timeout) diff --git a/tangostationcontrol/tangostationcontrol/test/clients/test_client.py b/tangostationcontrol/tangostationcontrol/test/clients/test_client.py index 4f3a0c5d2eda256bc089ebd58c4dbc587beb08cd..8bf63cd8dfe4f77938d5cdca5c037cb0b69d3791 100644 --- a/tangostationcontrol/tangostationcontrol/test/clients/test_client.py +++ b/tangostationcontrol/tangostationcontrol/test/clients/test_client.py @@ -11,7 +11,7 @@ logger = logging.getLogger() class test_client(CommClient): """ this class provides an example implementation of a comms_client. - Durirng initialisation it creates a correctly shaped zero filled value. on read that value is returned and on write its modified. + During initialisation it creates a correctly shaped zero filled value. on read that value is returned and on write its modified. """ def start(self):