Initial
This commit is contained in:
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>
|
||||
Reference in New Issue
Block a user