3-point Control (COLBAS)

3-bodové ovládanie ventilu - moju verziu pre TSK, prerobil p. Kurek do PROCEDÚRY a dotiahol do dokonalosti

.PROC VENTIL
ENTRY (IN:PL,Y VAR:J())
 5300 RESTORE TSKNR,PL; READ ot,zt,Tm
 5400 IF [TSKNR]Z<5 THEN [TSKNR]Z:=5
 5500 @ot.PUHW:=0; @ot.PUTIM:=Tm; @zt.PUHW:=0; @zt.PUTIM:=Tm
 5550 J(1):=INT(Y)*(Tm/100); J(3):=J(1)-J(2)
 5600 IF @ot.DO AND @ot.PUTIMA<1 THEN @ot.DO:=0
 5650 IF @zt.DO AND @zt.PUTIMA<1 THEN @zt.DO:=0
 5660 IF J(2)=100 AND Y<100 THEN @ot.PUTIMA:=0; @ot.DO:=0
 5670 IF J(2)=0 AND Y>0 THEN @zt.PUTIMA:=0; @zt.DO:=0
 6000 IF J(3)>MAX(2,INT(Tm/100)) THEN GOSUB 7000
 6100 IF J(3)  6700 IF Y=100 AND @ot.PUTIMA=0 AND @zt.PUTIMA=0 THEN J(5):=MAX(10,INT(Tm/10)); J(4):=J(5); GOSUB 9000
 6750 IF Y=0 AND @ot.PUTIMA=0 AND @zt.PUTIMA=0 THEN J(5):=MAX(10,INT(Tm/10)); J(4):=J(5); GOSUB 9100
 6800 IF ABS(J(3))>MAX(2,Tm/100) THEN J(2):=J(1);
 6900 ENDPROC
 7000 IF @ot.PUTIMA=0 AND @zt.PUTIMA=0 THEN J(5):=ABS(J(3)); J(4):=J(5); GOSUB 9000; RETURN
 7005 IF @ot.PUTIMA=0 AND @zt.PUTIMA>1 THEN J(5):=J(4)-J(3); GOSUB 9100; RETURN
 7006 IF @ot.PUTIMA>1 AND @zt.PUTIMA=0 THEN J(5):=@ot.PUTIMA+J(3); GOSUB 9000; RETURN
 7010 RETURN
 8000 IF @ot.PUTIMA=0 AND @zt.PUTIMA=0 THEN J(5):=ABS(J(3)); J(4):=J(5); GOSUB 9100; RETURN
 8005 IF @zt.PUTIMA=0 AND @ot.PUTIMA>1 THEN J(5):=J(4)+J(3); GOSUB 9000; RETURN
 8006 IF @zt.PUTIMA>1 AND @ot.PUTIMA=0 THEN J(5):=@zt.PUTIMA-J(3); GOSUB 9100; RETURN
 8010 RETURN
 9000 IF J(5)<0 THEN GOTO 9101
 9001 @zt.DO:=0; @zt.PUTIMA:=0; @ot.DO:=1; @ot.PUTIMA:=ABS(J(5)); RETURN
 9100 IF J(5)<0 THEN GOTO 9001
 9101 @ot.DO:=0; @ot.PUTIMA:=0; @zt.DO:=1; @zt.PUTIMA:=ABS(J(5)); RETURN
 9500 ENDPROC
EXIT


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