-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcdp_converter.py
79 lines (60 loc) · 2.13 KB
/
cdp_converter.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
"""
A class that implements conversion of CDP messages (list of bytes) to proper units.
Author: Alex Hirst (https://www.linkedin.com/in/alex-hirst95/)
"""
import numpy as np
class CDPConverter:
def __init__(self):
pass
def convertCDPMessage(self, msg):
""" Converts ad values in list to proper units
Args:
msg: (list) list of ad values from CDP
Returns:
out: (list) list of measurement values in proper units
"""
LaserCurrent = self.adToMA(msg[0])
DumpSpotMonitor = self.adToVolts(msg[1])
WingboardTemp = self.adToCelcius(msg[2])
LaserTemp = self.adToCelcius(msg[3])
SizerBaseline = self.adToVolts(msg[4])
QualifierBaseline = self.adToVolts(msg[5])
Monitor5V = self.adTo5VMonitor(msg[6])
ControlBoardTemp = self.adTo_Control_Board_T(msg[7])
out = [
LaserCurrent,
DumpSpotMonitor,
WingboardTemp,
LaserTemp,
SizerBaseline,
QualifierBaseline,
Monitor5V,
ControlBoardTemp
] + msg [8:]
return out
def adToVolts(self, ad):
V = 5 * (ad / 4095) # volts
return V
def adTo5VMonitor(self, ad):
# From Sam. As using adToVolts * 2e10 before!
V = ad * 0.00244 # 5 volt monitor
return V
def adToMA(self, ad):
mA = 0.061 * ad # milliamps
return mA
def adToCelcius(self, ad):
V = self.adToVolts(ad)
C = (np.log((5/V) - 1) / 3750 + 1 / 298) ** (-1) - 273 # Celcius
return C
def adTo_Control_Board_T(self, ad):
# C = (0.06401 * ad) - 50 # old equation
# From Sam:
C = 153.973297 - 0.047819 * ad - 8.609166e-7 * (ad **2) # Celcius
return C
if __name__ == '__main__':
data = [1256, 4001, 1644, 1783, 97, 102, 2010, 2322, 0, 12, 102, 0, 6, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1447]
decoder = CDPConverter()
out = decoder.convertCDPMessage(data)
print(data)
print(out)
print(out[6], out[7])