Source code for AFL.automation.loading.UltimusVPressureController

import lazy_loader as lazy
serial = lazy.load("serial", require="AFL-automation[serial]")
from AFL.automation.loading.PressureController import PressureController

[docs] class UltimusVPressureController(PressureController):
[docs] def __init__(self,port,baud=115200): ''' Initializes a DigitalOutPressureController Params: port (str): serial port to use ''' self.port = port self.baud = baud self.dispensing = False
[docs] def compute_checksum(self,cmd): running_sum = 65536 for char in cmd: running_sum = running_sum - char return hex(running_sum)[-2:].upper().encode('UTF-8')
[docs] def char_count(self,cmd): return str(len(cmd)).zfill(2).encode('UTF-8')
[docs] def package_cmd(self,cmd): if type(cmd)!=bytes: cmd.encode('UTF-8') cmd = self.char_count(cmd) + cmd cmd = cmd + self.compute_checksum(cmd) cmd = chr(0x02).encode('UTF-8') + cmd + chr(0x03).encode('UTF-8') return cmd
[docs] def send_command(self,cmd): with serial.Serial(self.port,self.baud, timeout=0.5) as ser: print('hello') ser.write(chr(0x05).encode('UTF-8')) print(ser.read()) print(self.package_cmd(cmd)) ser.write(self.package_cmd(cmd)) response = ser.read_until('\x03'.encode('UTF-8')) #ser.readline() # read a '\n' terminated line core_response = response.decode('UTF-8')[2:4] if core_response == '2A': return True else: return False return response
[docs] def set_P(self,pressure): ''' pressure: pressure to set in psi ''' if self.dispensing and pressure < 0.1: r = self.send_command(b'DI ') if r: self.dispensing = False if pressure > 0.1: p_set_str = str(int(round(pressure * 10))).zfill(4).encode('UTF-8') r = self.send_command(b'PS ' + p_set_str) if not r: raise ValueError('Pressure set failed') if not self.dispensing: r = self.send_command(b'DI ') if r: self.dispensing = True