Source code for AFL.automation.sample_env.TemperatureDeck
from AFL.automation.APIServer.Driver import Driver
import lazy_loader as lazy
serial = lazy.load("serial", require="AFL-automation[serial]")
import time
[docs]
class TemperatureDeck(Driver):
defaults = {}
defaults['serial_port'] = '/dev/ttyACM0'
defaults['temperature_move_timeout'] = 900
defaults['temperature_move_sleep'] = 0.2
[docs]
def __init__(self,overrides=None):
self.app = None
Driver.__init__(self,name='TemperatureDeck',defaults=self.gather_defaults(),overrides=overrides)
self.name = 'TemperatureDeck'
self.cached_setpoint = None
self.cached_readback = None
self.cached_time = None
self.read_temp()
[docs]
def set_temp(self,sp):
with serial.Serial(self.config['serial_port'],115200) as p:
p.write(f'M104 S{str(int(sp)).zfill(2)}\r\n'.encode())
ret1 = p.readline()
ret2 = p.readline()
if 'ok' not in ret1.decode('UTF-8'):
raise ValueError(f'Error: {ret1}')
[docs]
def move_temp(self,temperature,wait = 30,tolerance = 0.1):
self.set_temp(temperature)
start_time = time.time()
while abs(self.read_temp()[1] - temperature) > tolerance and (time.time() - start_time) < self.config['temperature_move_timeout']:
time.sleep(self.config['temperature_move_sleep'])
time.sleep(wait)
[docs]
def status(self):
temp = self.read_temp()
return [f'setpoint: {temp[0]}',f'readback: {temp[1]}']
[docs]
def read_temp(self):
if self.cached_time is not None:
if (time.time() - self.cached_time) < 0.1:
return (self.cached_setpoint,self.cached_readback)
try:
with serial.Serial(self.config['serial_port'],115200) as p:
p.write(f'M105\r\n'.encode())
ret1 = p.readline()
#print(ret1) #T:####### C:########\r\n
ret1 = ret1.decode('UTF-8').replace('T:','').replace('C:','').replace("\r\n",'').split(' ')
try:
setpoint = float(ret1[0])
except Exception:
setpoint = -999.0
readback = float(ret1[1])
ret2 = p.readline()
self.cached_setpoint = setpoint
self.cached_readback = readback
self.cached_time = time.time()
return (setpoint,readback)
except Exception as e:
print(f'EXCEPTION UPDATING TEMP {e}: RETURNING FROM CACHE')
return (self.cached_setpoint, self.cached_readback)
if __name__ == '__main__':
from AFL.automation.shared.launcher import *