diff --git a/SDP/SDP/SDP.py b/SDP/SDP/SDP.py index 811acf57384f900db62005589c40167e7cc111a4..3515899a4cf3843252fb0b20f46d664373b7416f 100644 --- a/SDP/SDP/SDP.py +++ b/SDP/SDP/SDP.py @@ -94,15 +94,15 @@ class SDP(Device): access=AttrWriteType.READ_WRITE, ) - fpga_scrap_RW = attribute( + fpga_scrap_R = attribute( dtype = ('DevLong',), max_dim_x = 2048, - access=AttrWriteType.READ_WRITE, ) - fpga_scrap_R = attribute( + fpga_scrap_RW = attribute( dtype = ('DevLong',), max_dim_x = 2048, + access=AttrWriteType.READ_WRITE, ) fpga_status_R = attribute( @@ -120,6 +120,33 @@ class SDP(Device): max_dim_x = 16, ) + fpga_weights_R = attribute( + dtype = (('DevShort',),), + max_dim_x = 12 * 488 * 2, max_dim_y = 16, + ) + + fpga_weights_RW = attribute( + dtype = (('DevShort',),), + max_dim_x = 12 * 488 * 2, max_dim_y = 16, + access=AttrWriteType.READ_WRITE, + ) + + sdp_info_R = attribute( + dtype = ('DevString',), + ) + + tod_R = attribute( + dtype = ('DevString',), + ) + + translator_network_R = attribute( + dtype = ('DevString',), + ) + + translator_timing_R = attribute( + dtype = ('DevString',), + ) + # --------------- # General methods @@ -150,11 +177,17 @@ class SDP(Device): self.info_stream("Mapping OPC-UA MP/CP to attributes...") self.attribute_mapping["fpga_mask_RW"] = self.get_node("fpga_mask_RW") - self.attribute_mapping["fpga_scrap_RW"] = self.get_node("fpga_scrap_RW") self.attribute_mapping["fpga_scrap_R"] = self.get_node("fpga_scrap_R") + self.attribute_mapping["fpga_scrap_RW"] = self.get_node("fpga_scrap_RW") self.attribute_mapping["fpga_status_R"] = self.get_node("fpga_status_R") self.attribute_mapping["fpga_temp_R"] = self.get_node("fpga_temp_R") self.attribute_mapping["fpga_version_R"] = self.get_node("fpga_version_R") + self.attribute_mapping["fpga_weights_R"] = self.get_node("fpga_weights_R") + self.attribute_mapping["fpga_weights_RW"] = self.get_node("fpga_weights_RW") + self.attribute_mapping["sdp_info_R"] = self.get_node("sdp_info") + self.attribute_mapping["tod_R"] = self.get_node("tod") + self.attribute_mapping["translator_network_R"] = self.get_node("translator_network") + self.attribute_mapping["translator_timing_R"] = self.get_node("translator_timing") self.info_stream("Mapping OPC-UA MP/CP to attributes done.") @@ -178,16 +211,28 @@ class SDP(Device): # the mapping. self._fpga_mask_RW = numpy.full(16, False) self.attribute_mapping["fpga_mask_RW"] = {} - self._fpga_scrap_RW = numpy.full(2048, False) - self.attribute_mapping["fpga_scrap_RW"] = {} self._fpga_scrap_R = numpy.full(2048, False) self.attribute_mapping["fpga_scrap_R"] = {} + self._fpga_scrap_RW = numpy.full(2048, False) + self.attribute_mapping["fpga_scrap_RW"] = {} self._fpga_status_R = numpy.full(16, False) self.attribute_mapping["fpga_status_R"] = {} self._fpga_temp_R = numpy.full(16, 0.0) self.attribute_mapping["fpga_temp_R"] = {} self._fpga_version_R = numpy.full(16, "NO_VERSION_INFO_YET") self.attribute_mapping["fpga_version_R"] = {} + self._fpga_weights_R = numpy.full((16, 2 * 488 * 12), 0) + self.attribute_mapping["fpga_weights_R"] = {} + self._fpga_weights_RW = numpy.full((16, 2 * 488 * 12), 0) + self.attribute_mapping["fpga_weights_RW"] = {} + self._sdp_info_R = "NOT_INITIALISED" + self.attribute_mapping["sdp_info_R"] = {} + self._tod_R = "NOT_INITIALISED" + self.attribute_mapping["tod_R"] = {} + self._translator_network_R = "NOT_INITIALISED" + self.attribute_mapping["translator_network_R"] = {} + self._translator_timing_R = "NOT_INITIALISED" + self.attribute_mapping["translator_timing_R"] = {} # Init the dict that contains function to OPC-UA function mappings. self.function_mapping = {} @@ -265,9 +310,7 @@ class SDP(Device): @fault_on_error def read_fpga_scrap_R(self): """Return the fpga_scrap_R attribute.""" - value = numpy.array(numpy.split(self.attribute_mapping["fpga_scrap_R"].get_data_value().Value.Value, indices_or_sections = 16)) - value_tuples = numpy.array(numpy.split(value, indices_or_sections = 2)) - self._fpga_scrap_R = value_tuples + self._fpga_scrap_R = numpy.array(numpy.split(self.attribute_mapping["fpga_scrap_R"].get_data_value().Value.Value, indices_or_sections = 16)) return self._fpga_scrap_R @only_when_on @@ -304,6 +347,55 @@ class SDP(Device): self._fpga_version_R = numpy.array(self.attribute_mapping["fpga_version_R"].get_value()) return self._fpga_version_R + @only_when_on + @fault_on_error + def read_fpga_weights_R(self): + """Return the fpga_weights_R attribute.""" + value = numpy.array(numpy.split(self.attribute_mapping["fpga_weights_R"].get_value(), indices_or_sections = 16)) + self._fpga_weights_R = value + return self._fpga_weights_R + + @only_when_on + @fault_on_error + def read_fpga_weights_RW(self): + """Return the fpga_weights_RW attribute.""" + return self._fpga_weights_RW + + @only_when_on + @fault_on_error + def write_fpga_weights_RW(self, value): + """Return the fpga_weights_RW attribute.""" + self.attribute_mapping["fpga_weights_RW"].set_data_value(opcua.ua.uatypes.Variant(value = value.tolist(), varianttype=opcua.ua.VariantType.Int16)) + _fpga_weights_RW = value + + @only_when_on + @fault_on_error + def read_sdp_info_R(self): + """Return the sdp_info_R attribute.""" + self._sdp_info_R = self.attribute_mapping["sdp_info_R"].get_value() + return self._sdp_info_R + + @only_when_on + @fault_on_error + def read_sdp_tod_R(self): + """Return the sdp_tod_R attribute.""" + self._sdp_tod_R = self.attribute_mapping["sdp_tod_R"].get_value() + return self._sdp_tod_R + + @only_when_on + @fault_on_error + def read_translator_network_R(self): + """Return the _translator_network_R attribute.""" + self._translator_network_R = self.attribute_mapping["translator_network_R"].get_value() + return self._translator_network_R + + @only_when_on + @fault_on_error + def read_translator_timing_R(self): + """Return the _translator_timing_R attribute.""" + self._translator_timing_R = self.attribute_mapping["translator_timing_R"].get_value() + return self._translator_timing_R + # -------- # Commands