Initial
This commit is contained in:
1467
PLC/8 Media/POUs/Julabo/VISU_JULABO_TCP.TcVIS
Normal file
1467
PLC/8 Media/POUs/Julabo/VISU_JULABO_TCP.TcVIS
Normal file
File diff suppressed because it is too large
Load Diff
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
267
PLC/8 Media/POUs/MEDIA_IO_FB.TcPOU
Normal file
267
PLC/8 Media/POUs/MEDIA_IO_FB.TcPOU
Normal file
@@ -0,0 +1,267 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
||||
<POU Name="MEDIA_IO_FB" Id="{31f57afe-95b0-42bc-8207-3a8428599cb9}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK MEDIA_IO_FB EXTENDS Station_GENERAL_IO_FB
|
||||
VAR_INPUT
|
||||
Config : REFERENCE TO sMediaConfig;
|
||||
|
||||
SignalHorn AT %Q* : BOOL;
|
||||
SignalLampRed AT %Q* : BOOL;
|
||||
SignalLampYellow AT %Q* : BOOL;
|
||||
SignalLampgGreen AT %Q* : BOOL;
|
||||
SignalLampBlue AT %Q* : BOOL;
|
||||
|
||||
bOutVacuumPumpOff AT %Q* : BOOL;
|
||||
|
||||
DoorLock : ARRAY[1..3] OF Lock_FB;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
rInCDA AT %I* : DINT;
|
||||
rInVacuum AT %I* : DINT;
|
||||
rInN2 AT %I* : DINT;
|
||||
|
||||
FuseBlook AT %I* : ARRAY[1..NumberOfFuseBlock] OF BOOL;
|
||||
ExhaustOk AT %I* : ARRAY[1..NumberOfExhaust] OF BOOL;
|
||||
|
||||
EStopCH1 AT %I* : ARRAY[1..NumberOfEmergencyStop] OF BOOL;
|
||||
EStopCH2 AT %I* : ARRAY[1..NumberOfEmergencyStop] OF BOOL;
|
||||
|
||||
NoLeckage AT %I* : ARRAY[1..NumberOfLeckageSensor] OF BOOL;
|
||||
|
||||
bInCDAOk : BOOL;
|
||||
bInN2Ok : BOOL;
|
||||
bInVacOk : BOOL;
|
||||
|
||||
bInDoorClosedCh1 AT %I* : BOOL;
|
||||
bInDoorClosedCh2 AT %I* : BOOL;
|
||||
bOutMediaEnable AT %I* : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
Signal : REFERENCE TO sMediaSignal;
|
||||
|
||||
KOHTankStartHeating : BOOL;
|
||||
TMAHTankStartHeating : BOOL;
|
||||
DIWTankStartHeating : BOOL;
|
||||
|
||||
TimerAktorspannung : TON;
|
||||
|
||||
|
||||
bVacuumPumpOffCheck : BOOL;
|
||||
TimerVacuumPumpOff : TON;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
NumberOfFuseBlock : SINT := 3;
|
||||
NumberOfEmergencyStop : SINT := 8;
|
||||
NumberOfLeckageSensor : SINT := 1;
|
||||
// NumberOfOverFullSensor : SINT := 5;
|
||||
// NumberOfAbfalltank : BYTE := 1;
|
||||
NumberOfExhaust : SINT := 1;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[MediaCheck();
|
||||
bInCDAOk := rInCDA > Config.MinCDA*1000 OR Config.MinCDA = 0;
|
||||
bInN2Ok := rInN2 > Config.MinN2*1000 OR Config.MinN2 =0;
|
||||
//bInVacOk := ABS(rInVacuum) > Config.MinVac*1000 OR Config.MinVac =0;
|
||||
|
||||
SignalHorn := ReportDialogMng.Horn;
|
||||
SignalLampRed := ReportDialogMng.Ampel_Red;
|
||||
SignalLampYellow := CMD[GeneralStation] <> StartCMD AND StationsStatus[GeneralStation].Ist.InitDone;
|
||||
SignalLampgGreen := CMD[GeneralStation] = StartCMD;
|
||||
|
||||
|
||||
FOR i := 1 TO 3 DO
|
||||
DoorLock[i]();
|
||||
END_FOR
|
||||
|
||||
(*IF NOT iStationStatus.Ist.Service THEN
|
||||
bVacuumPumpOffCheck := FALSE;
|
||||
FOR i := FirstStation TO LastStation DO
|
||||
IF StationsStatus[i].Ist.Busy THEN
|
||||
bVacuumPumpOffCheck := TRUE;
|
||||
END_IF
|
||||
|
||||
IF StationsStatus[i].Ist.Service THEN
|
||||
bVacuumPumpOffCheck := TRUE;
|
||||
END_IF
|
||||
END_FOR
|
||||
bOutVacuumPumpOff := FALSE;
|
||||
TimerVacuumPumpOff(IN := NOT bVacuumPumpOffCheck, PT := T#10M);
|
||||
IF TimerVacuumPumpOff.Q THEN
|
||||
bOutVacuumPumpOff := TRUE;
|
||||
END_IF
|
||||
END_IF
|
||||
*)
|
||||
|
||||
IF NOT iStationStatus.Ist.Service THEN
|
||||
bOutVacuumPumpOff := bCoolDown;
|
||||
END_IF
|
||||
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
<Action Name="HeatingSystem" Id="{8f427b2d-81f3-47c2-9f04-ae1cd5506b7d}">
|
||||
<Implementation>
|
||||
<ST><![CDATA[FOR i:= 1 TO 5 DO
|
||||
Media_TankSystem[i]();
|
||||
END_FOR
|
||||
|
||||
MediaTankHeaterSignal[4].Enable := MediaTankHeaterSignal[3].Enable;
|
||||
MediaTankHeaterSignal[4].TargetTemperature := MediaTankHeaterSignal[3].TargetTemperature;
|
||||
MediaTankHeaterSignal[5].Enable := MediaTankHeaterSignal[3].Enable;
|
||||
MediaTankHeaterSignal[5].TargetTemperature := MediaTankHeaterSignal[3].TargetTemperature;
|
||||
|
||||
FOR i:= 1 TO 5 DO
|
||||
MediaTemperatureController[i]();
|
||||
END_FOR
|
||||
|
||||
|
||||
FOR i := 1 TO 5 DO
|
||||
MediaTankHeaterSignal[i].Enable := FALSE;
|
||||
END_FOR
|
||||
|
||||
|
||||
IF MediaArray[iStation][eMediaMedienNamen.KOHTankStartHeating].bReferenceControl THEN
|
||||
MediaTankHeaterSignal[1].Enable := TRUE;
|
||||
END_IF
|
||||
|
||||
IF MediaArray[iStation][eMediaMedienNamen.TMAHTankStartHeating].bReferenceControl THEN
|
||||
MediaTankHeaterSignal[2].Enable := TRUE;
|
||||
END_IF
|
||||
|
||||
IF MediaArray[iStation][eMediaMedienNamen.DIWTankStartHeating].bReferenceControl THEN
|
||||
MediaTankHeaterSignal[3].Enable := TRUE;
|
||||
MediaTankHeaterSignal[4].Enable := TRUE;
|
||||
MediaTankHeaterSignal[5].Enable := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
FOR i := 1 TO 2 DO
|
||||
IF NOT StationsStatus[iStation].Ist.Service THEN
|
||||
Media_TankSystem[i].bOutLoop := FALSE;
|
||||
END_IF
|
||||
|
||||
IF MediaTankHeaterSignal[i].Enable OR MediaTankHeaterSignal[i].StartTurne THEN
|
||||
Media_TankSystem[i].bOutLoop := TRUE;
|
||||
END_IF
|
||||
END_FOR
|
||||
|
||||
|
||||
|
||||
|
||||
IF StationsStatus[iStation].Ist.Service THEN
|
||||
Media_TankSystem[3].bOutLoop := FALSE;
|
||||
END_IF
|
||||
|
||||
FOR i := 3 TO 5 DO
|
||||
IF MediaTankHeaterSignal[i].Enable OR MediaTankHeaterSignal[i].StartTurne THEN
|
||||
Media_TankSystem[3].bOutLoop := TRUE;
|
||||
END_IF
|
||||
END_FOR
|
||||
|
||||
|
||||
IF Media_TankSystem[1].OutTankRefill THEN
|
||||
LeviMixTank[1].cmd := ePumpCmd.StartFlow;
|
||||
LeviMixTank[1].TargetFlow := Config.MixTargetFlow * (Config.MixRatio) / 100;
|
||||
|
||||
LeviMixTank[2].cmd := ePumpCmd.StartFlow;
|
||||
LeviMixTank[2].TargetFlow := Config.MixTargetFlow * (100-Config.MixRatio) / 100;
|
||||
MixTankDIWValve := TRUE;
|
||||
MixToBufferTank := TRUE;
|
||||
END_IF
|
||||
|
||||
IF Media_TankSystem[1].InTankFull THEN
|
||||
LeviMixTank[1].cmd := ePumpCmd.Poff;
|
||||
LeviMixTank[2].cmd := ePumpCmd.Poff;
|
||||
IF NOT iStationStatus.Ist.Service THEN
|
||||
MixTankDIWValve := FALSE;
|
||||
MixToBufferTank := FALSE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
IF NOT Media_TankSystem[4].InTankNotEmpty OR NOT Media_TankSystem[5].InTankNotEmpty THEN
|
||||
LeviMixTank[1].cmd := ePumpCmd.Poff;
|
||||
LeviMixTank[2].cmd := ePumpCmd.Poff;
|
||||
MixTankDIWValve := FALSE;
|
||||
MixToBufferTank := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Action>
|
||||
<Method Name="Initialization" Id="{80b9e36c-fa2a-4c37-b5ce-78419a5c43cf}">
|
||||
<Declaration><![CDATA[METHOD Initialization : BOOL
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
END_VAR
|
||||
VAR
|
||||
ServiceName : ARRAY[1..3] OF ARRAY[0..NumberOfLanguages] OF T_MaxString;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[InitializationExt(iStation);
|
||||
|
||||
|
||||
|
||||
iMediaArray[eMediaMedienNamen.VacuumPumpOff].ServiceName[0] := 'Puddle Nozzle$NSF2 (0,1)';
|
||||
iMediaArray[eMediaMedienNamen.VacuumPumpOff].ServiceName[1] := 'Puddledüse$NSF2 (0,1)';
|
||||
|
||||
iMediaArray[eMediaMedienNamen.VacuumPumpOff].bReferenceControl REF= bOutVacuumPumpOff;
|
||||
|
||||
ServiceName[1][0] := 'Door 1 Lock';
|
||||
ServiceName[1][1] := 'Door 1 Lock';
|
||||
|
||||
ServiceName[2][0] := 'Door 2 Lock';
|
||||
ServiceName[2][1] := 'Door 2 Lock';
|
||||
|
||||
ServiceName[3][0] := 'Door 3 Lock';
|
||||
ServiceName[3][1] := 'Door 3 Lock';
|
||||
|
||||
FOR i := 1 TO 3 DO
|
||||
DoorLock[i].Initialization(
|
||||
iStation,
|
||||
eMediaMedienNamen.DoorLock + i,
|
||||
MEDIA_ErrorNr.eDoorClose + i,
|
||||
MEDIA_ErrorNr.eDoorLockTimeOut + i,
|
||||
ServiceName[i]
|
||||
);
|
||||
END_FOR]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Action Name="MediaCheck" Id="{c3f6e8ad-2d2b-4bfb-b981-8183feb67956}">
|
||||
<Implementation>
|
||||
<ST><![CDATA[DelayTimer(IN := TRUE, PT := T#5S);
|
||||
IF NOT DelayTimer.Q THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.wActuatorPower, FALSE, eReportType.Error, sAvailableResponse.NoResponse, InAktorspannung);
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.wMediaSafety, FALSE, eReportType.Error, sAvailableResponse.NoResponse, Safety_PRG.MediaOk OR NOT InAktorspannung);
|
||||
|
||||
FOR i := 1 TO NumberOfEmergencyStop DO
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eEStop1+ i-1, FALSE, eReportType.Error, sAvailableResponse.NoResponse, EStopCH1[i] AND EStopCH2[i]);
|
||||
END_FOR
|
||||
FOR i := 1 TO NumberOfFuseBlock DO
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eFuseBlock1 + i-1, FALSE, eReportType.Error, sAvailableResponse.NoResponse, FuseBlook[i]);
|
||||
END_FOR
|
||||
|
||||
IF NumberOfExhaust > 0 THEN
|
||||
FOR i := 1 TO NumberOfExhaust DO
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eExhaust1+ i-1, FALSE, eReportType.Error, sAvailableResponse.NoResponse, ExhaustOk[i]);
|
||||
END_FOR
|
||||
END_IF
|
||||
|
||||
FOR i := 1 TO NumberOfLeckageSensor DO
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eLeakage1 + i-1, FALSE, eReportType.Error, sAvailableResponse.NoResponse, NoLeckage[i]);
|
||||
END_FOR
|
||||
|
||||
TimerAktorspannung(IN := InAktorspannung, PT := T#10S);
|
||||
IF TimerAktorspannung.Q THEN
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eCDA, FALSE, eReportType.Error, sAvailableResponse.NoResponse,bInCDAOk);
|
||||
AlarmSend(iStation, MEDIA_ErrorNr.eN2, FALSE, eReportType.Error, sAvailableResponse.NoResponse,bInN2Ok);
|
||||
// AlarmSend(iStation, MEDIA_ErrorNr.eVacuum, FALSE, eReportType.Error, sAvailableResponse.NoResponse,bInVacOk);
|
||||
END_IF
|
||||
|
||||
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Action>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
245
PLC/8 Media/POUs/MEDIA_MAIN_FB.TcPOU
Normal file
245
PLC/8 Media/POUs/MEDIA_MAIN_FB.TcPOU
Normal file
@@ -0,0 +1,245 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.13">
|
||||
<POU Name="MEDIA_MAIN_FB" Id="{c28cbc9e-e87c-4ffe-951e-c8ecddc3b3bb}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK MEDIA_MAIN_FB EXTENDS Station_GENERAL_MAIN_FB IMPLEMENTS I_STATION_CMD_CALL
|
||||
VAR_INPUT
|
||||
IO : MEDIA_IO_FB;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
Config : sMediaConfig;
|
||||
ConfigOld : sMediaConfig;
|
||||
i : INT;
|
||||
|
||||
PumpTimer : TON;
|
||||
bAutoEnter : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="FB_Init" Id="{231267af-e423-4fde-b02d-c8b89e8056d1}">
|
||||
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
|
||||
//The return value is not evaluated. For a specific influence, you can also declare the
|
||||
//methods explicitly and provide additional code there with the standard initialization
|
||||
//code. You can evaluate the return value.
|
||||
METHOD FB_Init: BOOL
|
||||
VAR_INPUT
|
||||
bInitRetains: BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold)
|
||||
bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change)
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_VisuName := 'MEDIA';]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="INIT" Id="{3fbb1f09-149e-4f88-af9d-73251343ea7a}">
|
||||
<Declaration><![CDATA[METHOD INIT : BOOL
|
||||
VAR
|
||||
i : int;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE _Step OF
|
||||
0:
|
||||
FOR i := 1 TO 3 DO
|
||||
IF NOT IO.DoorLock[i].Lock() THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
END_FOR
|
||||
_Step := 10;
|
||||
10:
|
||||
FOR i := 1 TO vJulaboM DO
|
||||
Julabo[i].rInTargetTemperature := 21;
|
||||
Julabo[i].bInEnable := TRUE;
|
||||
END_FOR
|
||||
INIT := TRUE;
|
||||
_Step := 0;
|
||||
END_CASE
|
||||
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="Initialization" Id="{330e0fdb-1091-4299-89b4-04cd520e3af1}">
|
||||
<Declaration><![CDATA[METHOD Initialization : BOOL
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
END_VAR
|
||||
VAR
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[InitializationExt(iStation);
|
||||
|
||||
iStationStatus.NoStopServiceExit := TRUE;
|
||||
iStationStatus.NoAutoStart := TRUE;
|
||||
iStationStatus.NoOperationMode := TRUE;
|
||||
|
||||
ConfigManagement.Initialization(ADR(Config), ADR(ConfigOld), SIZEOF(Config), 'sMediaConfig', 'MEDIA');
|
||||
ConfigPlausibility REF= Config.ConfigPlausibility;
|
||||
|
||||
iStationStatus.StationName := 'Media';
|
||||
iStationStatus.ErrorList := 'MEDIA_ErrorNr';
|
||||
|
||||
IO.Initialization(iStation);
|
||||
IO.Config REF= Config;
|
||||
|
||||
Safety_PRG.vMediaSafetyAvailable := TRUE;
|
||||
|
||||
|
||||
Julabo[1].NAME := 'Julabo DIW';
|
||||
Julabo[2].NAME := 'Julabo SEF';
|
||||
Julabo[3].NAME := 'Julabo SF';
|
||||
|
||||
FOR i := 1 TO vJulaboM DO
|
||||
Julabo[i].ControlIndex_Enable := eMediaMedienNamen.Julabo1On + i - 1;
|
||||
Julabo[i].ErrorIndex_NoConnection := Media_ErrorNr.eJulaboCommunicationError+i-1;
|
||||
Julabo[i].ErrorIndex_System := Media_ErrorNr.eJulaboSystemError+i-1;
|
||||
Julabo[i].ErrorIndex_OutOfRange := Media_ErrorNr.eJulaboTempNotInRange+i-1;
|
||||
Julabo[i].rInMinTemperature := 20;
|
||||
Julabo[i].rInMaxTemperature := 80;
|
||||
|
||||
Julabo[i].Initialization(
|
||||
iStation,
|
||||
JulaboIPAddress[i]
|
||||
);
|
||||
END_FOR
|
||||
|
||||
|
||||
LeviModbusMaster[1].iStation := iStation;
|
||||
LeviModbusMaster[2].iStation := iStation;
|
||||
LeviModbusMaster[3].iStation := iStation;
|
||||
|
||||
FOR i := 1 TO LeviNumberOfPump DO
|
||||
CASE i OF
|
||||
8,9:
|
||||
LeviPump[i].vMixTank := TRUE;
|
||||
ELSE
|
||||
LeviPump[i].vAutoFill := TRUE;
|
||||
END_CASE
|
||||
|
||||
LeviPump[i].Config REF= Config.PumpConfig[i];
|
||||
|
||||
LeviPump[i].EmptyErrorIndex := MEDIA_ErrorNr.eTankEmpty +i;
|
||||
LeviPump[i].OverFullErrorIndex := MEDIA_ErrorNr.eTankOverFull +i;
|
||||
|
||||
LeviPump[i].Initialization(
|
||||
iStation := iStation,
|
||||
UnitID := INT_TO_BYTE(i),
|
||||
eMediaMedienNamen.TankValve+i-1,
|
||||
eMediaMedienNamen.TankFeed+i-1,
|
||||
eMediaMedienNamen.TankDrain+i-1,
|
||||
eMediaMedienNamen.TankRecirculation+i-1,
|
||||
eMediaMedienNamen.TankDIW+i-1,
|
||||
eMediaMedienNamen.TankClean+i-1,
|
||||
MEDIA_ErrorNr.eFillTimeout + i
|
||||
);
|
||||
END_FOR
|
||||
|
||||
LeviPump[1].MB REF= LeviModbusMaster[1];
|
||||
LeviPump[4].MB REF= LeviModbusMaster[1];
|
||||
LeviPump[9].MB REF= LeviModbusMaster[1];
|
||||
|
||||
LeviPump[7].MB REF= LeviModbusMaster[2];
|
||||
LeviPump[3].MB REF= LeviModbusMaster[2];
|
||||
LeviPump[8].MB REF= LeviModbusMaster[2];
|
||||
|
||||
LeviPump[5].MB REF= LeviModbusMaster[3];
|
||||
LeviPump[6].MB REF= LeviModbusMaster[3];
|
||||
LeviPump[2].MB REF= LeviModbusMaster[3];
|
||||
|
||||
LeviPump[1].MediaName := 'Tank System 1 C2H4O2(99%)';
|
||||
LeviPump[2].MediaName := 'Tank System 2 SF';
|
||||
LeviPump[2].vTankRecirculation := TRUE;
|
||||
LeviPump[3].MediaName := 'Tank System 3 HNO2(65%)';
|
||||
LeviPump[4].MediaName := 'Tank System 4 C2H4O2(10%)';
|
||||
LeviPump[5].MediaName := 'Tank System 5 HF(40%)';
|
||||
LeviPump[6].MediaName := 'Tank System 6 SF';
|
||||
LeviPump[7].MediaName := 'Tank System 7 HF(40%)';
|
||||
LeviPump[8].MediaName := 'Tank System 8 (1+6) SEF';
|
||||
LeviPump[8].vTankRecirculation := TRUE;
|
||||
LeviPump[9].MediaName := 'Tank System 9 (3+7) FILMÄTZEN';
|
||||
LeviPump[9].vTankRecirculation := TRUE;
|
||||
|
||||
Levi2PumpMixSystem[1].System REF= LeviPump[9];
|
||||
Levi2PumpMixSystem[1].Pump1 REF= LeviPump[3];
|
||||
Levi2PumpMixSystem[1].Pump2 REF= LeviPump[7];
|
||||
|
||||
Levi2PumpMixSystem[1].iStation := iStation;
|
||||
Levi2PumpMixSystem[1].TargetFlow REF= Config.MixTargetFlow[1];
|
||||
Levi2PumpMixSystem[1].TargetRatio REF= Config.MixRatio[1];
|
||||
Levi2PumpMixSystem[1].TargetVolume REF= Config.MixTargetVolume[1];
|
||||
|
||||
Levi2PumpMixSystem[2].System REF= LeviPump[8];
|
||||
Levi2PumpMixSystem[2].Pump1 REF= LeviPump[1];
|
||||
Levi2PumpMixSystem[2].Pump2 REF= LeviPump[6];
|
||||
|
||||
Levi2PumpMixSystem[2].iStation := iStation;
|
||||
Levi2PumpMixSystem[2].TargetFlow REF= Config.MixTargetFlow[2];
|
||||
Levi2PumpMixSystem[2].TargetRatio REF= Config.MixRatio[2];
|
||||
Levi2PumpMixSystem[2].TargetVolume REF= Config.MixTargetVolume[2];
|
||||
|
||||
HV_SCHUSTER.Initialization(
|
||||
iStation := FirstHV,
|
||||
IPAdress := '192.168.1.203',
|
||||
Port := 7
|
||||
);
|
||||
HV_SCHUSTER.NoComErrorIndex := HV_ErrorNr.eNoCommunication;
|
||||
|
||||
|
||||
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].ServiceName[0] := _VisuName;
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].ServiceName[1] := _VisuName;
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].bReferenceControl REF= bAutoEnter;
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].NoErrorInput := TRUE;
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].InputAvailable := TRUE;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="MAIN" Id="{2d83faa9-aac5-46d5-a5bf-b7d022b2d36d}">
|
||||
<Declaration><![CDATA[METHOD MAIN : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[VisuElems.CURRENTLANGUAGE := Config.Language;
|
||||
IF Config.Language = 'de' THEN
|
||||
Language := 1;
|
||||
ELSE
|
||||
Language := 0;
|
||||
END_IF
|
||||
|
||||
HV_SCHUSTER();
|
||||
|
||||
IO();
|
||||
|
||||
FOR i := 1 TO LeviNumberOfModbusMaster DO
|
||||
LeviModbusMaster[i]();
|
||||
END_FOR
|
||||
|
||||
FOR i := 1 TO LeviNumberOfPump DO
|
||||
LeviPump[i]();
|
||||
END_FOR
|
||||
|
||||
FOR i := 1 TO 2 DO
|
||||
Levi2PumpMixSystem[i]();
|
||||
END_FOR
|
||||
|
||||
FOR i := 1 TO vJulaboM DO
|
||||
Julabo[i]();
|
||||
END_FOR
|
||||
|
||||
IF bAutoEnter THEN
|
||||
bAutoEnter := FALSE;
|
||||
StationCMD.AutomaticEnter(iStation);
|
||||
END_IF
|
||||
|
||||
iMediaArray[eMediaMedienNamen.AutoEnter].Input := iStationStatus.Ist.InitDone;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="TurnOffAllMedia" Id="{d0aafb18-3800-45a2-b07a-8042f0a67795}">
|
||||
<Declaration><![CDATA[METHOD TurnOffAllMedia : BOOL
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user