Commit 90e45ebe9dbf970c62e8a864a3462d161ea969d0

Authored by mer0m
Committed by GitHub
1 parent ccf79815aa
Exists in master

Add files via upload

Showing 8 changed files with 556 additions and 1 deletions Side-by-side Diff

instruments/AG34461A.py
  1 +from abstract_instrument import abstract_instrument
  2 +import socket
  3 +
  4 +#==============================================================================
  5 +
  6 +ALL_VAL_TYPE = "DCV, ACV, DCI, ACI, RES2W, RES4W, FREQ"
  7 +
  8 +#==============================================================================
  9 +
  10 +class AG34461A(abstract_instrument):
  11 + def __init__(self, adress="192.168.0.61", vtype="DCV"):
  12 + self.adress = adress
  13 + self.port = 5025
  14 + self.vtype = vtype
  15 +
  16 + def model(self):
  17 + self.send("*IDN?")
  18 + return self.read()
  19 +
  20 + def connect(self):
  21 + try:
  22 + print('Connecting to device @%s:%s...' %(self.adress, self.port))
  23 + self.sock = socket.socket(socket.AF_INET,
  24 + socket.SOCK_STREAM,
  25 + socket.IPPROTO_TCP)
  26 + self.sock.settimeout(10.0) # Don't hang around forever
  27 + self.sock.connect((self.adress, self.port))
  28 + print(' --> Ok')
  29 +
  30 + print(self.model())
  31 +
  32 + if self.vtype == "DCV":
  33 + self.send("CONF:VOLT:DC")
  34 + elif self.vtype == "ACV":
  35 + self.send("CONF:VOLT:AC")
  36 + elif self.vtype == "DCI":
  37 + self.send("CONF:CURR:DC")
  38 + elif self.vtype == "ACI":
  39 + self.send("CONF:CURR:AC")
  40 + elif self.vtype == "RES2W":
  41 + self.send("CONF:RES")
  42 + elif self.vtype == "RES4W":
  43 + self.send("CONF:FRES")
  44 + elif self.vtype == "FREQ":
  45 + self.send("CONF:FREQ")
  46 + else:
  47 + print("Wrong -v argument")
  48 + raise
  49 +
  50 + except socket.timeout:
  51 + print("Socket timeout error during connection.")
  52 + raise
  53 + except socket.error as er:
  54 + print("Socket error during connection: " + str(er))
  55 + raise
  56 + except Exception as er:
  57 + print("Unexpected error during connection: " + str(er))
  58 + raise
  59 +
  60 + def getValue(self):
  61 + self.send("READ?")
  62 + return self.read()
  63 +
  64 + def read(self):
  65 + ans = ''
  66 + nb_data_list = []
  67 + nb_data = ''
  68 + try:
  69 + while ans != '\n':
  70 + ans = self.sock.recv(1)
  71 + nb_data_list.append(ans) # Return the number of data
  72 + list_size = len(nb_data_list)
  73 + for j in range (0, list_size):
  74 + nb_data = nb_data+nb_data_list[j]
  75 + return nb_data
  76 + except socket.timeout:
  77 + print "Socket timeout error when reading."
  78 + raise
  79 +
  80 + def disconnect(self):
  81 + self.send('*RST')
  82 + self.sock.close()
  83 +
  84 + def send(self, command):
  85 + self.sock.send("%s\n"%command)
