232 lines
5.5 KiB
XML
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> |