def _read_spectrum_data(self): usb_speed = self._usb_speed # Only query the value if there is no cached value if usb_speed is None: usb_speed = self.usb_speed n_packets, packet_length = (8, 512) if usb_speed == 'high' else (64, 64) # Assign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x82) data = '' for i in range(n_packets): data += vpp43.read(self._vi, packet_length) # Read sync packet to check if properly synchronized sync_byte = vpp43.read(self._vi, 1) if sync_byte != '\x69' or len(data) != 4096: raise visa.VisaIOError(OO_ERROR_SYNC) # Reassign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x81) spectrum = N.fromstring(data, N.dtype('<u2')) # Query and cache the saturation level if it is not cached if self._saturation_level is None: vpp43.write(self._vi, '\x05\x11') autonull_info = vpp43.read(self._vi, 17) self._saturation_level = ( 65536.0 / struct.unpack('<H', autonull_info[6:8])[0]) # Hmmm, it seems that this is an OceanOptics trick to sell # spectrometers with much less dynamic range than advertised! return spectrum * self._saturation_level
def _read_spectrum_data(self): # Assign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x82) data = '' for i in range(32): lsbs = vpp43.read(self._vi, 64) msbs = vpp43.read(self._vi, 64) # Mask MSB high bits - instrument has 12-bit A/D msbs = ''.join([chr(ord(byte) & 0x0F) for byte in msbs]) bs = bytearray(128) bs[::2] = lsbs bs[1::2] = msbs data += str(bs) # Read sync packet to check if properly synchronized sync_byte = vpp43.read(self._vi, 1) if sync_byte != '\x69' or len(data) != 4096: raise visa.VisaIOError(OO_ERROR_SYNC) # Reassign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x87) return N.fromstring(data, N.int16)
def _read_spectrum_data(self): usb_speed = self._usb_speed # Only query the value if there is no cached value if usb_speed is None: usb_speed = self.usb_speed n_packets, packet_length = (8, 512) if usb_speed == 'high' else (64, 64) # Assign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x82) data = '' for i in range(n_packets): data += vpp43.read(self._vi, packet_length) # Read sync packet to check if properly synchronized sync_byte = vpp43.read(self._vi, 1) if sync_byte != '\x69' or len(data) != 4096: raise visa.VisaIOError(OO_ERROR_SYNC) # Reassign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, 0x81) spectrum = N.fromstring(data, N.dtype('<u2')) # Query and cache the saturation level if it is not cached if self._saturation_level is None: vpp43.write(self._vi, '\x05\x11') autonull_info = vpp43.read(self._vi, 17) self._saturation_level = (65536.0 / struct.unpack('<H', autonull_info[6:8])[0]) # Hmmm, it seems that this is an OceanOptics trick to sell # spectrometers with much less dynamic range than advertised! return spectrum * self._saturation_level
def _open_serial_connection(self): logging.debug(__name__ + ":Opening serial connection") self._session = vpp43.open_default_resource_manager() self._vi = vpp43.open(self._session, self._address) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_BAUD, 115200) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_DATA_BITS, 8) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_STOP_BITS, vpp43.VI_ASRL_STOP_ONE) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_PARITY, vpp43.VI_ASRL_PAR_ODD) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_END_IN, vpp43.VI_ASRL_END_NONE)
def _open_serial_connection(self): logging.debug(__name__ + ':Opening serial connection') self._session = vpp43.open_default_resource_manager() self._vi = vpp43.open(self._session, self._address) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_BAUD, 115200) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_DATA_BITS, 8) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_STOP_BITS, vpp43.VI_ASRL_STOP_ONE) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_PARITY, vpp43.VI_ASRL_PAR_ODD) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_END_IN, vpp43.VI_ASRL_END_NONE)
def initPSU(): IPaddr = "192.168.6.6" defaultRm = vpp43.open_default_resource_manager() if defaultRm < VI_SUCCESS: print "status < VI_SUCCESS, quitting" quit() rsc = [] rsc.extend([] * 256) rsc = "TCPIP::192.168.6.6::2268::SOCKET" accessMode = VI_NO_LOCK timeout = 0 vi = vpp43.open(defaultRm, rsc, accessMode, timeout) vpp43.set_attribute(vi, VI_ATTR_TMO_VALUE, 10000) vpp43.set_attribute(vi, VI_ATTR_TERMCHAR_EN, VI_TRUE) setPSU(vi, 0, 0) return vi
def _open_serial_connection(self): ''' Opens the ASRL connection using vpp43 baud=9600, databits=8, stop=one, parity=none, no end char for reads Input: None Output: None ''' logging.debug(__name__ + ' : Opening serial connection') self._visa = visa.SerialInstrument(self._address, baud_rate=9600, data_bits=8, stop_bits=1, parity=visa.no_parity, term_chars="", send_end=False, chunk_size=8) vpp43.set_attribute(self._visa.vi, vpp43.VI_ATTR_ASRL_END_IN, vpp43.VI_ASRL_END_NONE)
def _open_serial_connection(self): ''' Opens the ASRL connection using vpp43 baud=115200, databits=8, stop=one, parity=odd, no end char for reads Input: None Output: None ''' logging.debug(__name__ + ' : Opening serial connection') self._session = vpp43.open_default_resource_manager() self._vi = vpp43.open(self._session, self._address) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_BAUD, 115200) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_DATA_BITS, 8) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_STOP_BITS, vpp43.VI_ASRL_STOP_ONE) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_PARITY, vpp43.VI_ASRL_PAR_ODD) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_END_IN, vpp43.VI_ASRL_END_NONE)
def _open_serial_connection(self): ''' Opens the ASRL connection using vpp43 baud=115200, databits=8, stop=one, parity=odd, no end char for reads Input: None Output: None ''' logging.debug('Opening serial connection') self._session = vpp43.open_default_resource_manager() self._vi = vpp43.open(self._session, self._address) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_BAUD, 115200) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_DATA_BITS, 8) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_STOP_BITS, vpp43.VI_ASRL_STOP_ONE) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_PARITY, vpp43.VI_ASRL_PAR_ODD) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_ASRL_END_IN, vpp43.VI_ASRL_END_NONE)
def open(self): # Open instrument self._vi = vpp43.open(visa.resource_manager.session, self._resource_name) vpp43.set_attribute(self._vi, vpp43.VI_ATTR_TMO_VALUE, self._timeout) # Timeout value should always be higher than integration time # Assign endpoint vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_IN_PIPE, self._in_pipe) vpp43.set_attribute(self._vi, VI_ATTR_USB_BULK_OUT_PIPE, self._out_pipe) # Initialize vpp43.write(self._vi, '\x01') # Reset command