VAR_GLOBAL RETAIN
tT1,tT2,tT3,tT4:TIME;
st1,st2,st3,st4:REAL;
END_VAR
PROGRAM PLC_PRG
VAR
R15,R16,R17,R18,R19 :BOOL;
aStop:INT:=1;
iMod:INT:=0;
iModIn : INT := 0;
iModIn1 : INT := 0;
iModIn2 : INT := 0;
iModOut:INT:=0;
iModViduv : INT:=0;
iModPrivod: INT:=1;
bCheckStart : BOOL :=FALSE;
tTON1,tTON1_1: TON ;
d22: BOOL :=FALSE;d23: BOOL :=FALSE;d24: BOOL :=FALSE;d25: BOOL :=FALSE;
d26: BOOL :=FALSE;d27: BOOL :=FALSE;d28: BOOL :=FALSE;d29: BOOL :=FALSE;d30: BOOL :=FALSE;
d31: BOOL :=FALSE;d32: BOOL :=FALSE;d33: BOOL :=FALSE;d34: BOOL :=FALSE;d35: BOOL :=FALSE;
T:TIME;
bCheckIpPrivod: BOOL;
bCheckIpOut: BOOL;
bCheckIpViduv: BOOL;
bCheckIpIn: BOOL;
ObDNI: INT:=1;
arr: ARRAY [1..15] OF INT:=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
d36: BOOL;
END_VAR
t1;
t2;
t3;
t4;
iChek;
iModST;
tT1 :=REAL_TO_TIME(t1*1000);
tT2 :=REAL_TO_TIME(t2*1000);
tT3 :=REAL_TO_TIME(t3*1000);
tT4 :=REAL_TO_TIME(t4*1000);
IF t1=0 THEN
t1:=st1;
t2:=st2;
t3:=st3;
t4:=st4;
END_IF
IF t1>0 THEN
st1:=t1;
st2:=t2;
st3:=t3;
st4:=t4;
END_IF
mi1.0; (*ERROR STOP*)
mi1.1; (*ENABLE/DISABLE*)
IF (mi1.0 = FALSE) OR ( iChek = 0 )THEN
aStop:=1;
END_IF
IF (mi1.1 = FALSE) OR (iChek = 1) THEN
aStop:=0;
END_IF
bCheckIpPrivod;
IF d01 AND d03 AND d05 = TRUE THEN
bCheckIpPrivod:=TRUE;
END_IF
bCheckIpViduv;
IF (d07 AND d09 AND d11) = TRUE THEN
bCheckIpViduv:=TRUE;
ELSE
bCheckIpViduv:=FALSE;
END_IF
bCheckIpIn;
IF d15 AND d17 AND d19 AND d21
AND d25 AND d26 = TRUE THEN
bCheckIpIn:=TRUE;
ELSE
bCheckIpIn:=FALSE;
END_IF
bCheckIpOut;
IF d28 AND d30 AND d32 AND d34 = TRUE THEN
bCheckIpOut:=TRUE;
ELSE
bCheckIpOut:=FALSE;
END_IF
bCheckStart;
IF bCheckIpPrivod AND bCheckIpIn AND
bCheckIpOut AND bCheckIpViduv = TRUE THEN
bCheckStart:=TRUE;
ELSE
bCheckStart:=FALSE;
END_IF
d22:=mi.0;
d23:=mi.1;
d24:=mi.2;
d25:=mi.3;
d26:=mi.4;
d27:=mi.5;
d28:=mi.6;
d29:=mi.7;
d30:=mi.8;
d31:=mi.9;
d32:=mi.10;
d33:=mi.11;
d34:=mi.12;
d35:=mi.13;
d36:=mi.14;
mo.0:=R15;
mo.1:=R16;
mo.2:=R17;
mo.3:=R18;
mo.4:=R19;
T:= T#300ms;
CASE ObDNI OF
1:
IF R02=TRUE THEN
ObDNI:=2;
END_IF
2:
IF R02 = FALSE THEN ObDNI:=3; END_IF
3:
IF R02 = FALSE THEN
IF d36 = TRUE THEN
arr[1]:=arr[2];
arr[2]:=arr[3];
arr[3]:=arr[4];
arr[4]:=arr[5];
arr[5]:=arr[6];
arr[6]:=arr[7];
arr[7]:=arr[8];
arr[8]:=arr[9];
arr[9]:=arr[10];
arr[10]:=arr[11];
arr[11]:=arr[12];
arr[12]:=arr[13];
arr[13]:=arr[14];
arr[14]:=arr[15];
arr[15]:=1;
ELSE
arr[1]:=arr[2];
arr[2]:=arr[3];
arr[3]:=arr[4];
arr[4]:=arr[5];
arr[5]:=arr[6];
arr[6]:=arr[7];
arr[7]:=arr[8];
arr[8]:=arr[9];
arr[9]:=arr[10];
arr[10]:=arr[11];
arr[11]:=arr[12];
arr[12]:=arr[13];
arr[13]:=arr[14];
arr[14]:=arr[15];
arr[15]:=0;
END_IF;
END_IF
ObDNI:=1;
END_CASE
IF aStop = 1 THEN
iModIn:= 0;
iModIn1:= 0;
iModIn2:= 0;
iModOut:=0;
iModViduv:=0;
iModPrivod:=1;
iModST:=0;
R07:=FALSE;
R08:=FALSE;
R09:=FALSE;
R13:=FALSE;
R14:=FALSE;
R15:=FALSE;
CASE iMod OF
0:
tTON1(IN:=FALSE);
iMod:=1;
1:
tTON1(IN:=TRUE,PT:=T#400MS);
IF tTON1.Q = TRUE THEN
R04:=FALSE;
R05:=FALSE;
R06:=FALSE;
R10:=FALSE;
R11:=FALSE;
R12:=FALSE;
R16:=FALSE;
iMod:=2;
END_IF
2:
tTON1(IN:=FALSE); iMod:=3;
3: IF R06 = FALSE AND d11 = TRUE THEN
tTON1(IN:=TRUE,PT:=T#700MS);
IF tTON1.Q = TRUE THEN
R03:=FALSE;
R17:=FALSE;
R19:=FALSE;
iMod:=4;
END_IF
END_IF
4:
tTON1(IN:=FALSE); iMod:=5;
5:
tTON1(IN:=TRUE,PT:=T#400MS);
IF tTON1.Q = TRUE THEN
R01:=FALSE;
R02:=FALSE;
R18:=FALSE;
iMod:=6;
END_IF
6:
tTON1(IN:=FALSE);
END_CASE
END_IF
IF aStop = 0 THEN
iMod:=0;
END_IF
CASE iModPrivod OF
1:
IF (aStop=0 ) AND (bCheckStart = TRUE AND iChek = 1) THEN
iModPrivod:=2;
END_IF
2:
IF mi1.1 = TRUE THEN
iModPrivod:=3;
END_IF
3:
R01:=TRUE;
IF R01 = TRUE THEN iModPrivod:=4; END_IF
4:
IF d02 = TRUE AND d01 = FALSE THEN
R02:= TRUE;
IF R02=TRUE THEN iModPrivod:=5; END_IF
END_IF
5 :
IF d04 = TRUE AND d03 = FALSE THEN
R03:= TRUE;
IF R03=TRUE THEN
iModViduv:=1;
iModOut:=1;
iModIn :=1;
R01:=FALSE;
iModPrivod:=6;
END_IF
END_IF
6 :
IF R01 = FALSE AND d01 = TRUE THEN
R02:=FALSE;
END_IF
7 :
R03:=FALSE;
iModPrivod:=1;
END_CASE
CASE iModViduv OF
1:
IF d06 = TRUE THEN
R04:=TRUE;
IF R04 = TRUE AND d08 = TRUE AND d07 = FALSE THEN
iModViduv:=2;
END_IF
END_IF
2:
IF R04 = TRUE AND d08 = TRUE THEN
R05:=TRUE;
IF R05 = TRUE AND d10 = TRUE AND d09 = FALSE THEN
iModViduv:=3;
tTON1_1 (IN := FALSE);
END_IF
END_IF
3:
tTON1_1 (IN := TRUE, PT:= tT1+tT2+tT3+tT4+T#1s);
IF tTON1_1.ET >= T#0s THEN R06:=TRUE; END_IF
IF tTON1_1.ET >= tT1 AND iModST =1 AND arr[1]=1 THEN R07:=TRUE; END_IF
IF tTON1_1.ET >= tT2+tT1 AND iModST =1AND arr[1]=1THEN R08:=TRUE; END_IF
IF tTON1_1.ET >= tT1+tT2+tT3 THEN
R07:=FALSE;
R08:=FALSE;
IF tTON1_1.ET >= tT1+tT2+tT3+tT4 THEN
R06:=FALSE;
END_IF
IF R06 = FALSE THEN
tTON1_1 (in:=FALSE);
iModViduv:=4;
END_IF
END_IF
4:
R05:=FALSE;
IF R05 = FALSE AND d09 = TRUE THEN
R04:=FALSE;
iModViduv:=5;
END_IF
5:
IF d11 AND d07 = TRUE AND d08=FALSE THEN
iModPrivod:=7;
iModViduv:=0;
END_IF
END_CASE
CASE iModOut OF
1:
IF d06 = TRUE THEN
R19:=TRUE;
IF R19 = TRUE AND d35 = TRUE AND d34 = FALSE THEN
iModOut:=2;
END_IF
END_IF
2:
R16:=TRUE;
IF R16 = TRUE AND d29 = TRUE AND d28 = FALSE THEN
iModOut:=3;
END_IF
3:
R17:=TRUE;
IF R17 = TRUE AND d31 = TRUE AND d30 = FALSE THEN
iModOut:=4;
END_IF
4:
R18:=TRUE;
IF R18 = TRUE AND d33 = TRUE AND d32 = FALSE THEN
iModOut:=5;
END_IF;
5:
R19:=FALSE;
IF R19 = FALSE AND d34 = TRUE AND d35 = FALSE THEN
R16:=FALSE;
IF R16 = FALSE AND d28 = TRUE AND d29 = FALSE THEN
R17:=FALSE;
R18:=FALSE;
IF R17=FALSE AND R18=FALSE THEN
iModOut:=0;
END_IF
END_IF
END_IF
END_CASE
CASE iModIn OF
1:
IF d06 = TRUE THEN
R09:=TRUE;
IF R09 = TRUE AND d16 = TRUE AND d15 = FALSE THEN
iModIn:=2;
END_IF
END_IF
2:
R10:=TRUE;
IF R10 = TRUE AND d17=FALSE AND d18=TRUE THEN
iModIn:=3;
END_IF
3:
R11:=TRUE;
R14:=TRUE;
IF R11=TRUE AND R14=TRUE AND d24=TRUE AND d20=TRUE THEN
iModIn1:=1;
iModIn2:=1;
iModIn:=0;
END_IF
END_CASE
CASE iModIn1 OF
1:
IF R11= TRUE AND d20=TRUE THEN
R12:=TRUE;
IF R12=TRUE AND d21=FALSE AND d22=TRUE THEN
iModIn1:=2;
END_IF
END_IF
2:
R10:=FALSE;
IF R10= FALSE AND d17=TRUE AND d18=FALSE THEN
iModIn1:=3;
END_IF
3:
R15:=TRUE;
IF R15=TRUE AND d26=FALSE AND d27=TRUE THEN
iModIn1:=4;
END_IF
4:
R09:=FALSE;
IF R09=FALSE AND d16=FALSE AND d15=TRUE THEN
iModIn1:=5;
END_IF
5:
R15:=FALSE;
IF R15=FALSE AND d27=FALSE AND d26=TRUE THEN
iModIn1:=6;
END_IF
6:
R12:=FALSE;
IF R12=FALSE AND d22=FALSE AND d21=TRUE THEN
iModIn1:=7;
END_IF
7:
R11:=FALSE;
IF R11=FALSE AND d20=FALSE AND d19=TRUE THEN
iModIn1:=8;
END_IF
8:
iModIn1:=0;
END_CASE
CASE iModIn2 OF
1:
R14:=TRUE;
IF R14= TRUE AND d24=TRUE THEN
iModIn2:=2;
END_IF
2:
R13:=TRUE;
IF R13=TRUE AND d23=TRUE THEN
iModIn2:=3;
END_IF
3:
R14:=FALSE;
R13:=FALSE;
iModIn2:=0;
END_CASE