Files
infineon_legacy_plc/PLC/8 Media/POUs/LeviPump/LeviPumpIn_FB.TcPOU
2026-01-08 11:08:17 +01:00

232 lines
5.5 KiB
XML

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