Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
iexcode
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
29id
iexcode
Commits
89e0abc2
Commit
89e0abc2
authored
2 years ago
by
29iduser
Browse files
Options
Downloads
Patches
Plain Diff
updated Lakeshore_355
parent
c5bde9b9
No related branches found
No related tags found
1 merge request
!12
updated Lakeshore_355 - made a class
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
iexcode/instruments/Lakeshore_335.py
+171
-276
171 additions, 276 deletions
iexcode/instruments/Lakeshore_335.py
with
171 additions
and
276 deletions
iexcode/instruments/Lakeshore_335.py
+
171
−
276
View file @
89e0abc2
...
...
@@ -10,17 +10,182 @@ from epics import caget, caput
from
iexcode.instruments.IEX_BL_config
import
*
from
iexcode.instruments.utilities
import
read_dict
def
Lakeshore_
reset
(
pv
,
d
)
:
class
Lakeshore_
335
:
"""
resets the l
ake
shor
t to the default paramters defind in the dictionary d
L
akeshor
e 355 data class
"""
for
key
in
d
.
keys
():
caput
(
pv
+
key
,
d
[
key
])
def
__init__
(
self
,
ioc
,
**
kwargs
):
"""
ioc =
"
29idARPES:
"
**kwargs
Q =
"
TC1:
"
defaults => dictionary of default parameter used by reset
"""
kwargs
.
setdefault
(
'
Q
'
,
'
TC1:
'
)
self
.
pv
=
ioc
+
"
LS335:
"
+
kwargs
[
'
Q
'
]
self
.
reset
(
**
kwargs
)
self
.
get
()
pass
def
reset
(
self
,
**
kwargs
):
"""
resets the lake short to the default paramters defind in the dictionary defaults
**kwargs
defaults = {
"
read.SCAN
"
:
"
.5 second
"
,
"
OUT1:Cntrl
"
:
"
A
"
,
"
OUT2:Cntrl
"
:
"
B
"
,
"
OUT1:Mode
"
:
"
Closed Loop
"
}
"""
kwargs
.
setdefault
(
"
defaults
"
,{
"
read.SCAN
"
:
"
.5 second
"
,
"
OUT1:Cntrl
"
:
"
A
"
,
"
OUT2:Cntrl
"
:
"
B
"
,
"
OUT1:Mode
"
:
"
Closed Loop
"
,
"
P1
"
:
1
,
"
I1
"
:
5
,
"
D1
"
:
1
,
"
RampR1
"
:
5
,
"
OnRamp1
"
:
"
ON
"
})
d
=
kwargs
[
'
defaults
'
]
for
key
in
d
.
keys
():
caput
(
self
.
pv
+
key
,
d
[
key
])
def
heater_range_list
(
self
):
return
[
"
off
"
,
"
low
"
,
"
medium
"
,
"
high
"
]
def
pv_dictionary
(
self
):
d
=
{
"
INA
"
:
None
,
"
INB
"
:
None
,
"
IN1
"
:
None
,
"
IN2
"
:
None
,
"
IN1:Name_RBV
"
:
""
,
"
IN2:Name_RBV
"
:
""
,
"
OUT1:SP
"
:
None
,
"
OUT1:SP_RBV
"
:
None
,
"
HTR1
"
:
None
,
"
HTR1:Range
"
:
""
,
"
HTR1:Range_RBV
"
:
""
,
"
OUT1:Cntrl_RBV
"
:
""
,
"
P1
"
:
None
,
"
P1_RBV
"
:
None
,
"
I1
"
:
None
,
"
I1_RBV
"
:
None
,
"
D1
"
:
None
,
"
D1_RBV
"
:
None
,
"
RampR1
"
:
None
,
"
RampR1_RBV
"
:
None
,
"
OnRamp1
"
:
""
,
"
OnRamp1_RBV
"
:
""
,
}
def
get
(
self
):
"""
gets the current valuse
"""
d
=
self
.
pv_dictionary
()
caput
(
self
.
pv
+
"
read.PROC
"
,
1
)
sleep
(
1
)
caput
(
self
.
pv
+
"
read.PROC
"
,
0
)
for
key
in
d
.
keys
():
if
d
[
key
]
!=
None
:
caget
(
self
.
pv
+
key
,
as_string
=
True
)
else
:
caget
(
self
.
pv
+
key
)
return
d
def
set
(
self
,
TA_sp
,
bandwidth
=
5
,
seconds
=
5
*
60
,
heater_range
=
None
,
out_num
=
1
):
"""
TA_SP = temperature set point
bandwidth = the temperature range acceptable
seconds = time to wait for stablized
heater_range =
"
off
"
,
"
low
"
,
"
medium
"
,
"
high
"
= None then uses current setting
out_num = control loop number (1 or 2)
"""
d
=
self
.
pv_dictionary
TA
=
caget
(
self
.
pv
+
"
INA
"
)
while
True
:
#sepoint with +/- current temperature
if
TA
-
bandwidth
<=
TA_sp
>
TA
+
bandwidth
:
#regulate off sample
self
.
regulate_TA
(
TA_sp
,
heater_range
,
out_num
)
if
self
.
TA_stable
(
TA_sp
,
bandwidth
,
seconds
)
==
True
:
break
else
:
self
.
regulate_TB
(
TA_sp
,
heater_range
,
out_num
)
caget
()
def
TA_stable
(
self
,
T_sp
,
bandwidth
=
5
,
seconds
=
5
*
60
,
out_num
=
1
):
"""
returns True or False is the temperature is with in the bandwidth over a given
time interval in seconds
T_sp = temperature set point
bandwidth = +/- Temperature to be stablized
seconds = time to wait to stablize
out_num = control loop number (1 or 2)
"""
read_interval
=
0.5
name_rbv
=
caget
(
self
.
pv
+
"
IN
"
+
str
(
out_num
)
+
"
:Name_RBV
"
,
as_string
=
True
)
for
t
in
range
(
0
,
seconds
/
read_interval
):
#sampling every 0.5 seconds
T
=
caget
(
self
.
pv
+
"
IN
"
+
str
(
out_num
))
if
T
-
bandwidth
<=
T_sp
>
T
+
bandwidth
:
return
False
else
:
sleep
(
read_interval
)
return
True
def
regulate_TA
(
self
,
T_sp
,
heater_range
=
None
,
out_num
=
1
):
"""
"""
self
.
Cntrl
(
1
,
'
A
'
)
self
.
Cntrl
(
2
,
'
B
'
)
sleep
(
0.5
)
self
.
set_point
(
1
,
T_sp
,
heater_range
)
self
.
set_point
(
2
,
0
,
heater_range
=
'
off
'
)
def
regulate_TB
(
self
,
T_sp
,
heater_range
=
None
,
out_num
=
1
):
self
.
Cntrl
(
1
,
'
B
'
)
self
.
Cntrl
(
2
,
'
A
'
)
sleep
(
0.5
)
self
.
set_point
(
1
,
T_sp
,
heater_range
)
self
.
set_point
(
2
,
0
,
heater_range
=
'
off
'
)
def
Cntrl
(
self
,
out_num
,
sensor
):
"""
out_num = control loop number (1 or 2)
sensor =
'
A
'
or
'
B
'
"""
caput
(
self
.
pv
+
"
OUT
"
+
str
(
out_num
)
+
"
:Cntrl
"
,
sensor
)
sleep
(.
5
)
def
set_point
(
self
,
out_num
,
T_sp
,
heater_range
=
None
):
caput
(
self
.
pv
+
"
OUT
"
+
str
(
out_num
)
+
"
:SP
"
)
self
.
set_heater_range
(
out_num
,
heater_range
)
def
set_heater_range
(
self
,
out_num
,
heater_range
):
"""
sets the heater range
out_num = control loop number (1 or 2)
"""
if
heater_range
==
None
:
heater_range
=
caget
(
self
.
pv
+
"
OUT
"
+
str
(
out_num
)
+
"
HTR1:Range_RBV
"
,
as_string
=
True
)
else
:
heater_range
=
heater_range
.
upper
()
if
heater_range
not
in
self
.
heater_range_list
():
message
=
"
heater_range =
"
+
heater_range
+
"
not a valid choice
"
message
+=
"
\n
choose one of
"
+
str
(
self
.
heater_range_list
)
print_warning_message
(
message
)
return
else
:
caput
(
self
.
pv
+
"
OUT
"
+
str
(
out_num
)
+
"
HTR1:Range
"
,
heater_range
)
sleep
(.
5
)
return
caget
(
self
.
pv
+
"
OUT
"
+
str
(
out_num
)
+
"
HTR1:Range_RBV
"
,
as_string
=
True
)
#############################################################################################################
############################## Lakeshore 335 Diode Curves ##############################
#############################################################################################################
#
#############################################################################################################
#---Settings as of 12/04/2018---
#DiodeCurve_Write(22,"SI435")
#DiodeCurve_SetInput("A",22,400)
...
...
@@ -145,7 +310,7 @@ def DiodeCurve_SetInput(Channel,Curve,Tmax):
caput
(
PV
,
cmd
,
wait
=
True
,
timeout
=
1800
)
##############################################################################################################
############################## PID Settings ##############################
############################## PID Settings
for open cycle
##############################
##############################################################################################################
...
...
@@ -159,184 +324,7 @@ def DiodeCurve_SetInput(Channel,Curve,Tmax):
#Lakeshore 355 I = time in seconds for one oscilation / 1000; D=50-100 for starters
def
PID_dict
(
which
,
T
):
#Dictionary of PID setting to try for the ARPES chamber
"""
Dictionary for common PID setting for the ARPES system.
Since the PID is dependent on the cooling power, this will change with the cryogen and the flow rate:
- Flow =
"
LHe,LN
"
=> LHe = needle valve =
"
on
"
and flow = 70
"""
PID
=
{}
# PID[which,T]=[P,I,D,Range] Range=HIGH,MEDIUM,LOW,OFF
PID
[
'
RT
'
,
378.0
]
=
[
200.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
RT
'
,
375.0
]
=
[
200.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
RT
'
,
338.0
]
=
[
100.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
RT
'
,
298.0
]
=
[
20.0
,
0.0
,
0.0
,
'
LOW
'
]
PID
[
'
GHe
'
,
378.0
]
=
[
210.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
GHe
'
,
375.0
]
=
[
210.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
GHe
'
,
338.0
]
=
[
130.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
GHe
'
,
298.0
]
=
[
60.0
,
0.0
,
0.0
,
'
MEDIUM
'
]
PID
[
'
GHe
'
,
250.0
]
=
[
10.0
,
0.0
,
0.0
,
'
LOW
'
]
PID
[
'
LHe
'
,
298.0
]
=
[
20.0
,
5.0
,
1.0
,
'
HIGH
'
]
# +/- 1.1 deg, over 10 min, heater power 53%
PID
[
'
LHe
'
,
200.0
]
=
[
10.0
,
5.0
,
1.0
,
'
HIGH
'
]
# +/- 1.1 deg, over 10 min, heater power 53%
PID
[
'
LHe
'
,
150.0
]
=
[
200.0
,
0.1
,
0
,
'
HIGH
'
]
# Stablized at 153, heater power 43%
PID
[
'
LHe
'
,
180.0
]
=
[
200.0
,
0.1
,
0
,
'
HIGH
'
]
PID
[
'
LHe
'
,
230.0
]
=
[
200.0
,
0.1
,
0
,
'
HIGH
'
]
PID
[
'
LHe
'
,
300.0
]
=
[
200.0
,
0.1
,
0
,
'
HIGH
'
]
PID
[
'
LHe
'
,
40.0
]
=
[
200.0
,
0.1
,
0
,
'
HIGH
'
]
#
PID
[
'
LN2
'
,
230
]
=
[
10.0
,
0.6
,
100
,
'
HIGH
'
]
#stable 237.83, needle valve=ON; flow 6 half turns from max)
PID
[
'
LN2
'
,
180
]
=
[
50.0
,
4
,
100
,
'
MEDIUM
'
]
return
PID
[
which
,
T
]
def
PID_set
(
which
,
T
,
heater
=
'
ON
'
):
"""
Uses preset PID settings as defined in PID_dict()
To cool down: heater=
'
OFF
'
"""
P
,
I
,
D
,
Range
=
PID_dict
(
which
,
T
)
caput
(
"
29idARPES:LS335:TC1:P1
"
,
P
)
caput
(
"
29idARPES:LS335:TC1:I1
"
,
I
)
caput
(
"
29idARPES:LS335:TC1:D1
"
,
D
)
if
heater
==
'
ON
'
:
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
Range
)
elif
heater
==
'
OFF
'
:
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
'
OFF
'
)
print
(
'
\n
P =
'
,
PID_dict
(
which
,
T
)[
0
])
print
(
'
I =
'
,
PID_dict
(
which
,
T
)[
1
])
print
(
'
D =
'
,
PID_dict
(
which
,
T
)[
2
])
print
(
'
Range =
'
,
PID_dict
(
which
,
T
)[
3
])
def
SetT_Sample
(
which
,
T
,
precision
=
5
,
minutes
=
15
,
offset
=
6
):
"""
Sets PID settings for a given set point as defined in PID_dict().
Available set points:
which =
'
RT
'
: T = 298, 338, 375
which =
'
LHe
'
: T = 150, 200
which =
'
GHe
'
: T = 250, 298, 338, 370
which =
'
LN2
'
: T = 230, 180
precision is temperature in K
"""
current_T
=
caget
(
"
29idARPES:LS335:TC1:IN1
"
)
print
(
'
\n
Set T to
'
+
str
(
T
)
+
'
K @
'
+
dateandtime
())
if
T
>
current_T
:
PID_set
(
which
,
T
,
'
ON
'
)
Range
=
PID_dict
(
which
,
T
)[
3
]
SetT_Up
(
T
,
offset
,
Range
,
precision
,
minutes
)
else
:
PID_set
(
which
,
T
,
'
OFF
'
)
Range
=
PID_dict
(
which
,
T
)[
3
]
SetT_Down
(
T
,
offset
,
Range
,
precision
,
minutes
)
caput
(
"
29idARPES:LS335:TC1:OUT1:SP
"
,
T
)
def
SetT_Up
(
T
,
offset
,
Range
,
precision
=
5
,
minutes
=
15
):
if
Range
==
'
LOW
'
:
Range
=
1
if
Range
==
'
MEDIUM
'
:
Range
=
2
if
Range
==
'
HIGH
'
:
Range
=
3
t
=
15
u
=
0
caput
(
'
29idARPES:LS335:TC1:OUT1:SP
'
,
T
)
# set the set point to T
while
True
:
# while TA < T
TA
=
caget
(
'
29idARPES:LS335:TC1:IN1
'
)
# get current temperature at the sample
TB
=
caget
(
'
29idARPES:LS335:TC1:IN2
'
)
# get current temperature (B=cold finger)
if
TA
<
T
-
precision
:
# if it hasn't reach SP
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
min
(
Range
,
3
))
# increase heater range to Range +1
while
True
:
# while TB < T+offset:
TB
=
caget
(
'
29idARPES:LS335:TC1:IN2
'
)
# get current temperature at the cold finger
if
(
t
%
120
)
==
0
:
print
(
'
\n
TA =
'
,
TA
,
'
TB =
'
,
TB
,
'
@
'
,
dateandtime
())
if
TB
<
(
T
+
offset
)
and
t
<=
minutes
*
60
:
#if it hasn't reach the SP+offser
sleep
(
15
)
t
+=
15
#print t, TA, TB
elif
TB
<
(
T
+
offset
)
and
t
>
minutes
*
60
:
heater_power
=
caget
(
'
29idARPES:LS335:TC1:HTR1
'
)
heater_range
=
caget
(
'
29idARPES:LS335:TC1:HTR1:Range
'
)
if
heater_power
>
90
:
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
min
(
heater_range
+
1
,
3
))
print
(
'
Change Range to
'
,
caget
(
'
29idARPES:LS335:TC1:HTR1:Range
'
),
'
@
'
,
dateandtime
())
elif
heater_range
==
3
or
heater_power
<=
90
:
P
=
caget
(
"
29idARPES:LS335:TC1:P1
"
)
caput
(
"
29idARPES:LS335:TC1:P1
"
,
P
*
1.5
)
print
(
'
Change P to
'
,
caget
(
"
29idARPES:LS335:TC1:P1
"
),
'
@
'
,
dateandtime
())
t
=
0
else
:
#else
break
# break
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
'
OFF
'
)
# turn off the heater
elif
TA
>
T
-
precision
:
# if it has reach the set point
break
# break
print
(
'
TA =
'
,
TA
,
'
TB =
'
,
TB
,
'
@
'
,
dateandtime
())
# print temperatures
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
Range
)
# set the heater range to preset value
def
SetT_Down
(
T
,
offset
,
Range
,
precision
=
5
,
minutes
=
15
):
t
=
0
caput
(
'
29idARPES:LS335:TC1:OUT1:SP
'
,
T
)
# set the set point to T
while
True
:
# while TA < T
TA
=
caget
(
'
29idARPES:LS335:TC1:IN1
'
)
TB
=
caget
(
'
29idARPES:LS335:TC1:IN2
'
)
if
(
t
%
120
)
==
0
:
print
(
'
\n
TA =
'
,
TA
,
'
TB =
'
,
TB
,
'
@
'
,
dateandtime
())
if
TA
>
T
+
precision
:
sleep
(
15
)
t
+=
15
elif
t
>
minutes
*
60
:
P
=
caget
(
"
29idARPES:LS335:TC1:P1
"
)
caput
(
"
29idARPES:LS335:TC1:P1
"
,
P
/
1.5
)
t
=
0
else
:
break
caput
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
Range
)
print
(
'
TA =
'
,
TA
,
'
TB =
'
,
TB
,
'
@
'
,
dateandtime
())
def
Get_PID
(
which
=
'
LHe
'
):
T
=
caget
(
"
29idARPES:LS335:TC1:IN1
"
)
SP
=
caget
(
"
29idARPES:LS335:TC1:OUT1:SP
"
)
P
=
caget
(
"
29idARPES:LS335:TC1:P1
"
)
I
=
caget
(
"
29idARPES:LS335:TC1:I1
"
)
D
=
caget
(
"
29idARPES:LS335:TC1:D1
"
)
Range
=
caget
(
"
29idARPES:LS335:TC1:HTR1:Range
"
,
as_string
=
True
)
# print SP,P,I,D,Range
print
(
"
Current T:
"
,
T
,
'
K
'
)
print
(
"
PID[
\'
"
+
which
+
"
\'
,
"
+
str
(
SP
)
+
"
]=[
"
+
str
(
P
)
+
"
,
"
+
str
(
I
)
+
"
,
"
+
str
(
D
)
+
"
,
\'
"
+
Range
+
"
\'
]
"
)
##############################################################################################################
############################## SI9700 Kludge ##############################
##############################################################################################################
def
ResetPID
():
caput
(
'
29idd:tc1:SetPID_1.INPA
'
,
''
)
caput
(
'
29idd:tc1:SetPID_1.INPB
'
,
''
)
caput
(
'
29idd:tc1:SetPID_1.INPC
'
,
''
)
def
GetCurrentPID
():
T
=
caget
(
'
29idd:tc1:getVal_A.VAL
'
)
P
=
caget
(
'
29idd:tc1:SetPID_1.A
'
)
I
=
caget
(
'
29idd:tc1:SetPID_1.B
'
)
D
=
caget
(
'
29idd:tc1:SetPID_1.C
'
)
return
T
,
P
,
I
,
D
def
SetTempSetting
(
T
,
P
,
I
,
D
):
#Change the sample temperature T with the specified PID values
caput
(
'
29idd:tc1:getVal_A.VAL
'
,
T
)
caput
(
'
29idd:tc1:SetPID_1.A
'
,
P
)
caput
(
'
29idd:tc1:SetPID_1.B
'
,
I
)
caput
(
'
29idd:tc1:SetPID_1.C
'
,
D
)
# GetCurrentPID => (60.0121, 8.0, 50.0, 12.0) ## Temperature overshoots no more than 5.5 degrees
#it takes about 3 min to stablize at any temp
#cooling is about 10 degrees/min
#functions use from ScanFunctions_IEX import BL_ioc
def
PVLakeshores
(
which
):
"""
which = RSXS / ARPES /Hydra / DetPool
...
...
@@ -351,98 +339,5 @@ def PVLakeshores(which):
}
return
d
[
which
]
def
dateandtime
():
return
strftime
(
"
%a %d %b %Y %H:%M:%S
"
,
localtime
())
def
tempr
(
which
=
None
):
"""
reads the temperature in the current branch unless otherwise specificed
"""
if
which
==
None
:
which
=
BL_ioc
()
PVs
=
PVLakeshores
(
which
)
sample
=
PVs
[
0
]
+
PVs
[
1
]
print
(
which
+
"
Sample Temperature: {} K
"
.
format
(
caget
(
sample
)))
def
temps
(
tempset
,
which
=
None
):
"""
Set sthe sample temperature set point and waits for it to stablelize for the current branch
unless specified by which = Kappa / ARPES /Hydra set by PVLakeshores
"""
if
which
==
None
:
which
=
BL_ioc
()
P
,
Sample
,
ColdFinger
,
SetPoint
=
PVLakeshores
(
which
)
print
(
"
Initial Sample Temperature:
"
,
caget
(
P
+
Sample
),
"
K
"
,
dateandtime
())
caput
(
P
+
SetPoint
,
1.0
*
tempset
)
stop_var
=
0
b
=
0
sleep
(
0
)
while
b
==
0
:
delta
=
abs
(
caget
(
P
+
Sample
)
-
1.0
*
tempset
)
if
abs
(
delta
)
<
1
:
c
=
0
while
c
<
10
:
sleep
(
1
)
delta
=
delta
+
(
caget
(
P
+
Sample
)
-
1.0
*
tempset
)
c
=
c
+
1
if
abs
(
delta
/
10
)
<
1
:
print
(
"
Stable Sample Temperature:
"
,
caget
(
P
+
Sample
),
"
K
"
,
dateandtime
())
b
=
1
else
:
temp1
=
caget
(
P
+
Sample
)
sleep
(
10
)
temp2
=
caget
(
P
+
Sample
)
if
abs
(
temp1
-
temp2
)
<
0.1
:
sleep
(
30
)
temp2
=
caget
(
P
+
Sample
)
if
abs
(
temp1
-
temp2
)
<
.
5
:
print
(
"
UNABLE TO STABLIZE TEMPERATURE! Stopped at T=:
"
,
caget
(
P
+
Sample
),
"
K
"
,
dateandtime
())
b
=
1
def
ARPES_warming
(
Tmax
,
PowerMax
=
50
,
Tdiff
=
10
):
"""
Ramps the temperature up for ARPES using open loop and manual power at PowerMax with
the heater on High until Tmax - Tdif is reached and then switches to
closed loop with the heater on Medium
PowerMax=50,Tdiff=10
PowerMax=55,Tdiff=25
"""
P
=
"
29idARPES:LS335:TC1:
"
#Needs modified in controller changed
Tsample
=
P
+
"
IN1
"
Tcontrol
=
P
+
"
IN2
"
Tsetpoint
=
P
+
"
OUT1:SP
"
HeaterRange
=
P
+
"
HTR1:Range
"
ControlMode
=
P
+
"
OUT1:Mode
"
ManualPower
=
P
+
"
OUT1:MOUT
"
caput
(
Tsetpoint
,
Tmax
)
caput
(
ManualPower
,
PowerMax
)
caput
(
ControlMode
,
"
Open Loop
"
)
caput
(
HeaterRange
,
'
HIGH
'
)
print
(
"
T
"
,
caget
(
Tsample
))
print
(
"
Started warming:
"
,
dateandtime
())
while
True
:
TA
=
caget
(
Tsample
)
TB
=
caget
(
Tsample
)
if
TB
>=
Tmax
:
print
(
"
Control is to high
"
,
TB
)
break
if
TA
<
Tmax
-
Tdiff
:
sleep
(
60
)
else
:
break
print
(
"
T
"
,
caget
(
Tsample
))
print
(
"
Switch to closed loop
"
,
dateandtime
())
caput
(
HeaterRange
,
'
MEDIUM
'
);
sleep
(
1
)
caput
(
ControlMode
,
"
Closed Loop
"
);
sleep
(
1
)
caput
(
HeaterRange
,
'
OFF
'
);
sleep
(
1
)
caput
(
HeaterRange
,
'
MEDIUM
'
);
sleep
(
1
)
temps
(
Tmax
,
which
=
'
ARPES
'
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment