-
Notifications
You must be signed in to change notification settings - Fork 3
/
agilent_34401A_dmm.py
86 lines (72 loc) · 2.86 KB
/
agilent_34401A_dmm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
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
# Copyright (C) 2007 Matthew Neeley
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
### BEGIN NODE INFO
[info]
name = Agilent 34401A DMM
version = 1.3
description =
[startup]
cmdline = %PYTHON% %FILE%
timeout = 20
[shutdown]
message = 987654321
timeout = 20
### END NODE INFO
"""
from labrad.server import setting
import labrad.units as units
from labrad.gpib import GPIBManagedServer, GPIBDeviceWrapper
from twisted.internet.defer import inlineCallbacks, returnValue
class AgilentDMMServer(GPIBManagedServer):
name = 'Agilent 34401A DMM'
deviceName = 'HEWLETT-PACKARD 34401A'
@setting(10, AC='b{AC}', returns='v[V]')
def voltage(self, c, AC=False):
""" Measures voltage. Defaults to DC voltage, unless AC = True. """
dev = self.selectedDevice(c)
s = 'AC' if AC else 'DC'
ans = yield dev.query('MEAS:VOLT:%s?' % s)
returnValue(float(ans)*units.V)
@setting(11, AC = 'b', returns='v[A]')
def current(self, c, AC=False):
""" Measures current. Defaults to DC current, unless AC = True.
"""
dev = self.selectedDevice(c)
s = 'AC' if AC else 'DC'
ans = yield dev.query('MEAS:CURR:%s?' % s)
returnValue(float(ans)*units.A)
@setting(12, fourWire = 'b', returns='v[Ohm]')
def resistance(self, c, fourWire = False):
""" Measures resistance. Defaults to 2-wire measurement, unless fourWire = True. """
dev = self.selectedDevice(c)
ans = yield dev.query('MEAS:%s?' % ('FRES' if fourWire else 'RES'))
returnValue(float(ans)*units.Ohm)
@setting(13, vRange='v[V]', resolution ='v[V]')
def configure_voltage(self, c, vRange = 10, resolution = 0.0001):
""" Sets the DMM to voltage mode, with given range and resolution. """
dev = self.selectedDevice(c)
dev.write("CONF:VOLT:DC %s, %s" % (vRange, resolution))
@setting(14, returns='v[V]')
def read_voltage(self, c):
""" Does a 'READ' instead of 'MEAS'. Device must previously have been
set to voltage mode with configure_voltage. """
dev = self.selectedDevice(c)
ans = yield dev.query("READ?")
returnValue(float(ans)*units.V)
__server__ = AgilentDMMServer()
if __name__ == '__main__':
from labrad import util
util.runServer(__server__)