Example: Environmental Chamber
|
10 ! *********************************************************************
20 ! Example: Environmental Chamber
30 !
40 ! This program shows how a user can build a custom display
50 ! panel. This program uses a strip chart, labels, menus,
60 ! dialog box, buttons, string input, and meters to simulate
70 ! a temperature/humidity chamber that can be programmed for
80 ! different temperature/humidity profiles.
90 !
100 ! *********************************************************
110 !
120 REAL Points(0:1)
130 DIM Buf$[100]
140 DIM Btn$(1:1,1:3)[80]
150 DIM Time(50),Temp(50),Humid(50),Ramp(50)
160 Btn$(1,1)="Options, Temperature"
170 Btn$(1,2)="Options, Humidity"
180 Btn$(1,3)="Options, Profile Manager"
190 Logimage: IMAGE #,K,K,K,K,K,DDDD.D,K,DDD.D
200 Logimage2: IMAGE #,K,DDDD,K,DDDD.D,K,DDD.D,K,DDD
210 !
220 ASSIGN @Main TO WIDGET "PANEL";SET ("X":0,"Y":0,"WIDTH":600,"HEIGHT":425,"TITLE":" Example: Environmental Chamber","SIZE CONTROL":"RESIZE CHILDREN")
230 CONTROL @Main;SET ("SYSTEM MENU":"Quit")
240 ON EVENT @Main,"SYSTEM MENU" GOTO Finis
250 !
260 ASSIGN @Pulldown1 TO WIDGET "PULLDOWN MENU";PARENT @Main,SET ("LABEL":"Chart","SENSITIVE":0)
270 ASSIGN @Pd_btn1 TO WIDGET "MENU BUTTON";PARENT @Pulldown1,SET ("LABEL":"Temperature")
280 ASSIGN @Pd_btn2 TO WIDGET "MENU BUTTON";PARENT @Pulldown1,SET ("LABEL":"Humidity")
290 ASSIGN @Pd_btn3 TO WIDGET "MENU BUTTON";PARENT @Pulldown1,SET ("LABEL":"Profile Manager")
300 ASSIGN @Pulldown2 TO WIDGET "PULLDOWN MENU";PARENT @Main,SET ("LABEL":"Operation","SENSITIVE":0)
310 ASSIGN @Pd_btn4 TO WIDGET "MENU BUTTON";PARENT @Pulldown2,SET ("LABEL":"Manual")
320 ASSIGN @Pd_cscd TO WIDGET "CASCADE MENU";PARENT @Pulldown2,SET ("LABEL":"Automatic")
330 ASSIGN @Pd_btn5 TO WIDGET "MENU BUTTON";PARENT @Pd_cscd,SET ("LABEL":"(Re)start")
340 ASSIGN @Pd_btn6 TO WIDGET "MENU BUTTON";PARENT @Pd_cscd,SET ("LABEL":"Continue")
350 !
360 ON EVENT @Pd_btn1,"ACTIVATED" GOSUB Btn1
370 ON EVENT @Pd_btn2,"ACTIVATED" GOSUB Btn2
380 ON EVENT @Pd_btn3,"ACTIVATED" GOSUB Btn3
390 ON EVENT @Pd_btn4,"ACTIVATED" GOSUB Btn4
400 ON EVENT @Pd_btn5,"ACTIVATED" GOSUB Btn5
410 ON EVENT @Pd_btn6,"ACTIVATED" GOSUB Btn6
420 !
430 ! Create the widgets for the temperature profile.
440 !
450 ASSIGN @Main1 TO WIDGET "PANEL";PARENT @Main,SET ("X":0,"Y":0,"WIDTH":600,"HEIGHT":279,"BORDER":0,"VISIBLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
460 ASSIGN @Strip TO WIDGET "STRIPCHART";PARENT @Main1,SET ("X":5,"Y":5,"WIDTH":350,"HEIGHT":250,"SHOW NUMBERING":0)
470 ASSIGN @Lbl0 TO WIDGET "LABEL";PARENT @Main1,SET ("X":5,"Y":260,"WIDTH":350,"HEIGHT":20,"BORDER":0,"VALUE":"Event History -- Temperature")
480 ASSIGN @Lbl1 TO WIDGET "LABEL";PARENT @Main1,SET ("X":365,"Y":15,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Curr Temp")
490 ASSIGN @Disp1 TO WIDGET "METER";PARENT @Main1,SET ("X":365,"Y":35,"WIDTH":120,"HEIGHT":150,"MINIMUM":-75,"MAXIMUM":+75)
500 ASSIGN @Lbl2 TO WIDGET "LABEL";PARENT @Main1,SET ("X":365,"Y":200,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Set Point")
510 ASSIGN @Disp2 TO WIDGET "LABEL";PARENT @Main1,SET ("X":365,"Y":220,"WIDTH":120,"HEIGHT":25)
520 ASSIGN @Slider TO WIDGET "SLIDER";PARENT @Main1,SET ("X":505,"Y":5,"HEIGHT":250,"WIDTH":60,"MINIMUM":-50,"MAXIMUM":50)
530 !
540 ! Set up the strip chart
550 !
560 CONTROL @Strip;SET ("CURRENT AXIS":"Y","TICK SPACING":10,"ORIGIN":-50,"RANGE":100)
570 CONTROL @Strip;SET ("CURRENT AXIS":"X","RANGE":20)
580 CONTROL @Disp1;SET ("LOW LIMIT":-45,"HIGH LIMIT":+45,"ALARM RANGES":"LOW,HIGH")
590 STATUS @Disp1;RETURN ("LOW PEN":Low_pen,"HIGH PEN":High_pen)
600 CONTROL @Disp1;SET ("LOW PEN":High_pen,"MIDDLE PEN":Low_pen)
610 !
620 ! Create the widgets for the humidity profile
630 !
640 ASSIGN @Main2 TO WIDGET "PANEL";PARENT @Main,SET ("X":0,"Y":0,"WIDTH":600,"HEIGHT":279,"VISIBLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
650 ASSIGN @Strip2 TO WIDGET "STRIPCHART";PARENT @Main2,SET ("X":5,"Y":5,"WIDTH":350,"HEIGHT":250,"SHOW NUMBERING":0)
660 ASSIGN @Lbl02 TO WIDGET "LABEL";PARENT @Main2,SET ("X":5,"Y":260,"WIDTH":350,"HEIGHT":20,"BORDER":0,"VALUE":"Event History -- Humidity")
670 ASSIGN @Lbl12 TO WIDGET "LABEL";PARENT @Main2,SET ("X":365,"Y":15,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Curr Humidity")
680 ASSIGN @Disp12 TO WIDGET "METER";PARENT @Main2,SET ("X":365,"Y":35,"WIDTH":120,"HEIGHT":150,"MINIMUM":0)
690 ASSIGN @Lbl22 TO WIDGET "LABEL";PARENT @Main2,SET ("X":365,"Y":200,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Set Point")
700 ASSIGN @Disp22 TO WIDGET "LABEL";PARENT @Main2,SET ("X":365,"Y":220,"WIDTH":120,"HEIGHT":25)
710 ASSIGN @Slider2 TO WIDGET "SLIDER";PARENT @Main2,SET ("X":505,"Y":5,"HEIGHT":250,"WIDTH":60)
720 !
730 ! Set up the strip chart
740 !
750 CONTROL @Strip2;SET ("CURRENT AXIS":"Y","TICK SPACING":10,"ORIGIN":0,"RANGE":100)
760 CONTROL @Strip2;SET ("CURRENT AXIS":"X","RANGE":20)
770 CONTROL @Disp12;SET ("LOW LIMIT":5,"HIGH LIMIT":95,"ALARM RANGES":"LOW,HIGH")
780 STATUS @Disp12;RETURN ("LOW PEN":Low_pen,"HIGH PEN":High_pen)
790 CONTROL @Disp12;SET ("LOW PEN":High_pen,"MIDDLE PEN":Low_pen)
800 !
810 ! Create widgets for profile manager
820 !
830 ASSIGN @Main3 TO WIDGET "PANEL";PARENT @Main,SET ("X":0,"Y":0,"WIDTH":600,"HEIGHT":279,"BORDER":0,"VISIBLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
840 ASSIGN @Lbl3 TO WIDGET "LABEL";PARENT @Main3,SET ("X":255,"Y":200,"WIDTH":90,"HEIGHT":20,"BORDER":0,"VALUE":"Low Limit")
850 ASSIGN @Lbl4 TO WIDGET "LABEL";PARENT @Main3,SET ("X":255,"Y":230,"WIDTH":90,"HEIGHT":20,"BORDER":0,"VALUE":"High Limit")
860 ASSIGN @Meter1 TO WIDGET "METER";PARENT @Main3,SET ("X":345,"Y":35,"WIDTH":120,"HEIGHT":150,"MINIMUM":-75,"MAXIMUM":+75)
870 ASSIGN @Meter2 TO WIDGET "METER";PARENT @Main3,SET ("X":465,"Y":35,"WIDTH":120,"HEIGHT":150,"MINIMUM":0)
880 ASSIGN @Lmeter1 TO WIDGET "LABEL";PARENT @Main3,SET ("X":345,"Y":15,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Curr Temp")
890 ASSIGN @Lmeter2 TO WIDGET "LABEL";PARENT @Main3,SET ("X":465,"Y":15,"WIDTH":120,"HEIGHT":20,"BORDER":0,"VALUE":"Curr Humidity")
900 ASSIGN @Temp_low TO WIDGET "NUMBER";PARENT @Main3,SET ("X":345,"Y":200,"WIDTH":120,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
910 ASSIGN @Temp_high TO WIDGET "NUMBER";PARENT @Main3,SET ("X":345,"Y":230,"WIDTH":120,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
920 ASSIGN @Humid_low TO WIDGET "NUMBER";PARENT @Main3,SET ("X":465,"Y":200,"WIDTH":120,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
930 ASSIGN @Humid_high TO WIDGET "NUMBER";PARENT @Main3,SET ("X":465,"Y":230,"WIDTH":120,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
940 ASSIGN @Time TO WIDGET "NUMBER";PARENT @Main3,SET ("X":10,"Y":50,"WIDTH":75,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
950 ASSIGN @Temp TO WIDGET "NUMBER";PARENT @Main3,SET ("X":95,"Y":50,"WIDTH":50,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
960 ASSIGN @Humid TO WIDGET "NUMBER";PARENT @Main3,SET ("X":155,"Y":50,"WIDTH":50,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
970 ASSIGN @Slope TO WIDGET "NUMBER";PARENT @Main3,SET ("X":215,"Y":50,"WIDTH":50,"HEIGHT":20,"REAL NOTATION":"FIXED","REAL RESOLUTION":1)
980 ASSIGN @Save_me TO WIDGET "PUSHBUTTON";PARENT @Main3,SET ("X":275,"Y":50,"WIDTH":60,"HEIGHT":24,"LABEL":"Set","BORDER":0)
990 ASSIGN @Kill_me TO WIDGET "PUSHBUTTON";PARENT @Main3,SET ("X":275,"Y":80,"WIDTH":60,"HEIGHT":24,"LABEL":"Clear","BORDER":0)
1000 ASSIGN @Time_disp TO WIDGET "LABEL";PARENT @Main3,SET ("X":10,"Y":30,"WIDTH":75,"HEIGHT":20,"VALUE":"Time")
1010 ASSIGN @Temp_disp TO WIDGET "LABEL";PARENT @Main3,SET ("X":95,"Y":30,"WIDTH":50,"HEIGHT":20,"VALUE":"Temp")
1020 ASSIGN @Humid_disp TO WIDGET "LABEL";PARENT @Main3,SET ("X":155,"Y":30,"WIDTH":50,"HEIGHT":20,"VALUE":"Humid")
1030 ASSIGN @Ramp_disp TO WIDGET "LABEL";PARENT @Main3,SET ("X":215,"Y":30,"WIDTH":50,"HEIGHT":20,"VALUE":"Ramp")
1040 ASSIGN @Save_disp TO WIDGET "LABEL";PARENT @Main3,SET ("X":275,"Y":30,"WIDTH":60,"HEIGHT":20,"VALUE":"Config")
1050 ASSIGN @Text2 TO WIDGET "PRINTER";PARENT @Main3,SET ("X":5,"Y":80,"WIDTH":250,"HEIGHT":200)
1060 CONTROL @Meter1;SET ("LOW LIMIT":-45,"HIGH LIMIT":+45,"ALARM RANGES":"LOW,HIGH")
1070 STATUS @Meter1;RETURN ("LOW PEN":Low_pen,"HIGH PEN":High_pen)
1080 CONTROL @Meter1;SET ("LOW PEN":High_pen,"MIDDLE PEN":Low_pen)
1090 CONTROL @Meter2;SET ("LOW LIMIT":5,"HIGH LIMIT":95,"ALARM RANGES":"LOW,HIGH")
1100 STATUS @Meter2;RETURN ("LOW PEN":Low_pen,"HIGH PEN":High_pen)
1110 CONTROL @Meter2;SET ("LOW PEN":High_pen,"MIDDLE PEN":Low_pen)
1120 GOSUB Setup_profile
1130 !
1140 ! Printer Widget appears in all subpanels.
1150 !
1160 ASSIGN @Text TO WIDGET "PRINTER";PARENT @Main,SET ("X":5,"Y":280,"WIDTH":580,"HEIGHT":80)
1170 !
1180 ! From here to "Afteron" represents: ON EVENT @Btn1 GOSUB Servicebtn
1190 !
1200 ON EVENT @Slider,"CHANGED" GOSUB Changesetpt
1210 ON EVENT @Slider,"DONE" GOSUB Changesetpt
1220 ON EVENT @Slider2,"CHANGED" GOSUB Changesetpt
1230 ON EVENT @Slider2,"DONE" GOSUB Changesetpt
1240 ON EVENT @Temp_low,"DONE" GOSUB Change_tlow
1250 ON EVENT @Temp_high,"DONE" GOSUB Change_thigh
1260 ON EVENT @Humid_low,"DONE" GOSUB Change_hlow
1270 ON EVENT @Humid_high,"DONE" GOSUB Change_hhigh
1280 ON EVENT @Save_me,"ACTIVATED" GOSUB Modify_profile
1290 ON EVENT @Kill_me,"ACTIVATED" GOSUB Clear_profile
1300 Afteron:!
1310 !
1320 ! Get down to work
1330 !
1340 Setpt=23
1350 Setpt2=30
1360 Curtemp=0
1370 Curhumid=10
1380 Siz=2
1390 Index=1
1400 CONTROL @Slider;SET ("VALUE":Setpt)
1410 CONTROL @Slider2;SET ("VALUE":Setpt2)
1420 CONTROL @Time;SET ("VALUE":0)
1430 CONTROL @Temp;SET ("VALUE":Setpt)
1440 CONTROL @Humid;SET ("VALUE":Setpt2)
1450 CONTROL @Slope;SET ("VALUE":0)
1460 CONTROL @Main1;SET ("VISIBLE":1)
1470 CONTROL @Pulldown1;SET ("SENSITIVE":1)
1480 CONTROL @Pulldown2;SET ("SENSITIVE":1)
1490 !
1500 Gotnewsetpt:!
1510 Reloop=0
1520 CONTROL @Disp2;SET ("VALUE":Setpt)
1530 CONTROL @Disp22;SET ("VALUE":Setpt2)
1540 Evt=Evt+1
1550 OUTPUT Buf$ USING Logimage;"#";Evt;": Time = ";TIME$(TIMEDATE);" Setpoint changed to ";Setpt;" Deg. C, ";Setpt2;" % Hum."
1560 CONTROL @Text;SET ("APPEND TEXT":Buf$)
1570 LOOP
1580 !
1590 IF Auto=1 THEN GOSUB Get_next_setpt
1600 Diff=Setpt-Curtemp
1610 Diff2=Setpt2-Curhumid
1620 Noise=Siz*(RND-.5)*2
1630 Delta=Diff/20+Noise
1640 Delta2=Diff2/20+Noise
1650 Curtemp=Curtemp+Delta
1660 Curhumid=Curhumid+Delta2
1670 !
1680 CONTROL @Strip;SET ("POINT LOCATION":I)
1690 CONTROL @Strip2;SET ("POINT LOCATION":I)
1700 Points(0)=Curtemp
1710 Points(1)=Setpt
1720 I=I+1
1730 CONTROL @Strip;SET ("VALUES":Points(*))
1740 CONTROL @Disp1;SET ("VALUE":Curtemp)
1750 CONTROL @Meter1;SET ("VALUE":Curtemp)
1760 Points(0)=Curhumid
1770 Points(1)=Setpt2
1780 CONTROL @Strip2;SET ("VALUES":Points(*))
1790 CONTROL @Disp12;SET ("VALUE":Curhumid)
1800 CONTROL @Meter2;SET ("VALUE":Curhumid)
1810 !
1820 EXIT IF Reloop
1830 END LOOP
1840 GOTO Gotnewsetpt
1850 !
1860 Servicebtn: !
1870 STATUS @Str1;RETURN ("VALUE":Buf$)
1880 Setpt=VAL(Buf$)
1890 Reloop=1
1900 RETURN
1910 STOP
1920 Btn1:! Temperature
1930 GOSUB Turn_off_setup
1940 GOSUB Turn_off_humid
1950 GOSUB Turn_on_temp
1960 RETURN
1970 Btn2:! Humidity
1980 GOSUB Turn_off_setup
1990 GOSUB Turn_off_temp
2000 GOSUB Turn_on_humid
2010 RETURN
2020 Btn3:!
2030 GOSUB Turn_off_humid
2040 GOSUB Turn_off_temp
2050 GOSUB Turn_on_setup
2060 RETURN
2070 Btn4:! Manual
2080 Auto=0
2090 STATUS @Strip;RETURN ("VISIBLE":Temp_vis)
2100 STATUS @Strip2;RETURN ("VISIBLE":Humid_vis)
2110 CONTROL @Slider2;SET ("VALUE":Setpt2)
2120 CONTROL @Slider;SET ("VALUE":Setpt)
2130 IF Temp_vis THEN CONTROL @Slider;SET ("VISIBLE":1)
2140 IF Humid_vis THEN CONTROL @Slider2;SET ("VISIBLE":1)
2150 RETURN
2160 Btn5:!
2170 Auto=1
2180 CONTROL @Slider;SET ("VISIBLE":0)
2190 CONTROL @Slider2;SET ("VISIBLE":0)
2200 Index=1
2210 Time_start=TIMEDATE
2220 RETURN
2230 Btn6:!
2240 Auto=1
2250 CONTROL @Slider;SET ("VISIBLE":0)
2260 CONTROL @Slider2;SET ("VISIBLE":0)
2270 RETURN
2280 !
2290 Turn_off_temp:!
2300 CONTROL @Main1;SET ("VISIBLE":0)
2310 RETURN
2320 Turn_off_humid:!
2330 CONTROL @Main2;SET ("VISIBLE":0)
2340 RETURN
2350 Turn_on_temp:!
2360 CONTROL @Main1;SET ("VISIBLE":1)
2370 IF (Auto=0) THEN CONTROL @Slider;SET ("VISIBLE":1)
2380 RETURN
2390 Turn_on_humid:!
2400 CONTROL @Main2;SET ("VISIBLE":1)
2410 IF (Auto=0) THEN CONTROL @Slider2;SET ("VISIBLE":1)
2420 RETURN
2430 Turn_off_setup:!
2440 CONTROL @Main3;SET ("VISIBLE":0)
2450 RETURN
2460 Turn_on_setup:!
2470 CONTROL @Main3;SET ("VISIBLE":1)
2480 STATUS @Meter1;RETURN ("LOW LIMIT":Low_lim,"HIGH LIMIT":High_lim)
2490 CONTROL @Temp_low;SET ("VALUE":Low_lim)
2500 CONTROL @Temp_high;SET ("VALUE":High_lim)
2510 STATUS @Meter2;RETURN ("LOW LIMIT":Low_lim,"HIGH LIMIT":High_lim)
2520 CONTROL @Humid_high;SET ("VALUE":High_lim)
2530 CONTROL @Humid_low;SET ("VALUE":Low_lim)
2540 RETURN
2550 Changesetpt:!
2560 IF Auto=0 THEN
2570 STATUS @Slider;RETURN ("VALUE":Setpt)
2580 STATUS @Slider2;RETURN ("VALUE":Setpt2)
2590 CONTROL @Disp2;SET ("VALUE":Setpt)
2600 CONTROL @Disp22;SET ("VALUE":Setpt2)
2610 Evt=Evt+1
2620 OUTPUT Buf$ USING Logimage;"#";Evt;": Time = ";TIME$(TIMEDATE);" Setpoint changed to ";Setpt;" Deg. C, ";Setpt2;" % Hum."
2630 CONTROL @Text;SET ("APPEND TEXT":Buf$)
2640 END IF
2650 RETURN
2660 Change_tlow:!
2670 STATUS @Temp_low;RETURN ("VALUE":Low_tlim)
2680 CONTROL @Disp1;SET ("LOW LIMIT":Low_tlim)
2690 CONTROL @Meter1;SET ("LOW LIMIT":Low_tlim)
2700 RETURN
2710 Change_thigh:!
2720 STATUS @Temp_high;RETURN ("VALUE":High_tlim)
2730 CONTROL @Disp1;SET ("HIGH LIMIT":High_tlim)
2740 CONTROL @Meter1;SET ("HIGH LIMIT":High_tlim)
2750 RETURN
2760 Change_hlow:!
2770 STATUS @Humid_low;RETURN ("VALUE":Low_hlim)
2780 CONTROL @Disp12;SET ("LOW LIMIT":Low_hlim)
2790 CONTROL @Meter2;SET ("LOW LIMIT":Low_hlim)
2800 RETURN
2810 Change_hhigh:!
2820 STATUS @Humid_high;RETURN ("VALUE":High_hlim)
2830 CONTROL @Disp12;SET ("HIGH LIMIT":High_hlim)
2840 CONTROL @Meter2;SET ("HIGH LIMIT":High_hlim)
2850 RETURN
2860 Modify_profile:!
2870 STATUS @Time;RETURN ("VALUE":Time(Next))
2880 STATUS @Temp;RETURN ("VALUE":Temp(Next))
2890 STATUS @Humid;RETURN ("VALUE":Humid(Next))
2900 STATUS @Slope;RETURN ("VALUE":Ramp(Next))
2910 OUTPUT Buf$ USING Logimage2;"Time = ";Time(Next);" Temp=";Temp(Next);" Deg. C, Humid=";Humid(Next);" % Ramp=";Ramp(Next)
2920 CONTROL @Text2;SET ("APPEND TEXT":Buf$)
2930 Next=Next+1
2940 RETURN
2950 Clear_profile:!
2960 Next=1
2970 CONTROL @Text2;SET ("TEXT":"")
2980 RETURN
2990 Setup_profile: !
3000 DATA 0,15,35,55,75
3010 DATA 10,50,0,-30,23
3020 DATA 10,90,10,15,20
3030 DATA 2, 5, 7, 5, 10
3040 READ Time(1),Time(2),Time(3),Time(4),Time(5)
3050 READ Temp(1),Temp(2),Temp(3),Temp(4),Temp(5)
3060 READ Humid(1),Humid(2),Humid(3),Humid(4),Humid(5)
3070 READ Ramp(1),Ramp(2),Ramp(3),Ramp(4),Ramp(5)
3080 FOR I=1 TO 5
3090 OUTPUT Buf$ USING Logimage2;"Time = ";Time(I);" Temp=";Temp(I);" Deg. C, Humid=";Humid(I);" % Ramp=";Ramp(I)
3100 CONTROL @Text2;SET ("APPEND TEXT":Buf$)
3110 NEXT I
3120 Next=6
3130 RETURN
3140 Get_next_setpt: !
3150 Delta_time=TIMEDATE-Time_start
3160 Time(Next)=Time(Next-1)+Ramp(Index)+10
3170 WHILE (Delta_time>Time(Index+1) AND Index<>Next)
3180 Index=Index+1
3190 END WHILE
3200 IF Index=Next THEN
3210 Auto=0
3220 DIALOG "INFORMATION","The Temperature/Humidity profile has completed!";SET ("X":200,"Y":300)
3230 GOTO Btn4
3240 END IF
3250 IF (Delta_time<Time(Index)+Ramp(Index) AND Delta_time>Time(Index)) THEN
3260 IF (Index=1) THEN STATUS @Disp2;RETURN ("VALUE":Foo)
3270 IF (Index=1) THEN Temp(0)=Foo ! Cannot put Temp(0) in place of Foo
3280 IF (Index=1) THEN STATUS @Disp22;RETURN ("VALUE":Foo)
3290 IF (Index=1) THEN Humid(0)=Foo
3300 Mult=(Delta_time-Time(Index))/Ramp(Index)
3310 Setpt=Temp(Index-1)+(Temp(Index)-Temp(Index-1))*Mult
3320 Setpt2=Humid(Index-1)+(Humid(Index)-Humid(Index-1))*Mult
3330 ELSE
3340 Setpt=Temp(Index)
3350 Setpt2=Humid(Index)
3360 END IF
3370 CONTROL @Disp22;SET ("VALUE":Setpt2)
3380 CONTROL @Disp2;SET ("VALUE":Setpt)
3390 IF (Setpt<>Prevst) OR (Setpt2<>Prevst2) THEN
3400 Evt=Evt+1
3410 OUTPUT Buf$ USING Logimage;"#";Evt;": Time = ";TIME$(TIMEDATE);" Setpoint changed to ";Setpt;" Deg. C, ";Setpt2;" % Hum."
3420 CONTROL @Text;SET ("APPEND TEXT":Buf$)
3430 END IF
3440 Prevst=Setpt
3450 Prevst2=Setpt2
3460 RETURN
3470 Finis: END