Iterative improvement of fake Lakeshores
This commit is contained in:
@@ -62,15 +62,27 @@ def device_display():
|
||||
return
|
||||
|
||||
try:
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 25, "Temperature: %8.3f" % myDev.KRDG[1])
|
||||
stdscr.addstr(2, 25, "Setpoint : %8.3f" % myDev.SETP[1])
|
||||
stdscr.addstr(3, 25, "Difference : %8.3f" % (myDev.KRDG[1] - myDev.SETP[1]))
|
||||
stdscr.addstr(5, 25, "Target : %8.3f" % myDev.TARGET[1])
|
||||
stdscr.addstr(6, 25, "Ramp Rate : %8.3f" % myDev.RAMP_RATE[1])
|
||||
stdscr.addstr(7, 25, "Ramp On : %8s" % ["No", "Yes"][myDev.RAMP_ON[1]])
|
||||
stdscr.addstr(8, 25, "Ramping : %8s" % ["No", "Yes"][myDev.RAMP_ST[1]])
|
||||
stdscr.addstr(0, 0, "Random : %8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 0, "Random :%8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 0, "Sensor :")
|
||||
for idx in myDev.CONFIG_SNSRS:
|
||||
stdscr.addstr(1, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[idx])
|
||||
stdscr.addstr(2, 0, "PV :")
|
||||
stdscr.addstr(3, 0, "Setpoint :")
|
||||
stdscr.addstr(4, 0, "Diff :")
|
||||
for idx in myDev.CONFIG_LOOPS:
|
||||
stdscr.addstr(2, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[myDev.LOOPINPUT[idx]])
|
||||
stdscr.addstr(3, 12 + (idx - 1) * 12, "%8.3f" % myDev.SETP[idx])
|
||||
stdscr.addstr(4, 12 + (idx - 1) * 12, "%8.3f" % (myDev.KRDG[myDev.LOOPINPUT[idx]] - myDev.SETP[idx]))
|
||||
stdscr.addstr(5, 0, "Target :")
|
||||
stdscr.addstr(6, 0, "Ramp Rate:")
|
||||
stdscr.addstr(7, 0, "Ramp On :")
|
||||
stdscr.addstr(8, 0, "Ramping :")
|
||||
for idx in myDev.CONFIG_RAMPS:
|
||||
stdscr.addstr(5, 12 + (idx - 1) * 12, "%8.3f" % myDev.TARGET[idx])
|
||||
stdscr.addstr(6, 12 + (idx - 1) * 12, "%8.3f" % myDev.RAMP_RATE[idx])
|
||||
stdscr.addstr(7, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ON[idx]])
|
||||
stdscr.addstr(8, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ST[idx]])
|
||||
stdscr.refresh()
|
||||
except:
|
||||
raise
|
||||
|
||||
@@ -62,15 +62,27 @@ def device_display():
|
||||
return
|
||||
|
||||
try:
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 25, "Temperature: %8.3f" % myDev.KRDG[1])
|
||||
stdscr.addstr(2, 25, "Setpoint : %8.3f" % myDev.SETP[1])
|
||||
stdscr.addstr(3, 25, "Difference : %8.3f" % (myDev.KRDG[1] - myDev.SETP[1]))
|
||||
stdscr.addstr(5, 25, "Target : %8.3f" % myDev.TARGET[1])
|
||||
stdscr.addstr(6, 25, "Ramp Rate : %8.3f" % myDev.RAMP_RATE[1])
|
||||
stdscr.addstr(7, 25, "Ramp On : %8s" % ["No", "Yes"][myDev.RAMP_ON[1]])
|
||||
stdscr.addstr(8, 25, "Ramping : %8s" % ["No", "Yes"][myDev.RAMP_ST[1]])
|
||||
stdscr.addstr(0, 0, "Random : %8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 0, "Random :%8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 0, "Sensor :")
|
||||
for idx in myDev.CONFIG_SNSRS:
|
||||
stdscr.addstr(1, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[idx])
|
||||
stdscr.addstr(2, 0, "PV :")
|
||||
stdscr.addstr(3, 0, "Setpoint :")
|
||||
stdscr.addstr(4, 0, "Diff :")
|
||||
for idx in myDev.CONFIG_LOOPS:
|
||||
stdscr.addstr(2, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[myDev.LOOPINPUT[idx]])
|
||||
stdscr.addstr(3, 12 + (idx - 1) * 12, "%8.3f" % myDev.SETP[idx])
|
||||
stdscr.addstr(4, 12 + (idx - 1) * 12, "%8.3f" % (myDev.KRDG[myDev.LOOPINPUT[idx]] - myDev.SETP[idx]))
|
||||
stdscr.addstr(5, 0, "Target :")
|
||||
stdscr.addstr(6, 0, "Ramp Rate:")
|
||||
stdscr.addstr(7, 0, "Ramp On :")
|
||||
stdscr.addstr(8, 0, "Ramping :")
|
||||
for idx in myDev.CONFIG_RAMPS:
|
||||
stdscr.addstr(5, 12 + (idx - 1) * 12, "%8.3f" % myDev.TARGET[idx])
|
||||
stdscr.addstr(6, 12 + (idx - 1) * 12, "%8.3f" % myDev.RAMP_RATE[idx])
|
||||
stdscr.addstr(7, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ON[idx]])
|
||||
stdscr.addstr(8, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ST[idx]])
|
||||
stdscr.refresh()
|
||||
except:
|
||||
raise
|
||||
|
||||
@@ -62,15 +62,29 @@ def device_display():
|
||||
return
|
||||
|
||||
try:
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 25, "Temperature: %8.3f" % myDev.KRDG[1])
|
||||
stdscr.addstr(2, 25, "Setpoint : %8.3f" % myDev.SETP[1])
|
||||
stdscr.addstr(3, 25, "Difference : %8.3f" % (myDev.KRDG[1] - myDev.SETP[1]))
|
||||
stdscr.addstr(5, 25, "Target : %8.3f" % myDev.TARGET[1])
|
||||
stdscr.addstr(6, 25, "Ramp Rate : %8.3f" % myDev.RAMP_RATE[1])
|
||||
stdscr.addstr(7, 25, "Ramp On : %8s" % ["No", "Yes"][myDev.RAMP_ON[1]])
|
||||
stdscr.addstr(8, 25, "Ramping : %8s" % ["No", "Yes"][myDev.RAMP_ST[1]])
|
||||
stdscr.addstr(0, 0, "Random : %8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 0, "Random :%8.3f" % myDev.RANDOM)
|
||||
stdscr.addstr(0, 25, "Identity : %s (%d)" % (myDev.IDN, myPort))
|
||||
stdscr.addstr(1, 0, "Sensor :")
|
||||
for idx in myDev.CONFIG_SNSRS:
|
||||
if idx > 4:
|
||||
continue
|
||||
stdscr.addstr(1, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[idx])
|
||||
stdscr.addstr(2, 0, "PV :")
|
||||
stdscr.addstr(3, 0, "Setpoint :")
|
||||
stdscr.addstr(4, 0, "Diff :")
|
||||
for idx in myDev.CONFIG_LOOPS:
|
||||
stdscr.addstr(2, 12 + (idx - 1) * 12, "%8.3f" % myDev.KRDG[myDev.LOOPINPUT[idx]])
|
||||
stdscr.addstr(3, 12 + (idx - 1) * 12, "%8.3f" % myDev.SETP[idx])
|
||||
stdscr.addstr(4, 12 + (idx - 1) * 12, "%8.3f" % (myDev.KRDG[myDev.LOOPINPUT[idx]] - myDev.SETP[idx]))
|
||||
stdscr.addstr(5, 0, "Target :")
|
||||
stdscr.addstr(6, 0, "Ramp Rate:")
|
||||
stdscr.addstr(7, 0, "Ramp On :")
|
||||
stdscr.addstr(8, 0, "Ramping :")
|
||||
for idx in myDev.CONFIG_RAMPS:
|
||||
stdscr.addstr(5, 12 + (idx - 1) * 12, "%8.3f" % myDev.TARGET[idx])
|
||||
stdscr.addstr(6, 12 + (idx - 1) * 12, "%8.3f" % myDev.RAMP_RATE[idx])
|
||||
stdscr.addstr(7, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ON[idx]])
|
||||
stdscr.addstr(8, 12 + (idx - 1) * 12, "%8s" % ["No", "Yes"][myDev.RAMP_ST[idx]])
|
||||
stdscr.refresh()
|
||||
except:
|
||||
raise
|
||||
|
||||
@@ -17,6 +17,7 @@ class Lakeshore336(LakeshoreDevice):
|
||||
print Lakeshore336.__name__, "ctor"
|
||||
self.CONFIG_LOOPS = [1, 2, 3, 4]
|
||||
self.CONFIG_SNSRS = [1, 2, 3, 4]
|
||||
self.CONFIG_RAMPS = [1, 2]
|
||||
self.reset_powerup()
|
||||
|
||||
def doCommand(self, command, params):
|
||||
@@ -51,12 +52,13 @@ class Lakeshore336(LakeshoreDevice):
|
||||
self.CRVPT = {}
|
||||
for i in range(1,21):
|
||||
self.CRVPT[i] = [(0.0, 0.0)]
|
||||
self.CSET = {1: "A,1,1,0", 2: "B,1,1,0"}
|
||||
self.DOUT = 0
|
||||
self.FILTER = {1: "1,10,2"}
|
||||
self.FREQ = 2
|
||||
self.GUARD = 0
|
||||
self.HTR = 0.0
|
||||
self.HTR = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.HTR[idx] = 0.0
|
||||
self.HTRRNG = 0
|
||||
self.HTRST = 0
|
||||
self.IDN = "LSCI,MODEL336,123456/123456,1.0"
|
||||
@@ -73,14 +75,26 @@ class Lakeshore336(LakeshoreDevice):
|
||||
self.LOCK = "0,000"
|
||||
self.MDAT = {1: "0,0,1"} # Min,Max,Reset
|
||||
self.MOUT = {1: "0.0", 2: "0.0", 3: "0.0", 4: "0.0"}
|
||||
self.OUTMODE = {1: "1,1,0", 2: "1,2,0", 3: "1,3,0", 4: "1,4,0"}
|
||||
self.PID = {1: "+0150.0,+0005.0,+000.0", 2: "+0150.0,+0005.0,+000.0"}
|
||||
self.RAMP_ON = {1: 0, 2: 0}
|
||||
self.RAMP_RATE = {1: 0.000, 2: 0.000}
|
||||
self.RAMP_ST = {1: 0, 2:0}
|
||||
self.LOOPINPUT = {}
|
||||
self.OUTMODE = {}
|
||||
self.PID = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.PID[idx] = "+0150.0,+0005.0,+000.0"
|
||||
self.LOOPINPUT[idx] = idx
|
||||
if idx < 3:
|
||||
self.OUTMODE[idx] = "1,%d,0" % idx
|
||||
else:
|
||||
self.OUTMODE[idx] = "4,%d,0" % idx
|
||||
self.RAMP_ON = {}
|
||||
self.RAMP_RATE = {}
|
||||
self.RAMP_ST = {}
|
||||
for idx in self.CONFIG_RAMPS:
|
||||
self.RAMP_ON[idx] = 0
|
||||
self.RAMP_RATE[idx] = 0.000
|
||||
self.RAMP_ST[idx] = 0
|
||||
self.RAMP_TIME = 0.0
|
||||
self.RANGE = {}
|
||||
for idx in range(1,5):
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.RANGE[idx] = "1"
|
||||
self.RDGST = {"A": 0, "B": 0, "C": 0, "D": 0}
|
||||
self.RELAY = {1: "1,A,0", 2: "2,A,0"}
|
||||
@@ -100,7 +114,7 @@ class Lakeshore336(LakeshoreDevice):
|
||||
self.OPC = 0
|
||||
self.SRE = 0
|
||||
self.TST = 0
|
||||
self.RANDOM = 0.5
|
||||
self.RANDOM = 0.0
|
||||
|
||||
def doIteration(self):
|
||||
delta_time = time.time() - self.LAST_ITERATION
|
||||
@@ -109,7 +123,8 @@ class Lakeshore336(LakeshoreDevice):
|
||||
#print "DoIteration:", delta_time
|
||||
self.LAST_ITERATION = time.time()
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
# TODO - progress ramping setpoints (SP)
|
||||
ndx = self.LOOPINPUT[idx]
|
||||
# progress ramping setpoints (SP)
|
||||
if idx in self.RAMP_ON and self.RAMP_ON[idx] and self.TARGET[idx] != self.SETP[idx]:
|
||||
delta_time = time.time() - self.RAMP_START_TIME[idx];
|
||||
delta_temp = self.RAMP_RATE[idx] * (delta_time / 60.0)
|
||||
@@ -125,15 +140,15 @@ class Lakeshore336(LakeshoreDevice):
|
||||
self.RAMP_ST[idx] = 0
|
||||
|
||||
# TODO - iterate Power Level
|
||||
if self.KRDG[idx] <> self.SETP[idx]:
|
||||
self.HTR = self.SETP[idx] - self.KRDG[idx]
|
||||
if self.HTR > 100.0:
|
||||
self.HTR = 100.0
|
||||
elif self.HTR < -100.0:
|
||||
self.HTR = -100.0
|
||||
if self.KRDG[ndx] <> self.SETP[idx]:
|
||||
self.HTR[idx] = self.SETP[idx] - self.KRDG[ndx]
|
||||
if self.HTR[idx] > 100.0:
|
||||
self.HTR[idx] = 100.0
|
||||
elif self.HTR[idx] < -100.0:
|
||||
self.HTR[idx] = -100.0
|
||||
|
||||
# TODO - iterate Process Values (PV)
|
||||
self.KRDG[idx] = (0.9 * self.KRDG[idx] + 0.1 * self.SETP[idx])
|
||||
self.KRDG[ndx] = (0.9 * self.KRDG[ndx] + 0.1 * self.SETP[idx])
|
||||
|
||||
def doCommandCLS(self, cmd, args):
|
||||
print "Unimplemented Command: \"*CLS\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -257,12 +272,14 @@ class Lakeshore336(LakeshoreDevice):
|
||||
def doQueryCOMM(self, cmd, args):
|
||||
self.write("%f" % self.COMM)
|
||||
def doQueryCRDG(self, cmd, args):
|
||||
loop = ord(args[0]) - 64
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 4:
|
||||
loop = 4
|
||||
self.write("%f" % (self.KRDG[loop] - 273.15 + self.RANDOM))
|
||||
idx = ord(args[0]) - 64
|
||||
if idx in self.KRDG:
|
||||
if self.RANDOM > 0:
|
||||
self.write("%f" % (self.KRDG[idx] - 273.15 + random.uniform(-self.RANDOM, self.RANDOM)))
|
||||
else:
|
||||
self.write("%f" % (self.KRDG[idx] - 273.15))
|
||||
else:
|
||||
self.write("+000.0")
|
||||
def doCommandCRVDEL(self, cmd, args):
|
||||
print "Unimplemented Command: \"CRVDEL\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
def doCommandCRVHDR(self, cmd, args):
|
||||
@@ -294,20 +311,7 @@ class Lakeshore336(LakeshoreDevice):
|
||||
print "TODO implement Query: \"CRVPT?\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
def doCommandCRVSAV(self, cmd, args):
|
||||
pass
|
||||
def doCommandCSET(self, cmd, args):
|
||||
loop = int(args[0])
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 2:
|
||||
loop = 2
|
||||
self.CSET[loop] = ",".join(args[1:])
|
||||
def doQueryCSET(self, cmd, args):
|
||||
loop = int(args[0])
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 2:
|
||||
loop = 2
|
||||
self.write("%s" % self.CSET[loop])
|
||||
# CSET - see OUTMODE
|
||||
def doCommandDFLT(self, cmd, args):
|
||||
if args[0] == "99":
|
||||
print "Unimplemented Command: \"DFLT 99\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -339,9 +343,13 @@ class Lakeshore336(LakeshoreDevice):
|
||||
if idx in self.FILTER:
|
||||
self.write(self.FILTER[idx])
|
||||
else:
|
||||
self.write("0")
|
||||
raise IndexError
|
||||
def doQueryHTR(self, cmd, args):
|
||||
self.write("%f" % self.HTR)
|
||||
idx = int(args[0])
|
||||
if idx in self.HTR:
|
||||
self.write("%f" % self.HTR[idx])
|
||||
else:
|
||||
raise IndexError
|
||||
def doQueryHTRST(self, cmd, args):
|
||||
self.write("%d" % self.HTRST)
|
||||
def doQueryIEEE(self, cmd, args):
|
||||
@@ -376,12 +384,14 @@ class Lakeshore336(LakeshoreDevice):
|
||||
self.write("%d" % self.KEYST)
|
||||
self.KEYST = 0
|
||||
def doQueryKRDG(self, cmd, args):
|
||||
loop = ord(args[0]) - 64
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 4:
|
||||
loop = 4
|
||||
self.write("%f" % (self.KRDG[loop] + self.RANDOM))
|
||||
idx = ord(args[0]) - 64
|
||||
if idx in self.KRDG:
|
||||
if self.RANDOM > 0:
|
||||
self.write("%f" % (self.KRDG[idx] + random.uniform(-self.RANDOM, self.RANDOM)))
|
||||
else:
|
||||
self.write("%f" % (self.KRDG[idx]))
|
||||
else:
|
||||
self.write("+000.0")
|
||||
def doQueryLDAT(self, cmd, args):
|
||||
self.write("3.000E+02") # TODO
|
||||
print "TODO implement Query: \"LDAT?\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -429,7 +439,12 @@ class Lakeshore336(LakeshoreDevice):
|
||||
else:
|
||||
self.write(self.OUTMODE[1])
|
||||
def doCommandOUTMODE(self, cmd, args):
|
||||
print "Unimplemented Command: \"OUTMODE\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
idx = int(args[0])
|
||||
if idx in self.OUTMODE:
|
||||
newVal = self.mergeParams(3, self.OUTMODE[idx], ",".join(args[1:]))
|
||||
print "OUTMODE:", newVal
|
||||
self.OUTMODE[idx] = newVal
|
||||
self.LOOPINPUT[idx] = int(newVal.split(",")[1])
|
||||
def doQueryPID(self, cmd, args):
|
||||
idx = int(args[0])
|
||||
self.write(self.PID[idx])
|
||||
|
||||
@@ -17,6 +17,7 @@ class Lakeshore340(LakeshoreDevice):
|
||||
print Lakeshore340.__name__, "ctor"
|
||||
self.CONFIG_LOOPS = [1, 2]
|
||||
self.CONFIG_SNSRS = [1, 2, 3, 4]
|
||||
self.CONFIG_RAMPS = [1, 2]
|
||||
self.reset_powerup()
|
||||
|
||||
def doCommand(self, command, params):
|
||||
@@ -41,8 +42,12 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.CLIMI = 0.0
|
||||
self.CLIMIT = {1: "400.0,10,0,0", 2: "400.0,10,0,0"}
|
||||
self.CMODE = {}
|
||||
self.CSET = {}
|
||||
self.LOOPINPUT = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.CMODE[idx] = 1
|
||||
self.CSET[idx] = "%s,1,1,0" % chr(64 + idx)
|
||||
self.LOOPINPUT[idx] = idx
|
||||
self.CRVHDR = {}
|
||||
self.CRVHDR[1] = "DT-336-1 ,STANDARD ,1,+500.000,1"
|
||||
self.CRVHDR[2] = "DT-336-2 ,STANDARD ,2,+0.500,1"
|
||||
@@ -51,12 +56,13 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.CRVPT = {}
|
||||
for i in range(1,21):
|
||||
self.CRVPT[i] = [(0.0, 0.0)]
|
||||
self.CSET = {1: "A,1,1,0", 2: "B,1,1,0"}
|
||||
self.DOUT = 0
|
||||
self.FILTER = {1: "1,10,2"}
|
||||
self.FREQ = 2
|
||||
self.GUARD = 0
|
||||
self.HTR = 0.0
|
||||
self.HTR = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.HTR[idx] = 0.0
|
||||
self.HTRRNG = 0
|
||||
self.HTRST = 0
|
||||
self.IDN = "LSCI,MODEL340,123456,01022003"
|
||||
@@ -75,14 +81,19 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.LOCK = "0,000"
|
||||
self.MDAT = {1: "0,0,1"} # Min,Max,Reset
|
||||
self.MOUT = {1: "0.0", 2: "0.0", 3: "0.0", 4: "0.0"}
|
||||
self.OUTMODE = {1: "1,1,0", 2: "1,2,0", 3: "1,3,0", 4: "1,4,0"}
|
||||
self.PID = {1: "+0150.0,+0005.0,+000.0", 2: "+0150.0,+0005.0,+000.0"}
|
||||
self.RAMP_ON = {1: 0, 2: 0}
|
||||
self.RAMP_RATE = {1: 0.000, 2: 0.000}
|
||||
self.RAMP_ST = {1: 0, 2:0}
|
||||
self.PID = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.PID[idx] = "+0150.0,+0005.0,+000.0"
|
||||
self.RAMP_ON = {}
|
||||
self.RAMP_RATE = {}
|
||||
self.RAMP_ST = {}
|
||||
for idx in self.CONFIG_RAMPS:
|
||||
self.RAMP_ON[idx] = 0
|
||||
self.RAMP_RATE[idx] = 0.000
|
||||
self.RAMP_ST[idx] = 0
|
||||
self.RAMP_TIME = 0.0
|
||||
self.RANGE = {}
|
||||
for idx in range(1,5):
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.RANGE[idx] = "1"
|
||||
self.RDGST = {"A": 0, "B": 0, "C": 0, "D": 0}
|
||||
self.RELAY = {1: "1,A,0", 2: "2,A,0"}
|
||||
@@ -103,7 +114,7 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.OPC = 0
|
||||
self.SRE = 0
|
||||
self.TST = 0
|
||||
self.RANDOM = 0.5
|
||||
self.RANDOM = 0.0
|
||||
|
||||
def doIteration(self):
|
||||
delta_time = time.time() - self.LAST_ITERATION
|
||||
@@ -112,7 +123,8 @@ class Lakeshore340(LakeshoreDevice):
|
||||
#print "DoIteration:", delta_time
|
||||
self.LAST_ITERATION = time.time()
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
# TODO - progress ramping setpoints (SP)
|
||||
ndx = self.LOOPINPUT[idx]
|
||||
# progress ramping setpoints (SP)
|
||||
if idx in self.RAMP_ON and self.RAMP_ON[idx] and self.TARGET[idx] != self.SETP[idx]:
|
||||
delta_time = time.time() - self.RAMP_START_TIME[idx];
|
||||
delta_temp = self.RAMP_RATE[idx] * (delta_time / 60.0)
|
||||
@@ -128,15 +140,15 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.RAMP_ST[idx] = 0
|
||||
|
||||
# TODO - iterate Power Level
|
||||
if self.KRDG[idx] <> self.SETP[idx]:
|
||||
self.HTR = self.SETP[idx] - self.KRDG[idx]
|
||||
if self.HTR > 100.0:
|
||||
self.HTR = 100.0
|
||||
elif self.HTR < -100.0:
|
||||
self.HTR = -100.0
|
||||
if self.KRDG[ndx] <> self.SETP[idx]:
|
||||
self.HTR[idx] = self.SETP[idx] - self.KRDG[ndx]
|
||||
if self.HTR[idx] > 100.0:
|
||||
self.HTR[idx] = 100.0
|
||||
elif self.HTR[idx] < -100.0:
|
||||
self.HTR[idx] = -100.0
|
||||
|
||||
# TODO - iterate Process Values (PV)
|
||||
self.KRDG[idx] = (0.9 * self.KRDG[idx] + 0.1 * self.SETP[idx])
|
||||
self.KRDG[ndx] = (0.9 * self.KRDG[ndx] + 0.1 * self.SETP[idx])
|
||||
|
||||
def doCommandCLS(self, cmd, args):
|
||||
print "Unimplemented Command: \"*CLS\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -260,12 +272,14 @@ class Lakeshore340(LakeshoreDevice):
|
||||
def doQueryCOMM(self, cmd, args):
|
||||
self.write("%f" % self.COMM)
|
||||
def doQueryCRDG(self, cmd, args):
|
||||
loop = ord(args[0]) - 64
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 4:
|
||||
loop = 4
|
||||
self.write("%f" % (self.KRDG[loop] - 273.15 + self.RANDOM))
|
||||
idx = ord(args[0]) - 64
|
||||
if idx in self.KRDG:
|
||||
if self.RANDOM > 0:
|
||||
self.write("%f" % (self.KRDG[idx] - 273.15 + random.uniform(-self.RANDOM, self.RANDOM)))
|
||||
else:
|
||||
self.write("%f" % (self.KRDG[idx] - 273.15))
|
||||
else:
|
||||
self.write("+000.0")
|
||||
def doCommandCRVDEL(self, cmd, args):
|
||||
print "Unimplemented Command: \"CRVDEL\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
def doCommandCRVHDR(self, cmd, args):
|
||||
@@ -298,19 +312,17 @@ class Lakeshore340(LakeshoreDevice):
|
||||
def doCommandCRVSAV(self, cmd, args):
|
||||
pass
|
||||
def doCommandCSET(self, cmd, args):
|
||||
loop = int(args[0])
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 2:
|
||||
loop = 2
|
||||
self.CSET[loop] = ",".join(args[1:])
|
||||
idx = int(args[0])
|
||||
if idx in self.CSET:
|
||||
newVal = self.mergeParams(4, self.CSET[idx], ",".join(args[1:]))
|
||||
self.CSET[idx] = newVal
|
||||
self.LOOPINPUT[idx] = ord(newVal.split(",")[0]) - 64
|
||||
def doQueryCSET(self, cmd, args):
|
||||
loop = int(args[0])
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 2:
|
||||
loop = 2
|
||||
self.write("%s" % self.CSET[loop])
|
||||
idx = int(args[0])
|
||||
if idx in self.CSET:
|
||||
self.write(self.CSET[idx])
|
||||
else:
|
||||
raise IndexError
|
||||
def doCommandDATETIME(self, cmd, args):
|
||||
print "Unimplemented Command: \"DATETIME\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
def doQueryDATETIME(self, cmd, args):
|
||||
@@ -346,9 +358,13 @@ class Lakeshore340(LakeshoreDevice):
|
||||
if idx in self.FILTER:
|
||||
self.write(self.FILTER[idx])
|
||||
else:
|
||||
self.write("0")
|
||||
raise IndexError
|
||||
def doQueryHTR(self, cmd, args):
|
||||
self.write("%f" % self.HTR)
|
||||
idx = int(args[0])
|
||||
if idx in self.HTR:
|
||||
self.write("%f" % self.HTR[idx])
|
||||
else:
|
||||
raise IndexError
|
||||
def doQueryHTRST(self, cmd, args):
|
||||
self.write("%d" % self.HTRST)
|
||||
def doQueryIEEE(self, cmd, args):
|
||||
@@ -394,12 +410,14 @@ class Lakeshore340(LakeshoreDevice):
|
||||
self.write("%d" % self.KEYST)
|
||||
self.KEYST = 0
|
||||
def doQueryKRDG(self, cmd, args):
|
||||
loop = ord(args[0]) - 64
|
||||
if loop < 1:
|
||||
loop = 1
|
||||
if loop > 4:
|
||||
loop = 4
|
||||
self.write("%f" % (self.KRDG[loop] + self.RANDOM))
|
||||
idx = ord(args[0]) - 64
|
||||
if idx in self.KRDG:
|
||||
if self.RANDOM > 0:
|
||||
self.write("%f" % (self.KRDG[idx] + random.uniform(-self.RANDOM, self.RANDOM)))
|
||||
else:
|
||||
self.write("%f" % (self.KRDG[idx]))
|
||||
else:
|
||||
self.write("+000.0")
|
||||
def doQueryLDAT(self, cmd, args):
|
||||
self.write("3.000E+02") # TODO
|
||||
print "TODO implement Query: \"LDAT?\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
|
||||
@@ -17,6 +17,7 @@ class Lakeshore370(LakeshoreDevice):
|
||||
print Lakeshore370.__name__, "ctor"
|
||||
self.CONFIG_LOOPS = [1]
|
||||
self.CONFIG_SNSRS = [i for i in range(1,17)]
|
||||
self.CONFIG_RAMPS = [1]
|
||||
self.reset_powerup()
|
||||
|
||||
def doCommand(self, command, params):
|
||||
@@ -35,8 +36,12 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.ANALOG = {1: "0,1,1,1,400.0,0.0,0.0", 2: "0,1,1,1,400.0,0.0,0.0"}
|
||||
self.AOUT = { 1: 0.0, 2: 0.0 }
|
||||
self.CMODE = {}
|
||||
self.CSET = {}
|
||||
self.LOOPINPUT = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.CMODE[idx] = 1
|
||||
self.CSET[idx] = "1,0,1,30,1,8,100"
|
||||
self.LOOPINPUT[idx] = idx
|
||||
self.CMR = 0
|
||||
self.CPOL = 0
|
||||
self.CRVHDR = {}
|
||||
@@ -47,12 +52,13 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.CRVPT = {}
|
||||
for i in range(1,21):
|
||||
self.CRVPT[i] = [(0.0, 0.0)]
|
||||
self.CSET = "1,0,1,30,1,8,100"
|
||||
self.DOUT = 0
|
||||
self.FILTER = {1: "1,10,2"}
|
||||
self.FREQ = 2
|
||||
self.GUARD = 0
|
||||
self.HTR = 0.0
|
||||
self.HTR = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.HTR[idx] = 0.0
|
||||
self.HTRRNG = 0
|
||||
self.HTRST = 0
|
||||
self.IDN = "LSCI,MODEL370,123456,00000000,1.5"
|
||||
@@ -70,11 +76,16 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.LOCK = "0,000"
|
||||
self.MDAT = {1: "0,0,1"} # Min,Max,Reset
|
||||
self.MOUT = {1: "0.0", 2: "0.0", 3: "0.0", 4: "0.0"}
|
||||
self.OUTMODE = {1: "1,1,0", 2: "1,2,0", 3: "1,3,0", 4: "1,4,0"}
|
||||
self.PID = {1: "+0150.0,+0005.0,+000.0", 2: "+0150.0,+0005.0,+000.0"}
|
||||
self.RAMP_ON = {1: 0}
|
||||
self.RAMP_RATE = {1: 0.000}
|
||||
self.RAMP_ST = {1: 0}
|
||||
self.PID = {}
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
self.PID[idx] = "+0150.0,+0005.0,+000.0"
|
||||
self.RAMP_ON = {}
|
||||
self.RAMP_RATE = {}
|
||||
self.RAMP_ST = {}
|
||||
for idx in self.CONFIG_RAMPS:
|
||||
self.RAMP_ON[idx] = 0
|
||||
self.RAMP_RATE[idx] = 0.000
|
||||
self.RAMP_ST[idx] = 0
|
||||
self.RAMP_TIME = 0.0
|
||||
self.RDGST = {"A": 0, "B": 0, "C": 0, "D": 0}
|
||||
self.RELAY = {1: "1,A,0", 2: "2,A,0"}
|
||||
@@ -94,7 +105,7 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.OPC = 0
|
||||
self.SRE = 0
|
||||
self.TST = 0
|
||||
self.RANDOM = 0.5
|
||||
self.RANDOM = 0.0
|
||||
|
||||
def doIteration(self):
|
||||
delta_time = time.time() - self.LAST_ITERATION
|
||||
@@ -103,7 +114,8 @@ class Lakeshore370(LakeshoreDevice):
|
||||
#print "DoIteration:", delta_time
|
||||
self.LAST_ITERATION = time.time()
|
||||
for idx in self.CONFIG_LOOPS:
|
||||
# TODO - progress ramping setpoints (SP)
|
||||
ndx = self.LOOPINPUT[idx]
|
||||
# progress ramping setpoints (SP)
|
||||
if idx in self.RAMP_ON and self.RAMP_ON[idx] and self.TARGET[idx] != self.SETP[idx]:
|
||||
delta_time = time.time() - self.RAMP_START_TIME[idx];
|
||||
delta_temp = self.RAMP_RATE[idx] * (delta_time / 60.0)
|
||||
@@ -119,15 +131,15 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.RAMP_ST[idx] = 0
|
||||
|
||||
# TODO - iterate Power Level
|
||||
if self.KRDG[idx] <> self.SETP[idx]:
|
||||
self.HTR = self.SETP[idx] - self.KRDG[idx]
|
||||
if self.HTR > 100.0:
|
||||
self.HTR = 100.0
|
||||
elif self.HTR < -100.0:
|
||||
self.HTR = -100.0
|
||||
if self.KRDG[ndx] <> self.SETP[idx]:
|
||||
self.HTR[idx] = self.SETP[idx] - self.KRDG[ndx]
|
||||
if self.HTR[idx] > 100.0:
|
||||
self.HTR[idx] = 100.0
|
||||
elif self.HTR[idx] < -100.0:
|
||||
self.HTR[idx] = -100.0
|
||||
|
||||
# TODO - iterate Process Values (PV)
|
||||
self.KRDG[idx] = (0.9 * self.KRDG[idx] + 0.1 * self.SETP[idx])
|
||||
self.KRDG[ndx] = (0.9 * self.KRDG[ndx] + 0.1 * self.SETP[idx])
|
||||
|
||||
def doCommandCLS(self, cmd, args):
|
||||
print "Unimplemented Command: \"*CLS\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -259,9 +271,17 @@ class Lakeshore370(LakeshoreDevice):
|
||||
self.write("1.0E+01,1.0+E02") # TODO
|
||||
print "TODO implement Query: \"CRVPT?\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
def doCommandCSET(self, cmd, args):
|
||||
self.CSET = args[0]
|
||||
idx = 1
|
||||
if idx in self.CSET:
|
||||
newVal = self.mergeParams(7, self.CSET[idx], ",".join(args[:]))
|
||||
self.CSET[idx] = newVal
|
||||
self.LOOPINPUT[idx] = int(args[0])
|
||||
def doQueryCSET(self, cmd, args):
|
||||
self.write("%s" % self.CSET)
|
||||
idx = 1
|
||||
if idx in self.CSET:
|
||||
self.write(self.CSET[idx])
|
||||
else:
|
||||
raise IndexError
|
||||
def doCommandDFLT(self, cmd, args):
|
||||
if args[0] == "99":
|
||||
print "Unimplemented Command: \"DFLT 99\" in \"" + cmd + " " + ",".join(args) + "\""
|
||||
@@ -293,7 +313,7 @@ class Lakeshore370(LakeshoreDevice):
|
||||
if idx in self.FILTER:
|
||||
self.write(self.FILTER[idx])
|
||||
else:
|
||||
self.write("0")
|
||||
raise IndexError
|
||||
def doCommandFREQ(self, cmd, args):
|
||||
self.FREQ = int(args[0])
|
||||
def doQueryFREQ(self, cmd, args):
|
||||
@@ -303,7 +323,11 @@ class Lakeshore370(LakeshoreDevice):
|
||||
def doQueryGUARD(self, cmd, args):
|
||||
self.write("%d" % self.GUARD)
|
||||
def doQueryHTR(self, cmd, args):
|
||||
self.write("%f" % self.HTR)
|
||||
idx = 1
|
||||
if idx in self.HTR:
|
||||
self.write("%f" % self.HTR[idx])
|
||||
else:
|
||||
raise IndexError
|
||||
def doCommandHTRRNG(self, cmd, args):
|
||||
self.HTRRNG = int(args[0])
|
||||
def doQueryHTRRNG(self, cmd, args):
|
||||
@@ -390,14 +414,12 @@ class Lakeshore370(LakeshoreDevice):
|
||||
response = "%d" % self.RAMP_ST
|
||||
self.write(response)
|
||||
def doQueryRDGK(self, cmd, args):
|
||||
if len(args) == 0 or len(args[0]) == 0:
|
||||
idx = 1
|
||||
else:
|
||||
idx = int(args[0])
|
||||
idx = int(args[0])
|
||||
if idx in self.KRDG:
|
||||
self.RANDOM = random.uniform(-0.5, 0.5)
|
||||
self.RANDOM = 0.5
|
||||
self.write("%f" % (self.KRDG[idx] + self.RANDOM))
|
||||
if self.RANDOM > 0:
|
||||
self.write("%f" % (self.KRDG[idx] + random.uniform(-self.RANDOM, self.RANDOM)))
|
||||
else:
|
||||
self.write("%f" % (self.KRDG[idx]))
|
||||
else:
|
||||
self.write("+000.0")
|
||||
def doQueryRDGPWR(self, cmd, args):
|
||||
|
||||
@@ -61,6 +61,31 @@ class LakeshoreDevice(object):
|
||||
self.write(self.IDN)
|
||||
return True
|
||||
|
||||
def doQueryRANDOM(self, command, params):
|
||||
self.write("%f" % self.RANDOM)
|
||||
|
||||
def doCommandRANDOM(self, command, params):
|
||||
self.RANDOM = float(params[0])
|
||||
|
||||
def mergeParams(self, count, theOld, theNew):
|
||||
oldParams = theOld.split(",")
|
||||
if len(oldParams) != count:
|
||||
raise IndexError
|
||||
newParams = theNew.split(",")
|
||||
if len(newParams) > count:
|
||||
raise IndexError
|
||||
mergedParams = []
|
||||
for idx in range(count):
|
||||
if oldParams[idx] == '':
|
||||
raise ValueError
|
||||
if idx >= len(newParams) or newParams[idx] == '':
|
||||
mergedParams.append(oldParams[idx])
|
||||
else:
|
||||
mergedParams.append(newParams[idx])
|
||||
if len(mergedParams) != count:
|
||||
raise IndexError
|
||||
return ",".join(mergedParams)
|
||||
|
||||
def dataReceived(self, data):
|
||||
print LakeshoreDevice.__name__, "PDU: \"" + data + "\""
|
||||
command = data.split()[0]
|
||||
|
||||
Reference in New Issue
Block a user