Commit 322e8bed authored by Alén Arias Vázquez's avatar Alén Arias Vázquez 😎

added class & tested with hw

parent 7bb21739
import sys
import serial
import logging, logging.config
import argparse
class CPX400DP(object):
def __init__(self, name='CPX400DP', devname='/dev/tty_CPX', baudrate=115200, log_level=logging.INFO):
logging.basicConfig(format='%(asctime)s-%(name)s-%(levelname)-s %(message)s', datefmt='%Y-%m-%d %I:%M:%S', level=log_level)
self.name = name
self.log = logging.getLogger(self.name)
try:
self.serial=serial.Serial(devname, baudrate)
self.log.info("Opening device {}".format(self.serial.name))
except:
self.log.error("Failed to open device {}".format(self.serial.name))
def close(self):
self.serial.close()
def send_cmd(self, cmd):
self.serial.write(bytes(cmd.encode('utf-8')))
def recv_cmd(self):
return self.serial.readline()
def setVoltage(self, volts, chan=1):
self.log.info("Set oltage {}V in channel {}".format(volts,chan))
cmd='V'+str(chan)+' '+str(volts)+'\n'
self.send_cmd(cmd)
def getVoltage(self, chan=1):
cmd='V'+str(chan)+'O?\n'
self.send_cmd(cmd)
answer=self.recv_cmd()
self.log.info("Channel {} ---- {}}V".format(chan,float(answer[:-3])))
return float(answer[:-3])
def setCurrent(self, amps, chan=1):
self.log.info("Set current to {}A in channel {}".format(amps,chan))
cmd='I'+str(chan)+' '+str(amps)+'\n'
self.send_cmd(cmd)
def getCurrent(self, chan=1):
cmd='I'+str(chan)+'O?\n'
self.send_cmd(cmd)
answer=self.recv_cmd()
self.log.info("Channel {} ---- {}A".format(chan,float(answer[:-3])))
return float(answer[:-3])
def unlock(self):
cmd='IFUNLOCK\n'
self.send_cmd(cmd)
def lock(self):
cmd='IFLOCK\n'
self.send_cmd(cmd)
def switchOn(self, chan=1):
cmd='OP'+str(chan)+' 1\n'
self.log.info("Turning ON Channel {}".format(chan))
self.send_cmd(cmd)
def switchOff(self, chan=1):
cmd='OP'+str(chan)+' 0\n'
self.log.info("Turning OFF Channel {}".format(chan))
self.send_cmd(cmd)
def setup(self, chan=1, volts=10.0, amps=0.3):
self.setVoltage(volts=volts, chan=chan)
self.setCurrent(amps=amps, chan=chan)
self.switchOn(chan=chan)
def main():
parser = argparse.ArgumentParser(description='Control CPX400DP from USB', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--device', "-D", type=str, default='/dev/tty_CPX', help="Linux device name")
parser.add_argument('--baudrate', "-b", type=int, default=115200, help="Serial baudrate")
parser.add_argument('--chan', "-C", type=int, default=1, help="Channel selector")
parser.add_argument('--volts', "-V", type=float, default=12.0, help="Volts")
parser.add_argument('--amps', "-A", type=float, default=0.2, help="Amps")
parser.add_argument("--powerup", action='store_true', help="Switch On requested channel with requested values")
args = parser.parse_args()
psu=CPX400DP(name='CPX400DP', devname=args.device, baudrate=args.baudrate, log_level=logging.INFO)
if args.powerup:
psu.setup(chan=args.chan, volts=args.volts, amps=args.amps)
else:
psu.switchOff(chan=args.chan)
psu.close()
if __name__ == '__main__':
sys.exit(main())
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment