HTBasic Help
×
Menu
Index

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