Initial
This commit is contained in:
13
PLC/8 Media/POUs/LeviPump/DUTs/sPumpConfig.TcDUT
Normal file
13
PLC/8 Media/POUs/LeviPump/DUTs/sPumpConfig.TcDUT
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||
<DUT Name="sPumpConfig" Id="{9abed313-1fe2-45c1-b2c3-88ae8339c65d}">
|
||||
<Declaration><![CDATA[TYPE sPumpConfig :
|
||||
STRUCT
|
||||
TargetPressure : LREAL;
|
||||
RefillMaxTime : LREAL;
|
||||
CleaningCycles : INT;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
18
PLC/8 Media/POUs/LeviPump/LEVI_GVL.TcGVL
Normal file
18
PLC/8 Media/POUs/LeviPump/LEVI_GVL.TcGVL
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||
<GVL Name="LEVI_GVL" Id="{c0a02d29-10d8-495c-b8d5-33003fb00d77}">
|
||||
<Declaration><![CDATA[VAR_GLOBAL
|
||||
LeviModbusMaster : ARRAY[1..LeviNumberOfModbusMaster] OF ModbusMaster_FB;
|
||||
LeviPump : ARRAY[1..LeviNumberOfPump] OF LeviPumpIn_FB;
|
||||
VisuLeviPump : REFERENCE TO LeviPumpIn_FB := LeviPump[1];
|
||||
Levi2PumpMixSystem : ARRAY[1..2] OF Levi2PumpMixSystem_FB;
|
||||
END_VAR
|
||||
|
||||
|
||||
VAR_GLOBAL CONSTANT
|
||||
LeviNumberOfPump : INT := 9;
|
||||
LeviNumberOfModbusMaster : INT := 3;
|
||||
LeviNumberOfModbusQueue : UDINT := 3;
|
||||
END_VAR]]></Declaration>
|
||||
</GVL>
|
||||
</TcPlcObject>
|
||||
58
PLC/8 Media/POUs/LeviPump/Levi2PumpMixSystem_FB.TcPOU
Normal file
58
PLC/8 Media/POUs/LeviPump/Levi2PumpMixSystem_FB.TcPOU
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
||||
<POU Name="Levi2PumpMixSystem_FB" Id="{ece2ff75-6acd-40f3-8c3a-ce486569e98e}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK Levi2PumpMixSystem_FB
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
TargetVolume : REFERENCE TO LREAL;
|
||||
TargetFlow : REFERENCE TO LREAL;
|
||||
TargetRatio : REFERENCE TO LREAL;
|
||||
|
||||
System : REFERENCE TO LeviPumpIn_FB;
|
||||
Pump1 : REFERENCE TO LeviPumpIn_FB;
|
||||
Pump2 : REFERENCE TO LeviPumpIn_FB;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
Step : INT;
|
||||
END_VAR
|
||||
VAR PERSISTENT
|
||||
MixSystemOk : BOOL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF StationsStatus[iStation].Soll.Stop THEN
|
||||
IF Step > 10 THEN
|
||||
MixSystemOk := FALSE;
|
||||
Step := 0;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
IF System.bOutStartMix THEN
|
||||
IF System.bInTankFull THEN
|
||||
System.bOutStartMix := 0;
|
||||
ELSE
|
||||
Step := 10;
|
||||
END_IF
|
||||
END_IF
|
||||
10:
|
||||
IF System.bOutInitDone AND Pump1.bOutInitDone AND Pump2.bOutInitDone THEN
|
||||
Step := 20;
|
||||
END_IF
|
||||
20:
|
||||
IF Pump1.StartVolume(TargetVolume*(1-TargetRatio/100), TargetFlow*(1-TargetRatio/100)) AND
|
||||
Pump2.StartVolume(TargetVolume*(TargetRatio/100), TargetFlow*(TargetRatio/100)) THEN
|
||||
Pump1.bOutVolumeDone := FALSE;
|
||||
Pump2.bOutVolumeDone := FALSE;
|
||||
Step := 30;
|
||||
END_IF
|
||||
30:
|
||||
// System.bOutRefill := FALSE;
|
||||
System.bOutStartMix := FALSE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
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>
|
||||
6247
PLC/8 Media/POUs/LeviPump/VISUs/TankSystem_Visu.TcVIS
Normal file
6247
PLC/8 Media/POUs/LeviPump/VISUs/TankSystem_Visu.TcVIS
Normal file
File diff suppressed because it is too large
Load Diff
4009
PLC/8 Media/POUs/LeviPump/VISUs/VISU_LEVIPUMP_SERVICE.TcVIS
Normal file
4009
PLC/8 Media/POUs/LeviPump/VISUs/VISU_LEVIPUMP_SERVICE.TcVIS
Normal file
File diff suppressed because it is too large
Load Diff
1704
PLC/8 Media/POUs/LeviPump/VISUs/VISU_PUMP_CONFIG.TcVIS
Normal file
1704
PLC/8 Media/POUs/LeviPump/VISUs/VISU_PUMP_CONFIG.TcVIS
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user