instruments/AG34972A.py
  1 +from abstract_instrument import abstract_instrument
  2 +import socket
  3 +
  4 +#==============================================================================
  5 +
  6 +ALL_VAL_TYPE = "DCV, ACV, DCI, ACI, RES2W, RES4W, FREQ"
  7 +
  8 +#==============================================================================
  9 +
  10 +class AG34972A(abstract_instrument):
  11 + def __init__(self, adress="192.168.0.72", vtype="DCV"):
  12 + self.adress = adress
  13 + self.port = 5025
  14 + self.vtype = vtype
  15 +
  16 + def model(self):
  17 + self.send("*IDN?")
  18 + return self.read()
  19 +
  20 + def connect(self):
  21 + try:
  22 + print('Connecting to device @%s:%s...' %(self.adress, self.port))
  23 + self.sock = socket.socket(socket.AF_INET,
  24 + socket.SOCK_STREAM,
  25 + socket.IPPROTO_TCP)
  26 + self.sock.settimeout(2.0) # Don't hang around forever
  27 + self.sock.connect((self.adress, self.port))
  28 + print(' --> Ok')
  29 +
  30 + print(self.model())
  31 +
  32 + if self.vtype == "DCV":
  33 + self.send("CONF:VOLT:DC (@102:103)")
  34 + elif self.vtype == "ACV":
  35 + self.send("CONF:VOLT:AC (@102:103)")
  36 + elif self.vtype == "DCI":
  37 + self.send("CONF:CURR:DC (@102:103)")
  38 + elif self.vtype == "ACI":
  39 + self.send("CONF:CURR:AC (@102:103)")
  40 + elif self.vtype == "RES2W":
  41 + self.send("CONF:RES (@102:103)")
  42 + elif self.vtype == "RES4W":
  43 + self.send("CONF:FRES (@102:103)")
  44 + elif self.vtype == "FREQ":
  45 + self.send("CONF:FREQ (@102:103)")
  46 + else:
  47 + print("Wrong -v argument")
  48 + raise
  49 +
  50 + except socket.timeout:
  51 + print("Socket timeout error during connection.")
  52 + raise
  53 + except socket.error as er:
  54 + print("Socket error during connection: " + str(er))
  55 + raise
  56 + except Exception as er:
  57 + print("Unexpected error during connection: " + str(er))
  58 + raise
  59 +
  60 + def getValue(self):
  61 + self.send("MEAS? AUTO,DEF,(@102:103)")
  62 + return self.read()
  63 +
  64 + def read(self):
  65 + ans = ''
  66 + nb_data_list = []
  67 + nb_data = ''
  68 + try:
  69 + while ans != '\n':
  70 + ans = self.sock.recv(1)
  71 + nb_data_list.append(ans) # Return the number of data
  72 + list_size = len(nb_data_list)
  73 + for j in range (0, list_size):
  74 + nb_data = nb_data+nb_data_list[j]
  75 + return nb_data
  76 + except socket.timeout:
  77 + print "Socket timeout error when reading."
  78 + raise
  79 +
  80 + def disconnect(self):
  81 + self.send('*RST')
  82 + self.sock.close()
  83 +
  84 + def send(self, command):
  85 + self.sock.send("%s\n"%command)
instruments/LS350.py
  1 +from abstract_instrument import abstract_instrument
  2 +import socket
  3 +
  4 +#==============================================================================
  5 +
  6 +ALL_VAL_TYPE = "TEMP, RES"
  7 +
  8 +#==============================================================================
  9 +
  10 +class LS350(abstract_instrument):
  11 + def __init__(self, adress="192.168.0.12", vtype="TEMP"):
  12 + self.adress = adress
  13 + self.port = 7777
  14 + self.vtype = vtype
  15 +
  16 + def model(self):
  17 + self.send("*IDN?")
  18 + return self.read()
  19 +
  20 + def connect(self):
  21 + try:
  22 + print('Connecting to device @%s:%s...' %(self.adress, self.port))
  23 + self.sock = socket.socket(socket.AF_INET,
  24 + socket.SOCK_STREAM,
  25 + socket.IPPROTO_TCP)
  26 + self.sock.settimeout(10.0) # Don't hang around forever
  27 + self.sock.connect((self.adress, self.port))
  28 + print(' --> Ok')
  29 +
  30 + print(self.model())
  31 +
  32 + if self.vtype == "TEMP":
  33 + 1
  34 + elif self.vtype == "RES":
  35 + 1
  36 + else:
  37 + print("Wrong -v argument")
  38 + raise
  39 +
  40 + except socket.timeout:
  41 + print("Socket timeout error during connection.")
  42 + raise
  43 + except socket.error as er:
  44 + print("Socket error during connection: " + str(er))
  45 + raise
  46 + except Exception as er:
  47 + print("Unexpected error during connection: " + str(er))
  48 + raise
  49 +
  50 + def getValue(self):
  51 + if self.vtype == 'TEMP':
  52 + self.send('krdg? a;krdg? b;krdg? c;krdg? d')
  53 + return self.read()
  54 + elif self.vtype == 'RES':
  55 + self.send('srdg? a;srdg? b;srdg? c;srdg? d')
  56 + return self.read()
  57 +
  58 + def read(self):
  59 + self.send("++read eoi")
  60 + ans = ''
  61 + nb_data_list = []
  62 + nb_data = ''
  63 + try:
  64 + while ans != '\n':
  65 + ans = self.sock.recv(1)
  66 + nb_data_list.append(ans) # Return the number of data
  67 + list_size = len(nb_data_list)
  68 + for j in range (0, list_size):
  69 + nb_data = nb_data+nb_data_list[j]
  70 + return nb_data
  71 + except socket.timeout:
  72 + print "Socket timeout error when reading."
  73 + raise
  74 +
  75 + def disconnect(self):
  76 + self.send('MODE0')
  77 + self.sock.close()
  78 +
  79 + def send(self, command):
  80 + self.sock.send("%s\n"%command)
