forked from dgary50/eovsa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cryostat_worker.py
94 lines (85 loc) · 2.84 KB
/
cryostat_worker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
STARBURST ACC/FEANTA Lakeshore Cryostat Worker
Author: Lokbondo Kung
Email: [email protected]
"""
import i_worker
import serial
# Description of Lakeshore device. Currently hard-coded.
CRYO_PORT = '/dev/ttyUSB0'
CRYO_BAUD = 9600
CRYO_BYTESIZE = 7
CRYO_STOPBITS = 1
CRYO_PARITY = 'O'
CRYO_TIMEOUT = 0.3
class CryoWorker(i_worker.IWorker):
def __init__(self):
super(CryoWorker, self).__init__()
self.commands = []
self.name = 'Cryostat-Worker'
self.serial_connection = None
# ---------------------------------------------------------------
# STATEFRAME HELPERS
# ---------------------------------------------------------------
# region Method Description
"""
Method: __temperature_query
Description:
Queries the temperatures monitored by the Lakeshore and
returns them in a single, parsed array.
Returns:
returnVal: array of floats representing the temperatures in
degrees Kelvin.
"""
# endregion
def __temperature_query(self):
query_cmd = 'krdg? 0\x0d\x0a'
self.serial_connection = serial.Serial(
port=CRYO_PORT, baudrate=CRYO_BAUD, bytesize=CRYO_BYTESIZE,
parity=CRYO_PARITY, stopbits=CRYO_STOPBITS, timeout=CRYO_TIMEOUT)
self.serial_connection.write(query_cmd)
returnString = self.serial_connection.readline()
returnString = returnString.split(',')
returnVal = []
for number in returnString:
try:
returnVal.append(float(number))
except ValueError:
returnVal.append(0)
self.serial_connection.close()
self.serial_connection = None
return returnVal
# ---------------------------------------------------------------
# INTERFACE IMPLEMENTATIONS
# ---------------------------------------------------------------
# region Method Description
"""
Method: get_command_list
Description:
Refer to abstract class IWorker located in i_worker.py
for full description.
"""
# endregion
def get_command_list(self):
return self.commands
# region Method Description
"""
Method: execute
Description:
Refer to abstract class IWorker located in i_worker.py
for full description.
"""
# endregion
def execute(self, acc_command):
pass
# region Method Description
"""
Method: stateframe_query
Description:
Refer to abstract class IWorker located in i_worker.py
for full description.
"""
# endregion
def stateframe_query(self):
temperatures = self.__temperature_query()
return {'CRYOSTAT': temperatures}