3-point Control-W (COLBAS)
3-bodové ovládanie ventilu (len pracová verzia) - práca v TSKu nie je optimálna, ale pre nedostatok času to muselo stačšiť (na rýchlo urobené ovládanie priamo na stavbe)
.TSK100
1 -- 3-stav. Ventil PARY
10 Z:=5; -- Cas
20 Zx:=Z
30 Y1:=90; -- Doba OTV
40 Y2:=130; -- Doba ZAT
50 H1:=0; -- %/s OTV
60 H2:=0; -- %/s ZAT
70 @VIP1.LOL:=0; -- SKUTOCNA poloha VENTILu
75 Yl:=@VIP1.LOL
80 @VIP1.VP:=0; -- Ziadana poloha VENTILu z RGB
90 Z1:=TIME; -- Cas ZACIATKU-OTV
100 Z2:=TIME; -- Cas ZACIATKU-ZAT
104 D1:=0; -- Doba OTV
105 D2:=0; -- Doba ZAT
110 $060.DO:=0; -- faza OTV
120 $061.DO:=1; -- faza ZAT
500 WAIT DURING Y2+5
1000 -- LOOP
1010 Z:=Zx; H1:=100/Y1; H2:=100/Y2
1070 IF $060=1 THEN D1:=TIME-Z1; D2:=0
1080 IF $061=1 THEN D2:=TIME-Z2; D1:=0
1090 @VIP1.LOL:=MAX(MIN(Yl+D1*H1,100)-D2*H2,0)
1110 IF @VIP1.VP>@VIP1.LOL OR @VIP1.VP=100 THEN GOSUB 2000; GOTO 9998
1120 IF @VIP1.VP<@VIP1.LOL OR @VIP1.VP=0 THEN GOSUB 3000
1999 GOTO 9998
2000 -- OPEN
2001 Zp:=(@VIP1.VP-@VIP1.LOL)/H1
2015 IF @VIP1.VP=100 OR Zp>Z THEN $061.DO:=0; GOTO 2500
2020 IF Zp<1 THEN Z:=0; D1:=0; D2:=0; GOTO 2998
2030 IF $060=1 THEN GOTO 2050
2040 $061.DO:=0; Z1:=TIME
2050 $060.DO:=1; WAIT DURING Zp; $060.DO:=0; D1:=TIME-Z1; D2:=0
2060 GOTO 2998
2500 IF $060=0 THEN Z1:=TIME; $060.DO:=1
2510 Z:=0
2998 IF $060=0 THEN Yl:=@VIP1.LOL
2999 RETURN
3000 -- CLOSE
3001 Zp:=(@VIP1.LOL-@VIP1.VP)/H2
3015 IF @VIP1.VP=0 OR Zp>Z THEN $060.DO:=0; GOTO 3500
3020 IF Zp<1 THEN Z:=0; D2:=0; D1:=0; GOTO 3998
3030 IF $061=1 THEN GOTO 3050
3040 $060.DO:=0; Z2:=TIME
3050 $061.DO:=1; WAIT DURING Zp; $061.DO:=0; D2:=TIME-Z2; D1:=0
3060 GOTO 3998
3500 IF $061=0 THEN Z2:=TIME; $061.DO:=1
3510 Z:=0
3998 IF $061=0 THEN Yl:=@VIP1.LOL
3999 RETURN
9998 WAIT DURING Z-MOD(TIME,Z); GOTO 1000; --Skok na CYKLUS
9999 ; -- Prog. (c)TURSOFT - fa. Klimasoft s.r.o.
ORIGINÁLNA PROCEDÚRA - neschopná pre reguláciu tlaku pary
(pri zmene hodnoty čaká na dokončenie zmeny)
.PROC SWITCHVENTIL
ENTRY (IN:Tv,Hy,Y,Vo,Vc VAR:Yl,Cx)
1 -- 06-DEC-91
10010 $Vo.DO:=0
10011 $Vc.DO:=0
10012 IF Hy=0 OR Hy>Tv/10 THEN Hy:=MAX(Tv/100,1)
10020 Ya:=Tv/100*INT(Y-Yl)
10030 IF Y<>Yl THEN Cx:=0
10040 IF Y>0 AND Y<100 AND ABS(Ya)
10060 IF Ya<0 OR Y=0 AND Cx<10 THEN GOSUB 30000
10070 Cx:=Cx+(Y=100 OR Y=0); IF Cx=100 THEN Cx:=0
10080 Yl:=Y; ENDPROC
20000 -- OPEN
20015 IF Y=100 THEN $Vo.DO:=1; RETURN
20030 $Vo.DO:=1; WAIT DURING ABS(Ya); $Vo.DO:=0; RETURN
30000 -- CLOSE
30015 IF Y=0 THEN $Vc.DO:=1; RETURN
30030 $Vc.DO:=1; WAIT DURING ABS(Ya); $Vc.DO:=0; RETURN
EXIT