instruments/PM100D.py
  1 +from abstract_instrument import abstract_instrument
  2 +import os
  3 +
  4 +#==============================================================================
  5 +
  6 +ALL_VAL_TYPE = "PWR"
  7 +
  8 +#==============================================================================
  9 +
  10 +class PM100D(abstract_instrument):
  11 + def __init__(self, adress="/dev/usbtmc0", vtype="PWR"):
  12 + self.adress = adress
  13 + self.vtype = vtype
  14 +
  15 + def model(self):
  16 + self.send("*IDN?")
  17 + return self.read()
  18 +
  19 + def connect(self):
  20 + try:
  21 + print('Connecting to device @%s...' %(self.adress))
  22 + self.FILE = os.open(self.adress, os.O_RDWR)
  23 + print(' --> Ok')
  24 +
  25 + print(self.model())
  26 +
  27 + if self.vtype == "PWR":
  28 + 1
  29 + else:
  30 + print("Wrong -v argument")
  31 + raise
  32 +
  33 + except Exception as er:
  34 + print("Unexpected error during connection: " + str(er))
  35 + raise
  36 +
  37 + def getValue(self):
  38 + self.send("READ?")
  39 + return self.read()
  40 +
  41 + def read(self):
  42 + return os.read(self.FILE, 300)
  43 +
  44 + def disconnect(self):
  45 + self.send('*RST')
  46 +
  47 + def send(self, command):
  48 + os.write(self.FILE, command)
