from test.helpers.syscmd import SysCommand import unittest import serial import time class Qamp(unittest.TestCase): def __init__(self, testname, testfunc, undercurrent=0.1, overcurrent=2): self._current = 0.0 self._undercurrent=undercurrent self._overcurrent = overcurrent self._vshuntfactor=16384.0 self._ser = serial.Serial() self._ser.port = '/dev/ttyUSB0' self._ser.baudrate = 115200 self._ser.parity = serial.PARITY_NONE self._ser.timeout = 0 self._ser.writeTimout = 0 self._ser.xonxoff = False self._ser.rtscts = False self._ser.dsrdtr = False super(Qamp, self).__init__(testfunc) self._testMethodDoc = testname def __del__(self): self._ser.close() def execute(self): # Open Serial port ttyUSB0 error=0 try: self._ser.open() except: self.fail("failed: IMPOSSIBLE OPEN USB-SERIAL PORT ( {} )".format(self._ser.port)) error=1 return -1 if error==0: # Clean input and output buffer of serial port self._ser.flushInput() self._ser.flushOutput() # Send command to read Voltage at Shunt resistor # Prepare cmd cmd = ('at\n\r') i=0 while (i < len(cmd)): i = i + self._ser.write(cmd[i].encode('ascii')) time.sleep(0.05) self._ser.read(1) res0 = [] while (self._ser.inWaiting() > 0): # if incoming bytes are waiting to be read from the serial input buffer res0.append(self._ser.read(1).decode('ascii')) # read the bytes and convert from binary array to ASCII print(res0) #CHECK COM FIRST cmd = ('at+in?\n\r') i = 0 # Write, 1 by 1 byte at a time to avoid hanging of serial receiver code of listener, emphasis being made at sleep of 50 ms. while (i < len(cmd)): i = i + self._ser.write(cmd[i].encode('ascii')) time.sleep(0.05) self._ser.read(1) # Read, 1 by 1 byte res = [] while (self._ser.inWaiting() > 0): # if incoming bytes are waiting to be read from the serial input buffer res.append(self._ser.read(1).decode('ascii')) # read the bytes and convert from binary array to ASCII string = ''.join(res) string = string.replace('\n', '') try: self._current = float(int(string, 0)) / self._vshuntfactor except: self.fail("failed: CAN'T READ CONSUMPTION (CURRENT=0?)") error=1 return -1 if error==0: print(self._current) # In order to give a valid result it is importarnt to define an under current value if (self._current > float(self._overcurrent)): self.fail("failed: OVERCURRENT DETECTED ( {} )".format(self._current)) return -1 if (self._current < float(self._undercurrent)): self.fail("failed: UNDERCURRENT DETECTED ( {} )".format(self._current)) return -1