Sei sulla pagina 1di 5

FUNCTION

SimularMundo();
REAL Q1=0;
REAL Q2=0;
TANK_1.LEVEL=35000;
TANK_2.LEVEL=40000;
TANK_3.LEVEL=35000;
TANK_4.LEVEL=40000;
AUTOTANK_1.LEVEL=0;
WHILE TRUE DO
Q1=PUMP_1.CMND*(1.6667)*PUMP_1.SPEED; // LITROS POR SEGUNDO DE 0 A 10000
L/MIN
PUMP_1.GASTO=Q1;
Q2=PUMP_2.CMND*(1.6667)*PUMP_2.SPEED; // LITROS POR SEGUNDO DE 0 A 10000
L/MIN
PUMP_2.GASTO=Q2;
// CALCULO DEL NIVEL DEL TANQUE 1
IF ((SV_1.STATE=1) AND (SV_2.STATE=0) AND (SV_6.STATE=1)) OR
((SV_1.STATE=1) AND (SV_2.STATE=1) AND (SV_6.STATE=1)) THEN
TANK_1.LEVEL=TANK_1.LEVEL+((SV_1.STATE=1) AND (SV_2.STATE=0) AND
(SV_6.STATE=1))*(-Q2) + ((SV_1.STATE=1) AND (SV_2.STATE=1) AND
(SV_6.STATE=1))*(-Q2/2);
ELSE
TANK_1.LEVEL=TANK_1.LEVEL;
END
// CALCULO DEL NIVEL DEL TANQUE 2
IF ((SV_1.STATE=0) AND (SV_2.STATE=1) AND (SV_6.STATE=1)) OR
((SV_1.STATE=1) AND (SV_2.STATE=1) AND (SV_6.STATE=1)) THEN
TANK_2.LEVEL=TANK_2.LEVEL+((SV_1.STATE=0) AND (SV_2.STATE=1) AND
(SV_6.STATE=1))*(-Q2) + ((SV_1.STATE=1) AND (SV_2.STATE=1) AND
(SV_6.STATE=1))*(-Q2/2);
ELSE
TANK_2.LEVEL=TANK_2.LEVEL;
END
// CALCULO DEL NIVEL DEL TANQUE 3
IF ((SV_3.STATE=1) AND (SV_4.STATE=0) AND (SV_5.STATE=1)) OR
((SV_3.STATE=1) AND (SV_4.STATE=1) AND (SV_5.STATE=1)) THEN
TANK_3.LEVEL=TANK_3.LEVEL+((SV_3.STATE=1) AND (SV_4.STATE=0) AND
(SV_5.STATE=1))*(-Q1) + ((SV_3.STATE=1) AND (SV_4.STATE=1) AND
(SV_5.STATE=1))*(-Q1/2);
ELSE
TANK_3.LEVEL=TANK_3.LEVEL;
END
// CALCULO DEL NIVEL DEL TANQUE 4
IF ((SV_3.STATE=0) AND (SV_4.STATE=1) AND (SV_5.STATE=1)) OR
((SV_3.STATE=1) AND (SV_4.STATE=1) AND (SV_5.STATE=1)) THEN

TANK_4.LEVEL=TANK_4.LEVEL+((SV_3.STATE=0) AND (SV_4.STATE=1) AND


(SV_5.STATE=1))*(-Q1) + ((SV_3.STATE=1) AND (SV_4.STATE=1) AND
(SV_5.STATE=1))*(-Q1/2);
ELSE
TANK_4.LEVEL=TANK_4.LEVEL;
END
// CALCULO DEL NIVEL DEL AUTOTANQUE
IF (((SV_6.STATE=1) AND ((SV_1.STATE=1) OR (SV_2.STATE=1))) OR
((SV_5.STATE=1) AND ((SV_3.STATE=1) OR (SV_4.STATE=1)))) AND
((PENPOSICION.STATE=1) AND (CONMAGNA.STATE=1)) THEN
AUTOTANK_1.LEVEL=AUTOTANK_1.LEVEL+((SV_6.STATE=1) AND ((SV_1.STATE=1)
OR (SV_2.STATE=1)))*(Q2) + ((SV_5.STATE=1) AND ((SV_3.STATE=1) OR
(SV_4.STATE=1)))*(CONPREMIUM.STATE)*(Q1);
ELSE
AUTOTANK_1.LEVEL=AUTOTANK_1.LEVEL;
END
Sleep(1);
END
END
FUNCTION
ResetAutotank();
AUTOTANK_1.LEVEL=0;
END
FUNCTION
Llenado();
SV_1.STATE=0;
SV_2.STATE=0;
SV_3.STATE=0;
SV_4.STATE=0;
SV_5.STATE=0;
SV_6.STATE=0;
PUMP_1.CMND=0;
PUMP_2.CMND=0;
Sleep(1.5);
IF PMAGNA.STATE=1 THEN
IF (TANK_1.LEVEL<TANK_2.LEVEL) THEN
SV_1.STATE=1;
SV_6.STATE=1;
WHILE TANK_1.LEVEL>100 AND AUTOTANK_1.LEVEL<10000 DO
PUMP_2.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_2.SPEED=10;
ELSE
PUMP_2.SPEED=100;
END
END

