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)
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)
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