Public Access
fixed lakeshore to keep using the simple ASCII commands
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
import serial
|
import serial
|
||||||
import re
|
import re
|
||||||
import operator
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from functools import reduce
|
|
||||||
|
|
||||||
from .temperature import TemperatureController, register_controller
|
from .temperature import TemperatureController, register_controller
|
||||||
|
|
||||||
@@ -18,18 +16,7 @@ reply_pattern = re.compile(r"\x02..(.*)\x03.", re.DOTALL)
|
|||||||
# [ACK] = \x06
|
# [ACK] = \x06
|
||||||
# BCC = checksum
|
# BCC = checksum
|
||||||
|
|
||||||
standard_device = '0011'
|
standard_device = '/dev/ttyUSB0'
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -104,6 +91,15 @@ class Lakeshore(TemperatureController):
|
|||||||
else:
|
else:
|
||||||
return 0.0
|
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):
|
def get_value(self, name):
|
||||||
temp = self.read_param(name)
|
temp = self.read_param(name)
|
||||||
if temp is None:
|
if temp is None:
|
||||||
@@ -114,47 +110,11 @@ class Lakeshore(TemperatureController):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return np.nan
|
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
|
# TemperatureController interface implementation
|
||||||
|
|
||||||
def get_temperature(self) -> float:
|
def get_temperature(self) -> float:
|
||||||
"""Read current temperature in Celsius."""
|
"""Read current temperature in Celsius."""
|
||||||
temp = self.get_temperature_A()
|
temp = self.read_param('KRDG')
|
||||||
if temp is None:
|
if temp is None:
|
||||||
return 0.0
|
return 0.0
|
||||||
try:
|
try:
|
||||||
@@ -164,7 +124,7 @@ class Lakeshore(TemperatureController):
|
|||||||
|
|
||||||
def get_setpoint(self) -> float:
|
def get_setpoint(self) -> float:
|
||||||
"""Read target setpoint temperature in Celsius."""
|
"""Read target setpoint temperature in Celsius."""
|
||||||
temp = self.get_set_temperature()
|
temp = self.read_param('SETP')
|
||||||
if temp is None:
|
if temp is None:
|
||||||
return 0.0
|
return 0.0
|
||||||
try:
|
try:
|
||||||
@@ -174,7 +134,7 @@ class Lakeshore(TemperatureController):
|
|||||||
|
|
||||||
def set_setpoint(self, temperature: float) -> bool:
|
def set_setpoint(self, temperature: float) -> bool:
|
||||||
"""Set target temperature in Celsius."""
|
"""Set target temperature in Celsius."""
|
||||||
self.set_temperature(temperature)
|
self.s.write(f"SETP {temperature}\n")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user