PUMP_2.CMND=0;
SV_1.STATE=0;
SV_6.STATE=0;
IF TANK_1.LEVEL<100 THEN
SV_1.STATE=0;
SV_2.STATE=1;
WHILE AUTOTANK_1.LEVEL<10000 DO
SV_6.STATE=1;
PUMP_2.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_2.SPEED=10;
ELSE
PUMP_2.SPEED=100;
END
END
PUMP_2.CMND=0;
SV_2.STATE=0;
SV_6.STATE=0;
END
ELSE
SV_2.STATE=1;
SV_6.STATE=1;
WHILE TANK_2.LEVEL>100 AND AUTOTANK_1.LEVEL<10000 DO
PUMP_2.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_2.SPEED=10;
ELSE
PUMP_2.SPEED=100;
END
END
PUMP_2.CMND=0;
SV_2.STATE=0;
SV_6.STATE=0;
IF TANK_2.LEVEL<100 THEN
SV_2.STATE=0;
SV_1.STATE=1;
WHILE AUTOTANK_1.LEVEL<10000 DO
SV_6.STATE=1;
PUMP_2.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_2.SPEED=10;
ELSE
PUMP_2.SPEED=100;
END
END
PUMP_2.CMND=0;
SV_1.STATE=0;
SV_6.STATE=6;
END
END
ELSE
IF (TANK_3.LEVEL<TANK_4.LEVEL) THEN
SV_3.STATE=1;
SV_5.STATE=1;

WHILE TANK_3.LEVEL>100 AND AUTOTANK_1.LEVEL<10000 DO


PUMP_1.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_1.SPEED=10;
ELSE
PUMP_1.SPEED=100;
END
END
PUMP_1.CMND=0;
SV_3.STATE=0;
SV_5.STATE=0;
IF TANK_3.LEVEL<100 THEN
SV_3.STATE=0;
SV_4.STATE=1;
WHILE AUTOTANK_1.LEVEL<10000 DO
SV_5.STATE=1;
PUMP_1.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_1.SPEED=10;
ELSE
PUMP_1.SPEED=100;
END
END
PUMP_1.CMND=0;
SV_4.STATE=0;
SV_5.STATE=0;
END
ELSE
SV_4.STATE=1;
SV_5.STATE=1;
WHILE TANK_4.LEVEL>100 AND AUTOTANK_1.LEVEL<10000 DO
PUMP_1.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_1.SPEED=10;
ELSE
PUMP_1.SPEED=100;
END
END
PUMP_1.CMND=0;
SV_4.STATE=0;
SV_5.STATE=0;
IF TANK_4.LEVEL<100 THEN
SV_4.STATE=0;
SV_3.STATE=1;
WHILE AUTOTANK_1.LEVEL<10000 DO
SV_5.STATE=1;
PUMP_1.CMND=1;
IF (AUTOTANK_1.LEVEL < 0.1*10000) OR (AUTOTANK_1.LEVEL >
0.8*10000) THEN
PUMP_1.SPEED=10;
ELSE
PUMP_1.SPEED=100;
END
END

PUMP_1.CMND=0;
SV_3.STATE=0;
SV_5.STATE=0;
END
END
END

END

Potrebbero piacerti anche