267 lines
7.9 KiB
XML
267 lines
7.9 KiB
XML
<?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> |