instruments/T7Pro.py
  1 +from abstract_instrument import abstract_instrument
  2 +from labjack import ljm
  3 +import numpy
  4 +
  5 +#==============================================================================
  6 +
  7 +ALL_VAL_TYPE = "TEMP, RES"
  8 +
  9 +#==============================================================================
  10 +
  11 +class T7Pro(abstract_instrument):
  12 + def __init__(self, adress="192.168.0.26", vtype="TEMP"):
  13 + self.adress = adress
  14 + self.vtype = vtype
  15 + self.names = ["TEMPERATURE_AIR_K",
  16 + "CURRENT_SOURCE_200UA_CAL_VALUE",
  17 + "AIN0",# "AIN1",
  18 + "AIN2",# "AIN3",
  19 + "AIN4",# "AIN5",
  20 + "AIN6",# "AIN7"
  21 + ]
  22 +
  23 + def model(self):
  24 + return 'T7Pro'
  25 +
  26 + def connect(self):
  27 + try:
  28 + print('Connecting to device @%s...' %(self.adress))
  29 + self.handle = ljm.openS("T7", "ETHERNET", self.adress)
  30 + self.configureAINs()
  31 + print(' --> Ok')
  32 +
  33 + print(self.model())
  34 +
  35 + if self.vtype == "TEMP":
  36 + 1
  37 + elif self.vtype == "RES":
  38 + 1
  39 + else:
  40 + print("Wrong -v argument")
  41 + raise
  42 +
  43 + except Exception as er:
  44 + print("Unexpected error during connection: " + str(er))
  45 + raise
  46 +
  47 + def getValue(self):
  48 + results = self.read(self.names)
  49 + temp = results[0]
  50 + res1 = results[2]/results[1]
  51 + res2 = results[3]/results[1]
  52 + res3 = results[4]/results[1]
  53 + res4 = results[5]/results[1]
  54 +
  55 + if self.vtype == 'TEMP':
  56 + # Temperature calculation
  57 + temp1 = self.res2tempSensor(628, res1)
  58 + temp2 = self.res2tempSensor(16947, res2)
  59 + temp3 = self.res2tempSensor(625, res3)
  60 + temp4 = self.res2tempSensor(100, res4)
  61 + string = '%f\t%f\t%f\t%f\t%f\n'%(temp, temp1, temp2, temp3, temp4)
  62 + elif self.vtype == 'RES':
  63 + string = '%f\t%f\t%f\t%f\t%f\n'%(temp, res1, res2, res3, res4)
  64 + else:
  65 + string = ''
  66 +
  67 + return string
  68 +
  69 + def read(self, names):
  70 + return ljm.eReadNames(self.handle, len(names), names)
  71 +
  72 + def disconnect(self):
  73 + ljm.close(self.handle)
  74 +
  75 + def send(self, command):
  76 + pass
  77 +
  78 + def configureAINs(self):
  79 + # Setup and call eWriteNames to configure AINs on the LabJack.
  80 + names = ["AIN0_NEGATIVE_CH", "AIN0_RANGE", "AIN0_RESOLUTION_INDEX",
  81 + #"AIN1_NEGATIVE_CH", "AIN1_RANGE", "AIN1_RESOLUTION_INDEX",
  82 + "AIN2_NEGATIVE_CH", "AIN2_RANGE", "AIN2_RESOLUTION_INDEX",
  83 + #"AIN3_NEGATIVE_CH", "AIN3_RANGE", "AIN3_RESOLUTION_INDEX",
  84 + "AIN4_NEGATIVE_CH", "AIN4_RANGE", "AIN4_RESOLUTION_INDEX",
  85 + #"AIN5_NEGATIVE_CH", "AIN5_RANGE", "AIN5_RESOLUTION_INDEX",
  86 + "AIN6_NEGATIVE_CH", "AIN6_RANGE", "AIN6_RESOLUTION_INDEX",
  87 + #"AIN7_NEGATIVE_CH", "AIN7_RANGE", "AIN7_RESOLUTION_INDEX"
  88 + ]
  89 + l_names = len(names)
  90 + aValues = [1, 1, 12,
  91 + #199, 0.01, 0,
  92 + 3, 1, 12,
  93 + #199, 0.01, 0,
  94 + 5, 1, 12,
  95 + #199, 0.01, 0,
  96 + 7, 0.1, 12,
  97 + #199, 0.01, 0
  98 + ]
  99 + ljm.eWriteNames(self.handle, l_names, names, aValues)
  100 +# print("\nSet configuration:")
  101 +# for i in range(len(names)):
  102 +# print(" %s : %f" % (names[i], aValues[i]))
  103 +
  104 + def res2tempSensor(self, sensor, res):
  105 + if sensor==627:
  106 + K = [0.399341181655472610,
  107 + 10.8420092277810909,
  108 + -26.4597939187660813,
  109 + 245.9828566655493379,
  110 + -668.069876596331596,
  111 + 1001.69882618263364,
  112 + -267.272089680656791]
  113 + if sensor==625:
  114 + K = [0.333548856582638109,
  115 + 11.7361551595386118,
  116 + -31.32988932320903987,
  117 + 262.878643524833024,
  118 + -704.163538021035492,
  119 + 1056.6040485650301,
  120 + -307.057196729816496]
  121 + if sensor==628:
  122 + K = [0.463200932294057566,
  123 + 13.5049710820894688,
  124 + -30.5191222755238414,
  125 + 231.098593852017075,
  126 + -550.122691885568202,
  127 + 806.038547554984689,
  128 + -198.510489917360246]
  129 + if sensor==16945:
  130 + K = [3.2497, 5.1777, 2.499]
  131 + if sensor==16943:
  132 + K = [3.4738, 5.1198, 2.3681]
  133 + if sensor==16944:
  134 + K = [3.3674, 5.2874, 2.5165]
  135 + if sensor==16941:
  136 + K = [2.9486, 4.5862, 2.266]
  137 + if sensor==16947:
  138 + K = [3.4597, 5.2422, 2.4169]
  139 + if sensor==100:
  140 + K = [0.003850]
  141 + return self.res2temp(K, res)
  142 +
  143 + def res2temp(K, res):
  144 + temp = 0
  145 + tmp = 1000./res
  146 + if len(K)==7:
  147 + for i in range(len(K)):
  148 + temp += K[i]*tmp**i
  149 + if len(K)==3:
  150 + for i in range(len(K)):
  151 + temp += K[i]*numpy.log10(tmp)**(2-i)
  152 + temp = 10**temp
  153 + if len(K)==1:
  154 + temp = (res/100.-1)/K[0]+273.15
  155 + return temp
