Initial
This commit is contained in:
232
PLC/8 Media/POUs/LeviPump/LeviPumpIn_FB.TcPOU
Normal file
232
PLC/8 Media/POUs/LeviPump/LeviPumpIn_FB.TcPOU
Normal file
@@ -0,0 +1,232 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
||||
<POU Name="LeviPumpIn_FB" Id="{c6a82a9d-ea54-43ce-a41e-f059e64c3d4d}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK LeviPumpIn_FB EXTENDS LeviPump_FB
|
||||
VAR_INPUT
|
||||
vTankRecirculation : BOOL;
|
||||
|
||||
bInStartCleanning : BOOL;
|
||||
Config : REFERENCE TO sPumpConfig := DummyConfig;
|
||||
bOutRecirculation AT %Q* : BOOL;
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
Comment : T_MaxString;
|
||||
bOutCleanningDone : BOOL;
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
bOutDrain AT %Q* : BOOL;
|
||||
bOutTankDIW AT %Q* : BOOL;
|
||||
|
||||
DummyConfig : sPumpConfig;
|
||||
CleanIndex : INT;
|
||||
|
||||
fbFormat : FB_FormatString;
|
||||
format : STRING;
|
||||
|
||||
RefillDIWTimeout : TON;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
bOutDrain := FALSE;
|
||||
bOutRecirculation := FALSE;
|
||||
bOutTankDIW := FALSE;
|
||||
END_IF
|
||||
|
||||
PumpMain();
|
||||
|
||||
IF bInStartCleanning THEN
|
||||
Cleanning();
|
||||
END_IF
|
||||
MediaArray[iStation][CleanIndex].Input := bOutCleanningDone;
|
||||
|
||||
|
||||
IF RefillMaxTime <> 0 THEN
|
||||
RefillDIWTimeout(IN := bOutTankDIW, PT := LREAL_TO_TIME(RefillMaxTime*1000));
|
||||
END_IF
|
||||
|
||||
IF RefillDIWTimeout.Q OR bInTankFull THEN
|
||||
bOutTankDIW := FALSE;
|
||||
END_IF
|
||||
|
||||
IF bCoolDown THEN
|
||||
IF vTankRecirculation THEN
|
||||
IF vPressurePump THEN
|
||||
rInTargetPressure := 0.1;
|
||||
END_IF
|
||||
bOutRecirculation := FALSE;
|
||||
ELSE
|
||||
InCMD := ePumpCmd.Poff;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
//IF RefillDIWTimeout.Q THEN
|
||||
// Error := TRUE;
|
||||
// error_index := AlarmSend(iStation, ErrorIndexRefillTimeOut, TRUE, eReportType.Info, sAvailableResponse.Ok, FALSE);
|
||||
//END_IF]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="Cleanning" Id="{5638e75f-3a36-4219-ae8a-d808363a1edf}">
|
||||
<Declaration><![CDATA[METHOD Cleanning : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
Counter : INT;
|
||||
Timer : TON;
|
||||
TimeLeft : LREAL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
Step := 0;
|
||||
bInStartCleanning := FALSE;
|
||||
Comment := '';
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
bOutCleanningDone := FALSE;
|
||||
Counter := 0;
|
||||
Step := 10;
|
||||
10:
|
||||
bOutDrain := TRUE;
|
||||
IF NOT bInTankNotEmpty THEN
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
CASE Language OF
|
||||
0:
|
||||
Comment := 'Waiting for the tank to empty.';
|
||||
1:
|
||||
Comment := 'Warten, bis der Tank leer ist.';
|
||||
END_CASE
|
||||
11:
|
||||
Timer(IN := TRUE, PT := T#10S);
|
||||
IF Timer.Q THEN
|
||||
Timer(IN := FALSE);
|
||||
bOutDrain := FALSE;
|
||||
Step := 20;
|
||||
END_IF
|
||||
TimeLeft := TIME_TO_LREAL(Timer.PT - Timer.ET)/1000;
|
||||
CASE Language OF
|
||||
0:
|
||||
format := 'Waiting %0.1fs.';
|
||||
1:
|
||||
format := 'Warten %0.1fs.';
|
||||
END_CASE
|
||||
fbFormat(
|
||||
sFormat := format,
|
||||
arg1 := F_LREAL(TimeLeft),
|
||||
sOut => Comment
|
||||
);
|
||||
20:
|
||||
CASE Language OF
|
||||
0:
|
||||
Comment := 'Waiting for the tank to be filled with water.';
|
||||
1:
|
||||
Comment := 'Warten, bis der Tank mit Wasser gefüllt ist.';
|
||||
END_CASE
|
||||
bOutTankDIW := TRUE;
|
||||
IF bInTankFull THEN
|
||||
bOutTankDIW := FALSE;
|
||||
Step := 30;
|
||||
END_IF
|
||||
30:
|
||||
bOutDrain := TRUE;
|
||||
IF NOT bInTankNotEmpty THEN
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
CASE Language OF
|
||||
0:
|
||||
Comment := 'Waiting for the tank to empty.';
|
||||
1:
|
||||
Comment := 'Warten, bis der Tank leer ist.';
|
||||
END_CASE
|
||||
31:
|
||||
Timer(IN := TRUE, PT := T#10S);
|
||||
IF Timer.Q THEN
|
||||
Timer(IN := FALSE);
|
||||
bOutDrain := FALSE;
|
||||
Step := 40;
|
||||
END_IF
|
||||
TimeLeft := TIME_TO_LREAL(Timer.PT - Timer.ET)/1000;
|
||||
CASE Language OF
|
||||
0:
|
||||
format := 'Waiting %0.1fs.';
|
||||
1:
|
||||
format := 'Warten %0.1fs.';
|
||||
END_CASE
|
||||
fbFormat(
|
||||
sFormat := format,
|
||||
arg1 := F_LREAL(TimeLeft),
|
||||
sOut => Comment
|
||||
);
|
||||
40:
|
||||
Counter := Counter +1;
|
||||
IF Counter >= Config.CleaningCycles THEN
|
||||
Step := 50;
|
||||
ELSE
|
||||
Step := 20;
|
||||
END_IF
|
||||
50:
|
||||
Comment := '';
|
||||
bInStartCleanning := FALSE;
|
||||
bOutCleanningDone := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="Initialization" Id="{e6ad9208-b5a0-4b2c-8767-8e262db0b887}">
|
||||
<Declaration><![CDATA[METHOD Initialization : BOOL
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
UnitID : BYTE;
|
||||
OutletValveIndex : INT;
|
||||
TankFeedIndex : INT;
|
||||
TankDrainIndex : INT;
|
||||
RecirculationIndex : INT;
|
||||
TankDIWIndex : INT;
|
||||
CleanIndex : INT;
|
||||
|
||||
ErrorIndexRefillTimeOut : int;
|
||||
|
||||
END_VAR
|
||||
VAR
|
||||
Counter : INT;
|
||||
ReadInfo : sModbusReadInfo;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[F_Initialization(iStation, UnitID, OutletValveIndex, TankFeedIndex, ErrorIndexRefillTimeOut);
|
||||
|
||||
THIS^.ErrorIndexRefillTimeOut := ErrorIndexRefillTimeOut;
|
||||
MediaArray[iStation][TankDrainIndex].ServiceName[0] := 'Drain';
|
||||
MediaArray[iStation][TankDrainIndex].ServiceName[1] := 'Abfluss';
|
||||
MediaArray[iStation][TankDrainIndex].bReferenceControl REF= bOutDrain;
|
||||
|
||||
|
||||
MediaArray[iStation][RecirculationIndex].ServiceName[0] := 'Recirculation';
|
||||
MediaArray[iStation][RecirculationIndex].ServiceName[1] := 'Rezirkulation';
|
||||
MediaArray[iStation][RecirculationIndex].bReferenceControl REF= bOutRecirculation;
|
||||
|
||||
MediaArray[iStation][TankDIWIndex].ServiceName[0] := 'DIW';
|
||||
MediaArray[iStation][TankDIWIndex].ServiceName[1] := 'DIW';
|
||||
MediaArray[iStation][TankDIWIndex].bReferenceControl REF= bOutTankDIW;
|
||||
|
||||
THIS^.CleanIndex := CleanIndex;
|
||||
MediaArray[iStation][CleanIndex].ServiceName[0] := 'Clean';
|
||||
MediaArray[iStation][CleanIndex].ServiceName[1] := 'Reinigen';
|
||||
MediaArray[iStation][CleanIndex].bReferenceControl REF= bInStartCleanning;
|
||||
MediaArray[iStation][CleanIndex].InputAvailable := TRUE;
|
||||
MediaArray[iStation][CleanIndex].NoErrorInput := TRUE;
|
||||
|
||||
|
||||
rInProcessPressure REF= Config.TargetPressure;
|
||||
|
||||
RefillMaxTime REF= Config.RefillMaxTime;
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user