1 #pragma rtGlobals=3// Use modern global access method and strict wave access.
3 #pragma IgorVersion = 6.2
4 #pragma ModuleName = PearlAnneal
101 dfref savedf = GetDataFolderDFR()
106 if (nvar_exists(init_done))
117 variable /g init_done = 1
129 dfref savedf = getdatafolderdfr()
131 newdatafolder /o/s packages
132 newdatafolder /o/s $package_name
135 string /g graphname =
"graph_anneal_tracker"
136 string /g dataname =
"anneal"
143 string /g controls, monitors
144 variable /g psu_connected = 0
145 variable /g ls_connected = 0
146 variable /g pyro_connected = 0
147 variable /g vac_connected = 0
150 variable /g chidSetVolts = 0
151 variable /g chidGetVolts = 0
152 variable /g chidSetAmps = 0
153 variable /g chidGetAmps = 0
154 variable /g chidGetWatts = 0
155 variable /g chidSetOnOff = 0
156 variable /g chidGetOnOff = 0
157 variable /g chidStatCC = 0
158 variable /g chidStatCV = 0
159 variable /g chidGetRemote = 0
161 variable /g chidGetTempA = 0
162 variable /g chidGetTempB = 0
163 variable /g chidGetPyro1 = 0
164 variable /g chidGetPyroQ = 0
166 variable /g chidGetPressure = 0
169 variable /g curGetVolts = 0
170 variable /g curSetVolts = 0
171 variable /g curGetAmps = 0
172 variable /g curSetAmps = 0
173 variable /g curGetWatts = 0
174 variable /g curSetWatts = 0
175 variable /g curGetOnOff = 0
176 variable /g curStatCC = 0
177 variable /g curStatCV = 0
179 variable /g curGetTempA = 0
180 variable /g curGetTempB = 0
181 variable /g curGetPyro1 = 0
182 variable /g curGetPyroQ = 0
184 variable /g curGetPressure = 0
187 variable /g curTargetWatts = nan
188 variable /g curTargetTempA = nan
189 variable /g curTargetTempB = nan
190 variable /g curTargetTempPy = nan
191 variable /g curTripTempA = nan
192 variable /g curTripTempB = nan
193 variable /g curTripTempPy = nan
194 variable /g curLimitPressure = nan
195 variable /g curTripPressure = nan
196 variable /g curPhaseMinutes = 0
199 make /n=500 /o recVolts, recAmps, recWatts, recTemp, recPressure, recMinutes
201 variable /g recMinutesStart
203 recMinutesStart = datetime / 60
206 variable /g ramp_status
208 variable /g ramp_phase
212 variable /g minutes_start
214 variable /g minutes_previous
216 string /g ramp_message
225 dfref saveDF = GetDataFolderDFR()
227 string fullPath = SpecialDirPath(
"Packages", 0, 0, 0)
229 NewPath/O/C/Q tempPackagePrefsPath, fullPath
230 fullPath +=
":preferences.pxp"
232 SetDataFolder root:packages
233 SetDataFolder $package_name
236 KillPath/Z tempPackagePrefsPath
244 dfref saveDF = GetDataFolderDFR()
248 NewDataFolder /O/S packages
249 NewDataFolder /O/S $package_name
250 string fullPath = SpecialDirPath(
"Packages", 0, 0, 0)
253 GetFileFolderInfo /Q /Z fullPath
255 fullPath +=
":preferences.pxp"
256 GetFileFolderInfo /Q /Z fullPath
258 LoadData /O /R /Q fullPath
271 dfref saveDF = GetDataFolderDFR()
273 SetDataFolder root:packages
274 SetDataFolder $package_name
287 Save /T /M=
"\r\n" /I minutes,target_watts,target_tempPy,target_tempB,target_tempA,limit_pressure,trip_tempPy,trip_tempB,trip_tempA,trip_pressure as
"anneal-ramp.itx"
304 dfref savedf = getdatafolderdfr()
326 return !(psu_connected && ls_connected && vac_connected && pyro_connected)
339 dfref savedf = getdatafolderdfr()
343 nvar connected = psu_connected
365 string psu_name =
"X03DA-PSU-XP:"
370 pvOpen /Q chidSetVolts, psu_name +
"SETVOLTS"
371 pvOpen /Q chidGetVolts, psu_name +
"GETVOLTS"
372 pvOpen /Q chidSetAmps, psu_name +
"SETCUR"
373 pvOpen /Q chidGetAmps, psu_name +
"GETCUR"
374 pvOpen /Q chidGetWatts, psu_name +
"CALCPWR"
375 pvOpen /Q chidSetOnOff, psu_name +
"SETONOFF"
376 pvOpen /Q chidGetOnOff, psu_name +
"GETONOFF"
377 pvOpen /Q chidGetRemote, psu_name +
"COMGETRMT"
378 pvOpen /Q chidStatCC, psu_name +
"STAT-CC"
379 pvOpen /Q chidStatCV, psu_name +
"STAT-CV"
386 ramp_message =
"PSU: no connection"
391 #
if exists(
"pvMonitor")
393 pvMonitor chidGetVolts, curGetVolts
394 pvMonitor chidSetVolts, curSetVolts
395 pvMonitor chidGetAmps, curGetAmps
396 pvMonitor chidSetAmps, curSetAmps
397 pvMonitor chidGetWatts, curGetWatts
398 pvMonitor chidGetOnOff, curGetOnOff
399 pvMonitor chidStatCC, curStatCC
400 pvMonitor chidStatCV, curStatCV
418 dfref savedf = getdatafolderdfr()
421 nvar connected = ls_connected
430 string base_name =
"X03DA-PC-LAKESHOREXP:"
435 pvOpen /Q chidGetTempA, base_name +
"A-TEMP_RBV"
436 pvOpen /Q chidGetTempB, base_name +
"B-TEMP_RBV"
443 ramp_message =
"Lakeshore: no connection"
448 #
if exists(
"pvMonitor")
450 pvMonitor /F=ann_callback_ls chidGetTempA, curGetTempA
451 pvMonitor /F=ann_callback_ls chidGetTempB, curGetTempB
469 dfref savedf = getdatafolderdfr()
472 nvar connected = vac_connected
479 string base_name =
"X03DA-PVC-XP:"
484 pvOpen /Q chidGetPressure, base_name +
"IG-PRESSURE"
491 ramp_message =
"vacuum gauge: no connection"
496 #
if exists(
"pvMonitor")
498 pvMonitor /F=ann_callback_pvc chidGetPressure, curGetPressure
520 dfref savedf = getdatafolderdfr()
523 nvar connected = pyro_connected
532 string base_name =
"X03DA-LV-MAURER:"
537 pvOpen /Q chidGetPyro1, base_name +
"TEMP-1"
538 pvOpen /Q chidGetPyroQ, base_name +
"TEMP-Q"
545 ramp_message =
"pyrometer: no connection"
550 #
if exists(
"pvMonitor")
552 pvMonitor /F=ann_callback_ls chidGetPyro1, curGetPyro1
553 pvMonitor /F=ann_callback_ls chidGetPyroQ, curGetPyroQ
564 #if exists("pvClose")
565 nvar /z chid = $chid_var_name
566 if (nvar_exists(chid))
578 dfref savedf = GetDataFolderDFR()
592 dfref savedf = GetDataFolderDFR()
595 nvar connected = psu_connected
616 dfref savedf = GetDataFolderDFR()
619 nvar connected = ls_connected
633 dfref savedf = GetDataFolderDFR()
636 nvar connected = vac_connected
649 dfref savedf = GetDataFolderDFR()
652 nvar connected = pyro_connected
671 if (ParamIsDefault(edit_table))
675 dfref savedf = GetDataFolderDFR()
677 make /n=3 /o minutes,cum_minutes,target_watts
678 make /n=3 /o target_tempA, target_tempB, target_tempPy
679 make /n=3 /o limit_pressure
680 make /n=3 /o trip_tempA, trip_tempB, trip_tempPy
681 make /n=3 /o trip_pressure
682 make /n=3 /o est_temp
686 target_watts[0] = {0, 5, 0}
690 limit_pressure = 1e-8
698 edit /k=1 minutes, target_watts
699 appendtotable target_tempA, trip_tempA
700 appendtotable target_tempB, trip_tempB
701 appendtotable target_tempPy, trip_tempPy
702 appendtotable limit_pressure,trip_pressure
713 dfref savedf = GetDataFolderDFR()
724 STRUCT WMBackgroundStruct &s
726 dfref savedf = GetDataFolderDFR()
757 if (recPoint >= numpnts(recWatts))
759 phi = numpnts(recWatts) - nshift - 1
760 recMinutes[plo, phi] = recMinutes[p + nshift]
761 recVolts[plo, phi] = recVolts[p + nshift]
762 recAmps[plo, phi] = recAmps[p + nshift]
763 recWatts[plo, phi] = recWatts[p + nshift]
764 recTemp[plo, phi] = recTemp[p + nshift]
765 recPressure[plo, phi] = recPressure[p + nshift]
767 plo = numpnts(recWatts) - nshift
768 phi = numpnts(recWatts) - 1
769 recMinutes[plo, phi] = nan
770 recVolts[plo, phi] = nan
771 recAmps[plo, phi] = nan
772 recWatts[plo, phi] = nan
773 recTemp[plo, phi] = nan
774 recPressure[plo, phi] = nan
779 variable temp = curGetTempA
780 if (curGetPyroQ >= 625)
781 temp = max(temp, curGetPyroQ)
782 else if (curGetPyro1 >= 625)
783 temp = max(temp, curGetPyro1)
786 recMinutes[recPoint] = datetime / 60 - recMinutesStart
787 recVolts[recPoint] = curGetVolts
788 recAmps[recPoint] = curGetAmps
789 recWatts[recPoint] = curGetWatts
790 recTemp[recPoint] = temp
791 recPressure[recPoint] = curGetPressure
801 STRUCT WMBackgroundStruct &s
803 dfref savedf = GetDataFolderDFR()
817 dfref savedf = GetDataFolderDFR()
821 nvar minutes_previous
828 variable minutes_now = datetime / 60
829 variable minutes_phase = minutes_now - minutes_start
830 variable minutes_step = minutes_now - minutes_previous
834 variable phase_complete
852 minutes_start = minutes_now
854 if ((ramp_phase >= numpnts(minutes)) || (ramp_phase >= numpnts(target_watts)) || numtype(minutes[ramp_phase]) || numtype(target_watts[ramp_phase]))
861 minutes_previous = minutes_now
871 dfref savedf = GetDataFolderDFR()
892 nvar curLimitPressure
896 curPhaseMinutes = minutes[phase]
897 curTargetWatts = target_watts[phase]
898 curTargetTempA = target_tempA[phase]
899 curTargetTempB = target_tempB[phase]
900 curTargetTempPy = target_tempPy[phase]
901 curTripTempA = trip_tempA[phase]
902 curTripTempB = trip_tempB[phase]
903 curTripTempPy = trip_tempPy[phase]
904 curLimitPressure = limit_pressure[phase]
905 curTripPressure = trip_pressure[phase]
919 dfref savedf = GetDataFolderDFR()
933 nvar minutes_previous
937 variable p2 = ramp_phase
940 variable minutes_phase = minutes_now - minutes_start
941 variable minutes_step = minutes_now - minutes_previous
952 variable max_step_volts = 0.5
953 variable max_step_amps = 0.1
954 variable max_test_volts = 5.0
955 variable max_test_amps = 0.5
957 variable watts_complete
960 step_watts = (target_watts[p2] - target_watts[p1]) / minutes[p2] * minutes_step
961 next_watts = curSetWatts + step_watts
964 if (step_watts > 0.0001)
965 watts_complete = next_watts > target_watts[p2]
966 else if (step_watts < -0.0001)
967 watts_complete = next_watts < target_watts[p2]
969 watts_complete = minutes_phase >= minutes[p2]
974 next_watts = curSetWatts
976 next_watts = limit(next_watts, 0, max(target_watts[p1], target_watts[p2]))
980 if (next_watts >= 0.1)
981 curSetWatts = next_watts
982 if ((curGetVolts > 0.1) && (curGetAmps > 0.1))
983 resistance = curGetVolts / curGetAmps
984 next_volts = limit(sqrt(next_watts * resistance), 0, curGetVolts + max_step_volts)
985 next_amps = limit(sqrt(next_watts / resistance), 0, curGetAmps + max_step_amps)
988 next_volts = min(curSetVolts + 0.5, max_test_volts)
989 next_amps = min(curSetAmps + 0.1, max_test_amps)
992 curSetWatts = next_watts
998 pvPutNumber /Q chidSetVolts, next_volts
999 pvPutNumber /Q chidSetAmps, next_amps
1002 setdatafolder savedf
1003 return watts_complete
1014 dfref savedf = GetDataFolderDFR()
1026 nvar curGetTempPyro1
1027 nvar curGetTempPyroQ
1031 if ((phase < numpnts(trip_tempA)) && (numtype(trip_tempA[phase]) == 0) && (curGetTempA >= trip_tempA[phase]))
1032 ramp_message =
"temperature A trip"
1035 if ((phase < numpnts(trip_tempB)) && (numtype(trip_tempB[phase]) == 0) && (curGetTempB >= trip_tempB[phase]))
1036 ramp_message =
"temperature B trip"
1039 if ((phase < numpnts(trip_tempPy)) && (numtype(trip_tempPy[phase]) == 0) && (curGetTempPyro1 >= trip_tempPy[phase]))
1040 ramp_message =
"pyrometer trip (1)"
1043 if ((phase < numpnts(trip_tempPy)) && (numtype(trip_tempPy[phase]) == 0) && (curGetTempPyroQ >= trip_tempPy[phase]))
1044 ramp_message =
"pyrometer trip (Q)"
1047 if ((phase < numpnts(trip_pressure)) && (numtype(trip_pressure[phase]) == 0) && (curGetPressure >= trip_pressure[phase]))
1048 ramp_message =
"pressure trip"
1056 setdatafolder savedf
1067 dfref savedf = GetDataFolderDFR()
1076 if ((phase < numpnts(limit_pressure)) && (numtype(limit_pressure[phase]) == 0) && (curGetPressure >= limit_pressure[phase]))
1080 setdatafolder savedf
1094 dfref savedf = GetDataFolderDFR()
1104 variable direction_up = target_watts[phase] >= target_watts[phase - 1]
1108 nvar curGetTempPyro1
1109 nvar curGetTempPyroQ
1112 if ((phase < numpnts(target_tempA)) && (numtype(target_tempA[phase]) == 0))
1114 if (curGetTempA >= target_tempA[phase])
1118 if (curGetTempA <= target_tempA[phase])
1124 if ((phase < numpnts(target_tempB)) && (numtype(target_tempB[phase]) == 0))
1126 if (curGetTempB >= target_tempB[phase])
1130 if (curGetTempB <= target_tempB[phase])
1136 if ((phase < numpnts(target_tempPy)) && (numtype(target_tempPy[phase]) == 0))
1138 if (curGetTempPyro1 >= target_tempPy[phase])
1142 if (curGetTempPyro1 <= target_tempPy[phase])
1148 if ((phase < numpnts(target_tempPy)) && (numtype(target_tempPy[phase]) == 0))
1150 if (curGetTempPyroQ >= target_tempPy[phase])
1154 if (curGetTempPyroQ <= target_tempPy[phase])
1162 ramp_message =
"temperature A target reached"
1165 ramp_message =
"temperature B target reached"
1168 ramp_message =
"pyrometer 1 target reached"
1171 ramp_message =
"pyrometer Q target reached"
1175 setdatafolder savedf
1181 dfref savedf = GetDataFolderDFR()
1187 nvar recMinutesStart
1189 recMinutesStart = datetime / 60
1206 minutes_start = datetime / 60
1207 nvar minutes_previous
1208 minutes_previous = minutes_start
1220 pvPutNumber /Q chidSetVolts, 0.5
1221 pvPutNumber /Q chidSetAmps, 0.5
1222 pvPutNumber /Q chidSetOnOff, 0
1226 curSetWatts = target_watts[0]
1229 CtrlNamedBackground ann_ramp, start
1230 CtrlNamedBackground ann_record, start
1232 setdatafolder savedf
1237 dfref savedf = GetDataFolderDFR()
1240 CtrlNamedBackground ann_ramp, stop
1245 setdatafolder savedf
1250 dfref savedf = GetDataFolderDFR()
1253 CtrlNamedBackground ann_ramp, start
1258 setdatafolder savedf
1269 dfref savedf = GetDataFolderDFR()
1272 CtrlNamedBackground ann_ramp, stop
1273 CtrlNamedBackground ann_record, stop
1281 if (reset_psu || (curTargetWatts < 1))
1285 pvPutNumber /Q chidSetVolts, 0
1286 pvPutNumber /Q chidSetAmps, 0
1287 pvPutNumber /Q chidSetOnOff, 1
1291 setdatafolder savedf
1296 dfref savedf = GetDataFolderDFR()
1306 display recWatts vs recMinutes
1307 appendtograph /r recVolts vs recMinutes
1308 appendtograph /r recAmps vs recMinutes
1312 PauseUpdate; Silent 1
1313 NewPanel /K=1 /W=(441,64,887,702) as
"ramp generator"
1314 ValDisplay valdisp0,pos={11,178},size={233,42},bodyWidth=200,title=
"pyro 1"
1315 ValDisplay valdisp0,limits={0,1500,625},barmisc={10,50}
1316 ValDisplay valdisp0,value= #
"root:packages:pearl_anneal:curGetPyro1"
1317 ValDisplay valdisp1,pos={11,233},size={233,42},bodyWidth=200,title=
"pyro q"
1318 ValDisplay valdisp1,limits={0,1500,625},barmisc={10,50}
1319 ValDisplay valdisp1,value= #
"root:packages:pearl_anneal:curGetPyroQ"
1320 ValDisplay valdisp2,pos={11,73},size={234,42},bodyWidth=200,title=
"lake A"
1321 ValDisplay valdisp2,limits={0,1500,300},barmisc={10,50}
1322 ValDisplay valdisp2,value= #
"root:packages:pearl_anneal:curGetTempA"
1323 ValDisplay valdisp3,pos={10,128},size={234,42},bodyWidth=200,title=
"lake B"
1324 ValDisplay valdisp3,limits={0,1500,300},barmisc={10,50}
1325 ValDisplay valdisp3,value= #
"root:packages:pearl_anneal:curGetTempB"
1326 ValDisplay valdisp4,pos={16,23},size={229,42},bodyWidth=200,title=
"watts"
1327 ValDisplay valdisp4,limits={0,90,0},barmisc={10,50}
1328 ValDisplay valdisp4,value= #
"root:packages:pearl_anneal:curGetWatts"
1329 ValDisplay valdisp5,pos={6,5},size={60,14},title=
"phase"
1330 ValDisplay valdisp5,limits={0,0,0},barmisc={0,1000}
1331 ValDisplay valdisp5,value= #
"root:packages:pearl_anneal:ramp_phase"
1332 ValDisplay valdisp6,pos={0,282},size={244,42},bodyWidth=200,title=
"pressure"
1333 ValDisplay valdisp6,format=
"%.1e",limits={1e-09,1e-08,0},barmisc={10,80}
1334 ValDisplay valdisp6,value= #
"root:packages:pearl_anneal:curGetPressure"
1335 ValDisplay valdisp7,pos={335,90},size={47,14},bodyWidth=14,title=
"power"
1336 ValDisplay valdisp7,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (60928,60928,60928),lowColor= (0,52224,0),zeroColor= (61440,61440,61440)
1337 ValDisplay valdisp7,value= #
"root:packages:pearl_anneal:curGetOnOff"
1338 ValDisplay valdisp16,pos={262,168},size={114,14},bodyWidth=34,title=
"target temp pyro"
1339 ValDisplay valdisp16,limits={0,0,0},barmisc={0,1000},mode= 2,highColor= (60928,60928,60928),lowColor= (65280,0,0),zeroColor= (0,52224,0)
1340 ValDisplay valdisp16,value= #
"root:packages:pearl_anneal:curTargetTempPy"
1341 ValDisplay valdisp17,pos={300,4},size={80,14},bodyWidth=14,title=
"power supply"
1342 ValDisplay valdisp17,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (0,52224,0),lowColor= (65280,0,0),zeroColor= (61440,61440,61440)
1343 ValDisplay valdisp17,value= #
"root:packages:pearl_anneal:psu_connected"
1344 ValDisplay valdisp18,pos={317,21},size={64,14},bodyWidth=14,title=
"lakeshore"
1345 ValDisplay valdisp18,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (0,52224,0),lowColor= (65280,0,0),zeroColor= (61440,61440,61440)
1346 ValDisplay valdisp18,value= #
"root:packages:pearl_anneal:ls_connected"
1347 ValDisplay valdisp19,pos={318,38},size={64,14},bodyWidth=14,title=
"pyrometer"
1348 ValDisplay valdisp19,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (0,52224,0),lowColor= (65280,0,0),zeroColor= (61440,61440,61440)
1349 ValDisplay valdisp19,value= #
"root:packages:pearl_anneal:pyro_connected"
1350 ValDisplay valdisp20,pos={293,52},size={91,14},bodyWidth=14,title=
"vacuum system"
1351 ValDisplay valdisp20,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (0,52224,0),lowColor= (65280,0,0),zeroColor= (61440,61440,61440)
1352 ValDisplay valdisp20,value= #
"root:packages:pearl_anneal:vac_connected"
1353 ValDisplay valdisp21,pos={341,76},size={41,14},bodyWidth=14,title=
"ramp"
1354 ValDisplay valdisp21,limits={0,1,0.5},barmisc={0,0},mode= 2,highColor= (0,52224,0),lowColor= (61440,61440,61440),zeroColor= (0,34816,52224)
1355 ValDisplay valdisp21,value= #
"root:packages:pearl_anneal:ramp_status"
1356 ValDisplay valdisp8,pos={278,120},size={100,14},title=
"target watts"
1357 ValDisplay valdisp8,limits={0,0,0},barmisc={0,1000}
1358 ValDisplay valdisp8,value= #
"root:packages:pearl_anneal:curTargetWatts"
1359 ValDisplay valdisp9,pos={278,137},size={100,14},title=
"target temp A"
1360 ValDisplay valdisp9,limits={0,0,0},barmisc={0,1000}
1361 ValDisplay valdisp9,value= #
"root:packages:pearl_anneal:curTargetTempA"
1362 ValDisplay valdisp10,pos={278,152},size={100,14},title=
"target temp B"
1363 ValDisplay valdisp10,limits={0,0,0},barmisc={0,1000}
1364 ValDisplay valdisp10,value= #
"root:packages:pearl_anneal:curTargetTempB"
1365 ValDisplay valdisp11,pos={271,266},size={100,14},title=
"limit pressure"
1366 ValDisplay valdisp11,limits={0,0,0},barmisc={0,1000}
1367 ValDisplay valdisp11,value= #
"root:packages:pearl_anneal:curLimitPressure"
1368 ValDisplay valdisp12,pos={261,205},size={100,14},title=
"trip temp A"
1369 ValDisplay valdisp12,limits={0,0,0},barmisc={0,1000}
1370 ValDisplay valdisp12,value= #
"root:packages:pearl_anneal:curTripTempA"
1371 ValDisplay valdisp13,pos={262,224},size={100,14},title=
"trip temp B"
1372 ValDisplay valdisp13,limits={0,0,0},barmisc={0,1000}
1373 ValDisplay valdisp13,value= #
"root:packages:pearl_anneal:curTripTempB"
1374 ValDisplay valdisp14,pos={276,242},size={100,14},title=
"trip pyro"
1375 ValDisplay valdisp14,limits={0,0,0},barmisc={0,1000}
1376 ValDisplay valdisp14,value= #
"root:packages:pearl_anneal:curTripTempPy"
1377 ValDisplay valdisp15,pos={273,309},size={100,14},title=
"ramp interval"
1378 ValDisplay valdisp15,limits={0,0,0},barmisc={0,1000}
1379 ValDisplay valdisp15,value= #
"root:packages:pearl_anneal:curPhaseMinutes"
1381 Button b_start,fColor=(0,52224,0)
1384 Button b_stop,fColor=(52224,0,0)
1386 ValDisplay valdisp11_1,pos={274,282},size={100,14},title=
"trip pressure"
1387 ValDisplay valdisp11_1,limits={0,0,0},barmisc={0,1000}
1388 ValDisplay valdisp11_1,value= #
"root:packages:pearl_anneal:curTripPressure"
1389 TitleBox title0,pos={16,334},size={400,20}
1390 TitleBox title0,variable= root:packages:pearl_anneal:ramp_message,fixedSize=1
1391 DefineGuide UGH0={FT,390}
1392 String fldrSav0= GetDataFolder(1)
1393 SetDataFolder root:packages:pearl_anneal:
1394 Display/W=(82,153,246,462)/FG=(FL,UGH0,FR,FB)/HOST=# recTemp vs recMinutes
1395 AppendToGraph/R recPressure vs recMinutes
1396 AppendToGraph/L=power recWatts vs recMinutes
1397 NewFreeAxis/O/L power
1398 SetDataFolder fldrSav0
1399 ModifyGraph margin(left)=80
1400 ModifyGraph rgb(recPressure)=(0,0,65280),rgb(recWatts)=(0,39168,0)
1401 ModifyGraph log(right)=1
1402 ModifyGraph mirror(bottom)=2
1403 ModifyGraph nticks=3
1405 ModifyGraph axThick=0.5
1406 ModifyGraph axRGB(left)=(65280,0,0),axRGB(right)=(0,0,65280),axRGB(power)=(0,39168,0)
1407 ModifyGraph tlblRGB(left)=(65280,0,0),tlblRGB(right)=(0,0,65280),tlblRGB(power)=(0,39168,0)
1408 ModifyGraph alblRGB(left)=(65280,0,0),alblRGB(right)=(0,0,65280),alblRGB(power)=(0,39168,0)
1409 ModifyGraph lblPos(left)=42,lblPos(power)=35
1410 ModifyGraph lblLatPos(left)=1
1412 ModifyGraph freePos(power)=48
1413 Label left
"temperature (K)"
1414 Label bottom
"time (minutes)"
1415 Label right
"pressure (mbar)"
1416 Label power
"power (W)"
1417 SetAxis/E=1 power 0,80
1419 SetActiveSubwindow ##
1423 struct WMButtonAction &ba
1425 switch( ba.eventCode )
1428 nvar /sdfr=ann_df ramp_status
1429 if (ramp_status < 0.4)
1441 struct WMButtonAction &ba
1443 switch( ba.eventCode )
1446 nvar /sdfr=ann_df ramp_status
1447 if (ramp_status > 0.6)
1449 Button b_pause, win=$(ba.win), title=
"resume"
1452 Button b_pause, win=$(ba.win), title=
"pause"
1463 struct WMButtonAction &ba
1465 switch( ba.eventCode )
1477 struct WMButtonAction &ba
1479 dfref savedf = GetDataFolderDFR()
1480 switch( ba.eventCode )
1495 edit /k=1 minutes, target_watts
1496 appendtotable target_tempA, trip_tempA
1497 appendtotable target_tempB, trip_tempB
1498 appendtotable target_tempPy, trip_tempPy
1499 appendtotable limit_pressure,trip_pressure
1506 setdatafolder savedf
static variable ann_record_bg(WMBackgroundStruct *s)
background task of the recorder
static const string prefs_objects
static variable load_prefs()
variable ann_init_bg()
initialize the background tasks
static variable ann_ramp_bg(WMBackgroundStruct *s)
background task of the ramp
static variable save_ramp()
save current ramp table
static variable epics_disconnect()
disconnect from all EPICS devices.
static const string package_path
variable ann_new_ramp_table(variable edit_table=defaultValue)
create a new ramp table and open it in a table window.
static variable ann_ramp_target(variable phase)
check target conditions
static variable ann_ramp_hold(variable phase)
check hold conditions
static variable ann_ramp_update(variable phase)
update control panel variables
variable ann_ramp_pause()
static variable epics_connect_vac()
connect to the vacuum gauge
static variable epics_disconnect_psu()
disconnect from the power supply unit
static variable epics_connect_psu()
connect to the power supply unit
variable ann_display_ramp()
static variable epics_connect_ls()
connect to the lakeshore temperature controller
static variable epics_connect_pyro()
connect to the pyrometer
static variable epics_disconnect_vac()
disconnect from the vacuum gauge
variable ann_ramp_step()
prepare and execute the next ramp step
ramp generator for sample annealing
static const string package_name
static variable AfterCompiledHook()
static variable save_prefs()
static variable init_package()
initialize the package data folder
static variable bp_ramp_start(WMButtonAction *ba)
variable ann_ramp_start()
start an annealing ramp
static variable ann_ramp_step_exec(variable minutes_now)
execute the next ramp step
static variable bp_ramp_pause(WMButtonAction *ba)
static variable epics_disconnect_ls()
disconnect from the lakeshore controller
static variable ann_ramp_trip(variable phase)
check trip conditions
static variable epics_connect()
connect to all required EPICS devices.
static variable bp_ramp_stop(WMButtonAction *ba)
static variable IgorQuitHook(string app)
Igor sometimes crashes if the PVs are not disconnected when it quits.
variable ann_ramp_resume()
static variable epics_disconnect_pyro()
disconnect from the pyrometer
variable ann_ramp_stop(variable reset_psu)
stop a running annealing ramp
static variable epics_disconnect_chid(string chid_var_name)
static variable bp_ramp_edit(WMButtonAction *ba)