instruments/__init__.py
1   -foo
  1 +from os import listdir
  2 +from os.path import dirname
  3 +
  4 +for module in listdir(dirname(__file__)):
  5 + if module == '__init__.py' or module == 'abstract_instrument.py' or module[-3:] != '.py':
  6 + continue
  7 + __import__(module[:-3], locals(), globals())
  8 +
  9 +del module, listdir, dirname
instruments/abstract_instrument.py
  1 +import abc
  2 +
  3 +class abstract_instrument(object):
  4 + __metaclass__ = abc.ABCMeta
  5 +
  6 + @abc.abstractmethod
  7 + def __init__(self, adress, vtype):
  8 + """Build the class"""
  9 + return
  10 +
  11 + @abc.abstractmethod
  12 + def model(self):
  13 + """return the instrument model"""
  14 + return
  15 +
  16 + @abc.abstractmethod
  17 + def connect(self):
  18 + """Create a connection with the instrument"""
  19 + return
  20 +
  21 + @abc.abstractmethod
  22 + def disconnect(self):
  23 + """Disconnect the instrument"""
  24 + return
  25 +
  26 + @abc.abstractmethod
  27 + def read(self):
  28 + """read the buffer"""
  29 + return
  30 +
  31 + @abc.abstractmethod
  32 + def send(self):
  33 + """send a command"""
  34 + return
  35 +
  36 + @abc.abstractmethod
  37 + def getValue(self):
  38 + """return the value of measurment"""
  39 + return
instruments/testDevice.py
  1 +from abstract_instrument import abstract_instrument
  2 +import numpy, time
  3 +
  4 +#==============================================================================
  5 +
  6 +ALL_VAL_TYPE = "DCV, ACV, DCI, ACI, RES2W, RES4W, FREQ"
  7 +
  8 +#==============================================================================
  9 +
  10 +class testDevice(abstract_instrument):
  11 + def __init__(self, adress="123.456.789.123", vtype="DCV"):
  12 + self.adress = adress
  13 + self.port = 9999
  14 + self.vtype = vtype
  15 +
  16 + def model(self):
  17 + return 'test device'
  18 +
  19 + def connect(self):
  20 + print('Connecting to device @%s:%s...' %(self.adress, self.port))
  21 + time.sleep(1)
  22 + print(' --> Ok')
  23 +
  24 + print(self.model())
  25 +
  26 + if self.vtype == "DCV":
  27 + print("CONF:VOLT:DC")
  28 + elif self.vtype == "ACV":
  29 + print("CONF:VOLT:AC")
  30 + elif self.vtype == "DCI":
  31 + print("CONF:CURR:DC")
  32 + elif self.vtype == "ACI":
  33 + print("CONF:CURR:AC")
  34 + elif self.vtype == "RES2W":
  35 + print("CONF:RES")
  36 + elif self.vtype == "RES4W":
  37 + print("CONF:FRES")
  38 + elif self.vtype == "FREQ":
  39 + print("CONF:FREQ")
  40 + else:
  41 + print("Wrong -v argument")
  42 + raise
  43 +
  44 + def getValue(self):
  45 + return str(numpy.random.rand())
  46 +
  47 + def read(self):
  48 + print('reading')
  49 + return 1
  50 +
  51 + def disconnect(self):
  52 + print('reset')
  53 +
  54 + def send(self, command):
  55 + print('send %s'%command)