130 lines
3.2 KiB
Python
130 lines
3.2 KiB
Python
|
##
|
||
|
## <<<< Powersupply Emulators >>>>
|
||
|
## by Aidan Macdonald (aidan.plenert.macdonald@gmail.com)
|
||
|
##
|
||
|
## Contains classes that emulate powersupplies by
|
||
|
## building off the Device framework
|
||
|
##
|
||
|
|
||
|
import Device, Prologix
|
||
|
|
||
|
## **** Power Supply class ****
|
||
|
## by Aidan Macdonald (aidan.plenert.macdonald@gmail.com)
|
||
|
##
|
||
|
## General model of a basic Power Supply
|
||
|
##
|
||
|
|
||
|
class PowerSupply(Prologix.Prologix_GPIB_USB):
|
||
|
|
||
|
##%% Initialization PowerSupply(volt, current)
|
||
|
## Creates a framework for a Powersupply, but only binds
|
||
|
## a reset call to "RST?". All other functions have been
|
||
|
## left unbound so that children can bind them to respective
|
||
|
## commands
|
||
|
##
|
||
|
## voltage and current default to 10
|
||
|
##
|
||
|
def __init__(self, volt=10, cur=10):
|
||
|
Prologix.Prologix_GPIB_USB.__init__(self)
|
||
|
self.addCMD("RST?", self.reset)
|
||
|
|
||
|
self.voltage = volt
|
||
|
self.current = cur
|
||
|
|
||
|
##%% reset(pty, args)
|
||
|
## returns that the device has been reset
|
||
|
##
|
||
|
def reset(self, fpl, args=[]):
|
||
|
return "Power Supply has been reset"
|
||
|
|
||
|
##%% version(pty, args)
|
||
|
## overrides the version function from superclass
|
||
|
## left unbound here, because it was bound in the
|
||
|
## superclass.
|
||
|
##
|
||
|
def version(self, fpl, args=[]):
|
||
|
return "Power Supply Version 1.GEN"
|
||
|
|
||
|
##%% on(pty, args)
|
||
|
## turns power supply on
|
||
|
##
|
||
|
def on(self, fpl, args=[]):
|
||
|
return self.version(fpl, args) + " in now ON"
|
||
|
##%% off(pty, args)
|
||
|
## turns power supply off
|
||
|
##
|
||
|
def off(self, fpl, args=[]):
|
||
|
return self.version(fpl, args) + " in now OFF"
|
||
|
|
||
|
##%% getVoltage(pty, args)
|
||
|
## returns voltage
|
||
|
##
|
||
|
def getVoltage(self, fpl, args=[]):
|
||
|
return self.voltage
|
||
|
|
||
|
##%% getCurrent(pty, args)
|
||
|
## returns current
|
||
|
##
|
||
|
def getCurrent(self, fpl, args=[]):
|
||
|
return self.current
|
||
|
|
||
|
|
||
|
##%% setVoltage(pty, args)
|
||
|
## sets voltage
|
||
|
##
|
||
|
def setVoltage(self, fpl, args=[]):
|
||
|
try:
|
||
|
self.voltage = float(args[0])
|
||
|
return ""
|
||
|
except:
|
||
|
return "ERROR"
|
||
|
##%% setCurrent(pty, args)
|
||
|
## sets current
|
||
|
##
|
||
|
def setCurrent(self, fpl, args=[]):
|
||
|
try:
|
||
|
self.current = float(args[0])
|
||
|
return ""
|
||
|
except:
|
||
|
return "ERROR"
|
||
|
|
||
|
|
||
|
##
|
||
|
## **** E3631A Power Supply Class ****
|
||
|
## by Aidan Macdonald (aidan.plenert.macdonald@gmail.com)
|
||
|
##
|
||
|
## Emulates the E3631A Power Supply
|
||
|
##
|
||
|
|
||
|
class E3631A(PowerSupply):
|
||
|
##%% Initialization - E3631A(voltage, current)
|
||
|
## see PowerSupply.PowerSupply documentation
|
||
|
##
|
||
|
## adds bindings for all of the PowerSupply functions
|
||
|
##
|
||
|
def __init__(self, volt=10, cur=10):
|
||
|
PowerSupply.__init__(self, volt, cur)
|
||
|
|
||
|
self.addCMD("OUTP", self.outp)
|
||
|
self.addCMD("MEAS:VOLT:DC", self.getVoltage)
|
||
|
self.addCMD("MEAS:CURR:DC", self.getCurrent)
|
||
|
self.addCMD("SET:VOLT:DC", self.setVoltage)
|
||
|
self.addCMD("SET:CURR:DC", self.setCurrent)
|
||
|
|
||
|
##%% version(pty, args)
|
||
|
## returns version
|
||
|
##
|
||
|
def version(self, fpl, args=[]):
|
||
|
return "E3631A Power Supply"
|
||
|
|
||
|
##%% outp(pty, args)
|
||
|
## function binding for the "OUTP" command
|
||
|
## Used to turn the device on and off
|
||
|
##
|
||
|
def outp(self, fpl, args=[]):
|
||
|
if args[0] == "ON":
|
||
|
return self.on(fpl, args)
|
||
|
elif args[0] == "OFF":
|
||
|
return self.off(fpl, args)
|
||
|
return ""
|