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)
10050 IF Ya>0 OR Y=100 AND Cx<10 THEN GOSUB 20000
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