diff --git a/src/damaris/tools/lakeshore.py b/src/damaris/tools/lakeshore.py index 09a68b2..561947d 100644 --- a/src/damaris/tools/lakeshore.py +++ b/src/damaris/tools/lakeshore.py @@ -1,8 +1,6 @@ import serial import re -import operator import numpy as np -from functools import reduce from .temperature import TemperatureController, register_controller @@ -18,18 +16,7 @@ reply_pattern = re.compile(r"\x02..(.*)\x03.", re.DOTALL) # [ACK] = \x06 # BCC = checksum -standard_device = '0011' -EOT = '\x04' -STX = '\x02' -ENQ = '\x05' -ETX = '\x03' -ACK = '\x06' -NAK = '\x15' - - -def checksum(message): - bcc = (reduce(operator.xor, list(map(ord,message)))) - return chr(bcc) +standard_device = '/dev/ttyUSB0' """ @@ -104,6 +91,15 @@ class Lakeshore(TemperatureController): else: return 0.0 + def read_param(self, param): + """Read a parameter using simple ASCII commands.""" + self.s.write(f"{param}?\n") + answer = self.s.readline().strip() + if answer and len(answer) > 1: + # Remove the first character (command echo) and return the value + return answer[1:] + return None + def get_value(self, name): temp = self.read_param(name) if temp is None: @@ -114,47 +110,11 @@ class Lakeshore(TemperatureController): except ValueError: return np.nan - def send_read_param(self, param): - self.s.write(EOT + self.device + param + ENQ) - - def read_param(self, param): - self.s.flushInput() - self.send_read_param(param) - answer = self.s.read(self._expect_len) - m = reply_pattern.search(answer) - if m is None: - # Reading _expect_len bytes was not enough... - answer += self.s.read(200) - m = reply_pattern.search(answer) - if m is not None: - self._expect_len = len(answer) - return m.group(1) - else: - print("received:", repr(answer)) - return None - - def write_param(self, mnemonic, data): - if len(mnemonic) > 2: - raise ValueError - bcc = checksum(mnemonic + data + ETX) - mes = EOT+self.device+STX+mnemonic+data+ETX+bcc - if DEBUG: - for i in mes: - print(i,hex(ord(i))) - self.s.flushInput() - self.s.write(mes) - answer = self.s.read(1) - # print "received:", repr(answer) - if answer == "": - # raise IOError("No answer from device") - return None - return answer[-1] == ACK - # TemperatureController interface implementation def get_temperature(self) -> float: """Read current temperature in Celsius.""" - temp = self.get_temperature_A() + temp = self.read_param('KRDG') if temp is None: return 0.0 try: @@ -164,7 +124,7 @@ class Lakeshore(TemperatureController): def get_setpoint(self) -> float: """Read target setpoint temperature in Celsius.""" - temp = self.get_set_temperature() + temp = self.read_param('SETP') if temp is None: return 0.0 try: @@ -174,7 +134,7 @@ class Lakeshore(TemperatureController): def set_setpoint(self, temperature: float) -> bool: """Set target temperature in Celsius.""" - self.set_temperature(temperature) + self.s.write(f"SETP {temperature}\n") return True def close(self):