Blame view

instruments/HP53132A.py 2.99 KB
acf3be97d   bmarechal   add HP53132A support
1
2
3
4
  from abstract_instrument import abstract_instrument
  import socket
  
  #==============================================================================
792ebb982   bmarechal   -
5
6
  ALL_VAL_TYPE = ['FREQ']  #, 'PERIOD']
  ALL_CHANNELS = ['1'] #, '2']
acf3be97d   bmarechal   add HP53132A support
7

9058343c5   bmarechal   some minor fixes
8
  ADDRESS = "192.168.0.52"
792ebb982   bmarechal   -
9
  CONF_VAL_TYPE = ['CONF:FREQ'] #, 'CONF:PERIOD']
acf3be97d   bmarechal   add HP53132A support
10
11
12
13
  
  #==============================================================================
  
  class HP53132A(abstract_instrument):
348049517   bmarechal   replace 4 spaces ...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  	def __init__(self, channels, vtypes, address):
  		self.address = address
  		self.port = 1234
  		self.gpib_addr = 12
  		self.channels = channels
  		self.vtypes = vtypes
  
  	def model(self):
  		#self.send("*IDN?")
  		#return self.read()
  		return "HP53132A"
  
  	def connect(self):
  		print('Connecting to device @%s:%s...' %(self.address, self.port))
  		self.sock = socket.socket(socket.AF_INET,
  							 socket.SOCK_STREAM,
  							 socket.IPPROTO_TCP)
  		self.sock.settimeout(10.0)	# Don't hang around forever
  		self.sock.connect((self.address, self.port))
  		self.init_prologix()
  		print('  --> Ok')
  		print(self.model())
  		self.configure()
  
  	def configure(self):
  		#self.strCh = ''
  		#for ch in self.channels:
  		#	self.send('%s (@%s)'%(CONF_VAL_TYPE[ALL_VAL_TYPE.index(self.vtypes[self.channels.index(ch)])], ch))
  		#	self.strCh = self.strCh + '(@%s),'%ch
  		#self.strCh = self.strCh[0:-1]
  		#self.send('FORMAT ASCII')
  
  		#self.send('ROUT:SCAN (@%s)'%self.strCh)
  		#self.send('TRIG:COUN 1')
  		self.send('*RST')
  		#self.send('*CLS')
  		#self.send('*SRE 0')
  		#self.send('*ESE 0')
  
  		self.send(':FUNC "FREQ 1"')
  		self.send(':FREQ:ARM:STAR:SOUR IMM')
  		self.send(':FREQ:ARM:STOP:SOUR TIM')
  		self.send(':FREQ:ARM:STOP:TIM 1')
  		self.send(':ROSC:SOUR EXT')
  		self.send(':ROSC:EXT:CHECK OFF')
  		#self.send(':STAT:PRES')
  		self.send(':INIT:CONT ON')
  
  	def getValue(self):
  		self.send('FETC?')
  		#self.send('READ:FREQ?')
  		return self.read()
  
  	def read(self):
  		self.send("++read eoi")
  		ans = ''
  		nb_data_list = []
  		nb_data = ''
  		try:
  			while ans != '
  ':
  				ans = self.sock.recv(1)
  				nb_data_list.append(ans) # Return the number of data
  			list_size = len(nb_data_list)
  			for j in range (0, list_size):
  				nb_data = nb_data+nb_data_list[j]
  			return nb_data
  		except socket.timeout:
  			print "Socket timeout error when reading."
  			raise
  
  	def disconnect(self):
  		self.send('*RST')
  		self.sock.close()
  
  	def send(self, command):
  		self.sock.send("%s
  "%command)
  
  	def init_prologix(self):
  		try:
  			self.sock.send("++mode 1
  ") # Set mode as CONTROLLER
  			self.sock.send('++addr ' + str(self.gpib_addr) + '
  ') # Set the GPIB address
  			self.sock.send('++eos 3
  ') # Set end-of-send character to nothing
  			self.sock.send("++eoi 1
  ") # Assert EOI with last byte to indicate end
  			self.sock.send("++read_tmo_ms 2750
  ") # Set read timeout
  			self.sock.send("++auto 0
  ") # Turn off read-after-write to avoid
  								# "Query Unterminated" errors
  
  		except self.socket.timeout:
  			print "Socket timeout"
  			raise
  		except self.socket.error as er:
  			print "Socket error: " + str(er)
  			raise
  		except Exception as er:
  			print "Unexpected error: " + str(er)
  			raise