This commit is contained in:
2026-01-08 11:08:17 +01:00
commit fe882dc444
311 changed files with 511562 additions and 0 deletions

View File

@@ -0,0 +1,754 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.13">
<POU Name="SPINNER_IO_FB" Id="{13e3c288-3e17-4db8-b75e-474c215ba022}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK SPINNER_IO_FB EXTENDS SPINNER_IO_STANDARD_FB
VAR
ChuckEject : ARRAY[1..2] OF PneumaticCylinder_FB;
ChuckUnLock : ARRAY[1..2] OF PneumaticCylinder_FB;
ModbusMaster : ModbusMaster_FB;
FlowSensor : ARRAY[1..NumberOfFlowSensor] OF LeviSensor_FB;
RobotRinse : MotorRinse_FB;
ChuckRinse : MotorRinse_FB;
RobotDoorLock : Lock_FB;
TestGetCenter : BOOL;
TargetCenter : INT;
END_VAR
VAR_INPUT
StrahlSensor : StrahlSensor_FB;
bOutPuddleNozzleHF AT %Q* : BOOL;
bOutPuddleNozzleSF1 AT %Q* : BOOL;
bOutPuddleNozzleSF2 AT %Q* : BOOL;
bOutPuddleNozzleSEF1 AT %Q* : BOOL;
bOutPuddleNozzleSF3 AT %Q* : BOOL;
bOutPuddleNozzleFilmEtchings AT %Q* : BOOL;
bOutPuddleNozzleSEF2 AT %Q* : BOOL;
bOutPuddleNozzleC2H4O2 AT %Q* : BOOL;
bOutPuddleNozzleDIWHot AT %Q* : BOOL;
bOutStaticNozzleC2H4O2 AT %Q* : BOOL;
bOutStaticNozzleDIWHot AT %Q* : BOOL;
bOutBSR AT %Q* : BOOL;
bOutPotRinse AT %Q* : BOOL;
bOutMeasuringChamberRinseDIW AT %Q* : BOOL;
bOutSprayGun AT %Q* : BOOL;
bOutSwitchSF1_SEF1 AT %Q* : BOOL;
bOutSwitchSF3_FilmEtchings AT %Q* : BOOL;
bOutSwitchC2H4O2_DIW AT %Q* : BOOL;
bOutChuckChangeOn : BOOL;
bOutChuckChangeOff : BOOL;
bOutMeasuringChamberRinseN2 AT %Q* : BOOL;
// KUKA : Spinner_KUKA_FB;
bOutStartCenter : BOOL;
sTest : sPoint;
sResult : sPoint;
END_VAR
VAR_OUTPUT
bInExhaustOk AT %I* : BOOL;
bInLeakage AT %I* : ARRAY[1..NumberOfLeakageSensor] OF BOOL;
bInFuseBlook AT %I* : BOOL;
MediaOk : BOOL := TRUE;
// bInStartRecipe AT %I* : BOOL;
bInStartRecipeTrigger : BOOL;
bOutMediaEnable : BOOL;
bInChuckAvailable AT %I* : ARRAY[1..3] OF BOOL;
bInChuckCoding AT %I* : ARRAY[1..3] OF BOOL;
rInCenterSensor AT %I* : REAL;
Point : INT := 1;
END_VAR
VAR CONSTANT
NumberOfLeakageSensor : INT := 4;
NumberOfFlowSensor : BYTE := 9;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[MediaCheck();
StandardMain();
ModbusMaster();
RobotDoorLock();
RobotRinse();
ChuckRinse();
StrahlSensor();
FOR i := 1 TO NumberOfFlowSensor DO
FlowSensor[i]();
END_FOR
IF bOutChuckChangeOn OR bOutChuckChangeOff THEN
IF ChuckChange(bOutChuckChangeOn) THEN
bOutChuckChangeOn := FALSE;
bOutChuckChangeOff := FALSE;
END_IF
END_IF
iMediaArray[eSpinnerMedienNamen.ChuckChangeOn].Disable := bOutChuckChangeOff OR NOT Chuck.bOutReady;
iMediaArray[eSpinnerMedienNamen.ChuckChangeOff].Disable := bOutChuckChangeOn OR NOT Chuck.bOutReady;
FOR i := 1 TO 2 DO
ChuckEject[i]();
ChuckUnLock[i]();
END_FOR
iMediaArray[eSpinnerMedienNamen.ChuckEjectExtend1].Disable := FALSE;
iMediaArray[eSpinnerMedienNamen.ChuckEjectExtend2].Disable := FALSE;
iMediaArray[eSpinnerMedienNamen.ChuckUnlockExtend1].Disable := FALSE;
iMediaArray[eSpinnerMedienNamen.ChuckUnlockExtend2].Disable := FALSE;
IF ABS(Chuck.rOutCurrentModuloPosition - Config.Chuck.HomePosition) > Chuck.rInTolerance THEN
iMediaArray[eSpinnerMedienNamen.ChuckEjectExtend1].Disable := TRUE;
iMediaArray[eSpinnerMedienNamen.ChuckEjectExtend2].Disable := TRUE;
iMediaArray[eSpinnerMedienNamen.ChuckUnlockExtend1].Disable := TRUE;
iMediaArray[eSpinnerMedienNamen.ChuckUnlockExtend2].Disable := TRUE;
END_IF
iMediaArray[eSpinnerMedienNamen.ChuckVacuumOff].Disable := Chuck.rOutCurrentVelocity > 100;
(*IF CMD[RobotStation] = GetCMD AND ROBOT_MAIN.TargetStation = iStation AND ROBOT_MAIN.RobotControl.bInPartOnSucker[ROBOT_MAIN.TargetPuddle] THEN
ChuckVacuum.Down(TRUE);
END_IF
IF CMD[RobotStation] = PutCMD AND ROBOT_MAIN.TargetStation = iStation AND NOT ROBOT_MAIN.RobotControl.bInPartOnSucker[ROBOT_MAIN.TargetPuddle] THEN
ChuckVacuum.Up(TRUE);
END_IF*)
IF ROBOT_MAIN.TargetStation = iStation THEN
CASE CMD[RobotStation] OF
GetCMD:
IF ROBOT_MAIN.RobotControl.bInPartOnSucker[ROBOT_MAIN.TargetPuddle] THEN
ChuckVacuum.Down(TRUE);
END_IF
PutCMD:
IF NOT ROBOT_MAIN.RobotControl.bInPartOnSucker[ROBOT_MAIN.TargetPuddle] THEN
ChuckVacuum.Up(TRUE);
END_IF
ChangeCMD:
IF SpinnerVacOff THEN
ChuckVacuum.Down(TRUE);
END_IF
IF SpinnerVacOn THEN
ChuckVacuum.Up(TRUE);
END_IF
END_CASE
END_IF
IF iStationStatus.Soll.Stop THEN
ChuckChange(FALSE);
END_IF
//IF iStation = FirstSpinner THEN
//sResult := GetOffset(sTest);
//END_IF
(*IF TestGetCenter THEN
IF GetCenter(0, TargetCenter, SEL(TargetCenter = 1, 0,5)) THEN
TestGetCenter := FALSE;
END_IF
END_IF*)]]></ST>
</Implementation>
<Method Name="ChuckChange" Id="{e561f27d-eb90-479f-be06-2897961050e1}">
<Declaration><![CDATA[METHOD ChuckChange : BOOL;
VAR_INPUT
Change : BOOL;
END_VAR
VAR_INST
Step : INT;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
Step := 0;
bOutChuckChangeOn := FALSE;
bOutChuckChangeOff := FALSE;
RETURN;
END_IF
CASE Step OF
0:
IF NOT Change THEN
IF ChuckEject[1].bInDown AND ChuckEject[2].bInDown AND ChuckUnLock[1].bInDown AND ChuckUnLock[2].bInDown THEN
ChuckChange := TRUE;
ELSE
Step := Step +1;
END_IF
ELSE
Step := Step +1;
END_IF
1:
IF ChuckEject[1].Down() AND ChuckEject[2].Down() AND ChuckUnLock[1].Down() AND ChuckUnLock[2].Down() THEN
Step := 10;
END_IF
10:
IF Change THEN
Step := 20;
ELSE
Step := 0;
Chuck.bInEnable := FALSE;
ChuckChange := TRUE;
END_IF
20:
Chuck.bOutReady := FALSE;
Chuck.bInEnable := FALSE;
Chuck.bInInit := TRUE;
Step := Step +1;
21:
IF Chuck.bOutReady THEN
Chuck.rInTargetPosition := Config.Chuck.HomePosition;
Chuck.rInTargetVelocity := Config.Chuck.HomeSpeed;
Chuck.rInTargetAcceleration := Config.Chuck.HomeAcceleration;
Chuck.bInStartModuloPosition := TRUE;
Chuck.bOutReady := FALSE;
Step := Step +1;
END_IF
22:
IF Chuck.bOutReady THEN
Step := 30;
END_IF
30:
IF ChuckUnLock[1].Up() AND ChuckUnLock[2].Up() THEN
Step := Step +1;
END_IF
31:
IF ChuckEject[1].Up() AND ChuckEject[2].Up() THEN
Step := Step +1;
END_IF
32:
IF ChuckEject[1].Down() AND ChuckEject[2].Down() THEN
Step := 40;
END_IF
40:
IF ChuckVacuum.Down() THEN
Step := 50;
END_IF
50:
ChuckChange := TRUE;
Step := 0;
END_CASE]]></ST>
</Implementation>
</Method>
<Method Name="ChuckChange_Robot" Id="{cfbc8cef-e83c-43f2-a5bd-202ee79f134d}">
<Declaration><![CDATA[METHOD ChuckChange_Robot : BOOL
VAR_INPUT
TargetChuck : USINT;
Stop : BOOL:= FALSE;
END_VAR
VAR
i : INT;
END_VAR
VAR_INST
Step : INT;
CheckChuck : INT;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[IF Stop THEN
Step := 0;
RETURN;
END_IF
IF iStationStatus.Error THEN
RETURN;
END_IF
CASE Step OF
0:
IF NOT iStationStatus.Ist.InitDone THEN
iStationStatus.ErrorIndex := AlarmSend(iStation:=iStationStatus.iStation,MsgId := Spinner_ErrorNr.eNotInitialized,TRUE, eReportType.Error, sAvailableResponse.Cancel, FALSE);
iStationStatus.Error := TRUE;
RETURN;
END_IF
IF NOT KUKA.bInPrimaryHomePosition THEN
iStationStatus.ErrorIndex := AlarmSend(iStation:=iStationStatus.iStation,MsgId := Spinner_ErrorNr.eRobotNotInHomePosition,TRUE, eReportType.Error, sAvailableResponse.Cancel, FALSE);
iStationStatus.Error := TRUE;
RETURN;
END_IF
CheckChuck := 0;
FOR i := 1 TO 3 DO
IF NOT bInChuckAvailable[i] THEN
CheckChuck := CheckChuck +1;
END_IF
END_FOR
IF CheckChuck > 1 THEN
iStationStatus.ErrorIndex := AlarmSend(iStation:=iStationStatus.iStation,MsgId := Spinner_ErrorNr.eChuckChangeChuckMissing,TRUE, eReportType.Error, sAvailableResponse.Cancel, FALSE);
iStationStatus.Error := TRUE;
RETURN;
END_IF
CheckChuck := 0;
FOR i := 1 TO 3 DO
IF NOT bInChuckCoding[i] THEN
CheckChuck := CheckChuck +1;
END_IF
END_FOR
IF CheckChuck > 1 THEN
iStationStatus.ErrorIndex := AlarmSend(iStation:=iStationStatus.iStation,MsgId := Spinner_ErrorNr.eChuckChangeChuckMissing,TRUE, eReportType.Error, sAvailableResponse.Cancel, FALSE);
iStationStatus.Error := TRUE;
RETURN;
END_IF
Step := 10;
10:
IF bInChuckAvailable[TargetChuck] THEN
Step := 20;
ELSE
ChuckChange_Robot := TRUE;
Step := 0;
END_IF
20:
IF iStationStatus.Ist.PrepOut THEN
Step := 30;
ELSE
Step := Step +1;
END_IF
21:
iCMD := PrepOutCMD;
Step := Step +1;
22:
IF NOT iStationStatus.Ist.Busy THEN
Step := 20;
END_IF
30:
IF ChuckChange(TRUE) THEN
Step := 40;
END_IF
40:
;
END_CASE]]></ST>
</Implementation>
</Method>
<Method Name="Initialization" Id="{f9023fdc-2cd4-473f-9304-f8e0cb150e83}">
<Declaration><![CDATA[METHOD Initialization : BOOL
VAR_INPUT
iStation : INT;
END_VAR
VAR
ServiceNameOn : ARRAY[0..NumberOfLanguages] OF T_MaxString;
ServiceNameOff : ARRAY[0..NumberOfLanguages] OF T_MaxString;
i : BYTE;
LanguagesString : ARRAY[0..NumberOfLanguages] OF T_MaxString;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[InitializationStandard(iStation);
StrahlSensor.NoComErrorIndex := SPINNER_ErrorNr.eBeamSensorNoCommunication;
StrahlSensor.Initialization(iStation, eSpinnerMedienNamen.BeamSensor);
LanguagesString[0] := 'Robot$NDoor Lock';
LanguagesString[1] := 'Robot$NDoor Lock';
RobotDoorLock.Initialization(
iStation,
eSpinnerMedienNamen.DoorLock2,
SPINNER_ErrorNr.eDoor2Close,
SPINNER_ErrorNr.eDoor2LockTimeOut,
LanguagesString
);
ServiceNameOn[0] := 'Chuck Eject 1$NExtend';
ServiceNameOn[1] := 'Chuck Eject 1$NExtend';
ServiceNameOff[0] := 'Chuck Eject 1$NRetract';
ServiceNameOff[1] := 'Chuck Eject 1$NRetract';
ChuckEject[1].Initialization(
iStation,
eSpinnerMedienNamen.ChuckEjectExtend1,
eSpinnerMedienNamen.ChuckEjectRetract1,
SPINNER_ErrorNr.ChuckEject1ExtendTimeout,
ServiceNameOn,
ServiceNameOff
);
ServiceNameOn[0] := 'Chuck Eject 2$NExtend';
ServiceNameOn[1] := 'Chuck Eject 2$NExtend';
ServiceNameOff[0] := 'Chuck Eject 2$NRetract';
ServiceNameOff[1] := 'Chuck Eject 2$NRetract';
ChuckEject[2].Initialization(
iStation,
eSpinnerMedienNamen.ChuckEjectExtend2,
eSpinnerMedienNamen.ChuckEjectRetract2,
SPINNER_ErrorNr.ChuckEject2ExtendTimeout,
ServiceNameOn,
ServiceNameOff
);
ServiceNameOn[0] := 'Chuck Unlock 1$NExtend';
ServiceNameOn[1] := 'Chuck Unlock 1$NExtend';
ServiceNameOff[0] := 'Chuck Unlock 1$NRetract';
ServiceNameOff[1] := 'Chuck Unlock 1$NRetract';
ChuckUnLock[1].Initialization(
iStation,
eSpinnerMedienNamen.ChuckUnlockExtend1,
eSpinnerMedienNamen.ChuckUnlockRetract1,
SPINNER_ErrorNr.ChuckUnlock1ExtendTimeout,
ServiceNameOn,
ServiceNameOff
);
ServiceNameOn[0] := 'Chuck Unlock 2$NExtend';
ServiceNameOn[1] := 'Chuck Unlock 2$NExtend';
ServiceNameOff[0] := 'Chuck Unlock 2$NRetract';
ServiceNameOff[1] := 'Chuck Unlock 2$NRetract';
ChuckUnLock[2].Initialization(
iStation,
eSpinnerMedienNamen.ChuckUnlockExtend2,
eSpinnerMedienNamen.ChuckUnlockRetract2,
SPINNER_ErrorNr.ChuckUnlock2ExtendTimeout,
ServiceNameOn,
ServiceNameOff
);
{region "Puddle Nozzle HF"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].ServiceName[0] := 'Puddle Nozzle$NHF';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].ServiceName[1] := 'Puddledüse$NHF';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].RecipeName[0] := 'Puddle Nozzle$NHF';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].RecipeName[1] := 'Puddledüse$NHF';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].bReferenceControl REF= bOutPuddleNozzleHF;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].bReferencePrepareMedia REF= LeviPump[5].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].bReferenceTankState REF= LeviPump[5].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].rReferenceFlow REF= FlowSensor[9].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleHF].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleHF].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit9;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleHF].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit9;
{endregion}
{region "Puddle Nozzle SF1 (0,4)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].ServiceName[0] := 'Puddle Nozzle$NSF1 (0,4)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].ServiceName[1] := 'Puddledüse$NSF1 (0,4)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].RecipeName[0] := 'Puddle Nozzle$NSF1';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].RecipeName[1] := 'Puddledüse$NSF1';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].bReferenceControl REF= bOutPuddleNozzleSF1;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].bReferencePrepareMedia REF= LeviPump[2].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].bReferenceTankState REF= LeviPump[2].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].rReferenceFlow REF= FlowSensor[1].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF1].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF1].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF1].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit;
{endregion}
{region "Puddle Nozzle SF2 (0,1)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].ServiceName[0] := 'Puddle Nozzle$NSF2 (0,1)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].ServiceName[1] := 'Puddledüse$NSF2 (0,1)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].RecipeName[0] := 'Puddle Nozzle$NSF2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].RecipeName[1] := 'Puddledüse$NSF2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].bReferenceControl REF= bOutPuddleNozzleSF2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].bReferenceResetControl REF= bOutPuddleNozzleSEF1;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].bReferencePrepareMedia REF= LeviPump[2].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].bReferenceTankState REF= LeviPump[2].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].rReferenceFlow REF= FlowSensor[3].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF2].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF2].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit3;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF2].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit3;
{endregion}
{region "Puddle Nozzle SF2 (0,1)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].ServiceName[0] := 'Puddle Nozzle$NSEF1 (0,1)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].ServiceName[1] := 'Puddledüse$NSEF1 (0,1)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].RecipeName[0] := 'Puddle Nozzle$NSEF1';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].RecipeName[1] := 'Puddledüse$NSEF1';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].bReferenceControl REF= bOutPuddleNozzleSEF1;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].bReferenceResetControl REF= bOutPuddleNozzleSF2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].bReferencePrepareMedia REF= LeviPump[8].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].bReferenceTankState REF= LeviPump[8].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].rReferenceFlow REF= FlowSensor[5].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSEF1].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSEF1].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit5;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF1].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit5;
{endregion}
{region "Puddle Nozzle SF3 (0,2)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].ServiceName[0] := 'Puddle Nozzle$NSF3 (0,2)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].ServiceName[1] := 'Puddledüse$NSF3 (0,2)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].RecipeName[0] := 'Puddle Nozzle$NSF3';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].RecipeName[1] := 'Puddledüse$NSF3';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].bReferenceControl REF= bOutPuddleNozzleSF3;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].bReferenceResetControl REF= bOutPuddleNozzleFilmEtchings;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].bReferencePrepareMedia REF= LeviPump[2].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].bReferenceTankState REF= LeviPump[2].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].rReferenceFlow REF= FlowSensor[2].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF3].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSF3].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSF3].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit2;
{endregion}
{region "Puddle Nozzle SF3 (0,2)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].ServiceName[0] := 'Puddle Nozzle$NFilm Etchings (0,2)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].ServiceName[1] := 'Puddledüse$NFilmätze (0,2)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].RecipeName[0] := 'Puddle Nozzle$NFilm Etchings';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].RecipeName[1] := 'Puddledüse$NFilmätze';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].bReferenceControl REF= bOutPuddleNozzleFilmEtchings;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].bReferenceResetControl REF= bOutPuddleNozzleSF3;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].bReferencePrepareMedia REF= LeviPump[9].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].bReferenceTankState REF= LeviPump[9].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].rReferenceFlow REF= FlowSensor[8].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit8;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleFilmEtchings].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit8;
{endregion}
{region "Puddle Nozzle SEF2 (0,3)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].ServiceName[0] := 'Puddle Nozzle$NSEF2 (0,3)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].ServiceName[1] := 'Puddledüse$NSEF2 (0,3)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].RecipeName[0] := 'Puddle Nozzle$NSEF2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].RecipeName[1] := 'Puddledüse$NSEF2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].bReferenceControl REF= bOutPuddleNozzleSEF2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].bReferencePrepareMedia REF= LeviPump[8].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].bReferenceTankState REF= LeviPump[8].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].rReferenceFlow REF= FlowSensor[4].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSEF2].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleSEF2].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit4;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleSEF2].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit4;
{endregion}
{region "Puddle Nozzle C2H4O2 (1,0)"}
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].ServiceName[0] := 'Puddle Nozzle$NC2H4O2 (1,0)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].ServiceName[1] := 'Puddledüse$NC2H4O2 (1,0)';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].RecipeName[0] := 'Puddle Nozzle$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].RecipeName[1] := 'Puddledüse$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].bReferenceControl REF= bOutPuddleNozzleC2H4O2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].bReferenceResetControl REF= bOutPuddleNozzleDIWHot;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].bReferencePrepareMedia REF= LeviPump[4].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].bReferenceTankState REF= LeviPump[4].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].rReferenceFlow REF= FlowSensor[6].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleC2H4O2].rLimit;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.PuddleNozzleC2H4O2].rTol;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit6;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleC2H4O2].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit6;
{endregion}
////
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].ServiceName[0] := 'Puddle Nozzle$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].ServiceName[1] := 'Puddledüse$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].RecipeName[0] := 'Puddle Nozzle$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].RecipeName[1] := 'Puddledüse$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].bReferenceControl REF= bOutPuddleNozzleDIWHot;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].bReferenceResetControl REF= bOutPuddleNozzleC2H4O2;
iMediaArray[eSpinnerMedienNamen.PuddleNozzleDIWHot].bReferenceTankState REF= MediaOk;
{region "Static Nozzle C2H4O2"}
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].ServiceName[0] := 'Static Nozzle$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].ServiceName[1] := 'Statische düse$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].RecipeName[0] := 'Static Nozzle$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].RecipeName[1] := 'Puddledüse$NC2H4O2';
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].bReferenceControl REF= bOutStaticNozzleC2H4O2;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].bReferencePrepareMedia REF= LeviPump[4].bInPrepareSystem;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].bReferenceTankState REF= LeviPump[4].bOutSystemReadyForFlow;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].InputFlowAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].rReferenceFlow REF= FlowSensor[7].rOutCurrentFlow;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].InRangeCheckFlow := TRUE;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].FlowLimit REF= Config.FlowCheck[eSpinnerMedienNamen.StaticNozzleC2H4O2].rLimit;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].FlowTol REF= Config.FlowCheck[eSpinnerMedienNamen.StaticNozzleC2H4O2].rTol;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].ErrorIndex_Underrange := SPINNER_ErrorNr.wFlowUnderLimit7;
iMediaArray[eSpinnerMedienNamen.StaticNozzleC2H4O2].ErrorIndex_Overrange := SPINNER_ErrorNr.wFlowOverLimit7;
{endregion}
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].ServiceName[0] := 'Static Nozzle$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].ServiceName[1] := 'Statische düse$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].RecipeName[0] := 'Static Nozzle$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].RecipeName[1] := 'Puddledüse$NTemp. DIW';
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].bReferenceControl REF= bOutStaticNozzleDIWHot;
iMediaArray[eSpinnerMedienNamen.StaticNozzleDIWHot].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.BSR].ServiceName[0] := 'BSR$NDIW';
iMediaArray[eSpinnerMedienNamen.BSR].ServiceName[1] := 'BSR$NDIW';
iMediaArray[eSpinnerMedienNamen.BSR].RecipeName[0] := 'BSR$NDIW';
iMediaArray[eSpinnerMedienNamen.BSR].RecipeName[1] := 'BSR$NDIW';
iMediaArray[eSpinnerMedienNamen.BSR].bReferenceControl REF= bOutBSR;
iMediaArray[eSpinnerMedienNamen.BSR].bReferenceTankState REF= MediaReady;
////
iMediaArray[eSpinnerMedienNamen.PotRinse].ServiceName[0] := 'Pot Rinse';
iMediaArray[eSpinnerMedienNamen.PotRinse].ServiceName[1] := 'Topfspülung';
iMediaArray[eSpinnerMedienNamen.PotRinse].RecipeName[0] := 'Pot Rinse';
iMediaArray[eSpinnerMedienNamen.PotRinse].RecipeName[1] := 'Topfspülung';
iMediaArray[eSpinnerMedienNamen.PotRinse].bReferenceControl REF= bOutPotRinse;
iMediaArray[eSpinnerMedienNamen.PotRinse].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].ServiceName[0] := 'Proccess Chamber$NRinseDIW';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].ServiceName[1] := 'Prozesskammerspülung$NDIW';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].RecipeName[0] := 'Proccess Chamber$NRinseDIW';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].RecipeName[1] := 'Prozesskammerspülung$NDIW';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].bReferenceControl REF= bOutMeasuringChamberRinseDIW;
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseDIW].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.SprayGun].ServiceName[0] := 'Spray Gun';
iMediaArray[eSpinnerMedienNamen.SprayGun].ServiceName[1] := 'Sprühpistole';
iMediaArray[eSpinnerMedienNamen.SprayGun].bReferenceControl REF= bOutSprayGun;
iMediaArray[eSpinnerMedienNamen.SprayGun].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.SwitchSF1_SEF1].ServiceName[0] := 'Switch$NSF2/SEF1';
iMediaArray[eSpinnerMedienNamen.SwitchSF1_SEF1].ServiceName[1] := 'Umaschalten$NSF1/SEF1';
iMediaArray[eSpinnerMedienNamen.SwitchSF1_SEF1].bReferenceControl REF= bOutSwitchSF1_SEF1;
iMediaArray[eSpinnerMedienNamen.SwitchSF1_SEF1].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.SwitchSF3_FilmEtchings].ServiceName[0] := 'Switch$NSF3/Film Etchings';
iMediaArray[eSpinnerMedienNamen.SwitchSF3_FilmEtchings].ServiceName[1] := 'Umaschalten$NSF3/Filmätze';
iMediaArray[eSpinnerMedienNamen.SwitchSF3_FilmEtchings].bReferenceControl REF= bOutSwitchSF3_FilmEtchings;
iMediaArray[eSpinnerMedienNamen.SwitchSF3_FilmEtchings].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.SwitchC2H4O2_DIW].ServiceName[0] := 'Switch$NC2H4O2/DIW Temp.';
iMediaArray[eSpinnerMedienNamen.SwitchC2H4O2_DIW].ServiceName[1] := 'Umaschalten$NC2H4O2/DIW Temp.';
iMediaArray[eSpinnerMedienNamen.SwitchC2H4O2_DIW].bReferenceControl REF= bOutSwitchC2H4O2_DIW;
iMediaArray[eSpinnerMedienNamen.SwitchC2H4O2_DIW].bReferenceTankState REF= MediaOk;
////
iMediaArray[eSpinnerMedienNamen.ChuckChangeOn].ServiceName[0] := 'Chuck Change$NOn';
iMediaArray[eSpinnerMedienNamen.ChuckChangeOn].ServiceName[1] := 'Chuck Change$Nein';
iMediaArray[eSpinnerMedienNamen.ChuckChangeOn].InputAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.ChuckChangeOn].bReferenceControl REF= bOutChuckChangeOn;
////
iMediaArray[eSpinnerMedienNamen.ChuckChangeOff].ServiceName[0] := 'Chuck Change$NOff';
iMediaArray[eSpinnerMedienNamen.ChuckChangeOff].ServiceName[1] := 'Chuck Change$Naus';
iMediaArray[eSpinnerMedienNamen.ChuckChangeOff].InputAvailable := TRUE;
iMediaArray[eSpinnerMedienNamen.ChuckChangeOff].bReferenceControl REF= bOutChuckChangeOff;
////
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseN2].ServiceName[0] := 'Measuring Chamber$NRinse N2';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseN2].ServiceName[1] := 'Messkammerspülung$NN2';
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseN2].bReferenceControl REF= bOutMeasuringChamberRinseN2;
iMediaArray[eSpinnerMedienNamen.MeasuringChamberRinseN2].bReferenceTankState REF= MediaReady;
ModbusMaster.iStation := iStation;
FOR i := 1 TO NumberOfFlowSensor DO
FlowSensor[i].MB REF= ModbusMaster;
FlowSensor[i].Initialization(iStation ,i);
END_FOR
RobotRinse.Initialization(iStation, eSpinnerMedienNamen.RobotRinsing, 0, FALSE);
iMediaArray[eSpinnerMedienNamen.RobotRinsing].ServiceName[0] := 'Robot Rinse$NN2';
iMediaArray[eSpinnerMedienNamen.RobotRinsing].ServiceName[1] := 'Roboterspülung$NN2';
RobotRinse.TimeOffDelay REF= Config.N2MotorTimer;
ChuckRinse.Initialization(iStation, eSpinnerMedienNamen.ChuckRinsing, 0, FALSE);
iMediaArray[eSpinnerMedienNamen.ChuckRinsing].ServiceName[0] := 'Chuck Rinse$NN2';
iMediaArray[eSpinnerMedienNamen.ChuckRinsing].ServiceName[1] := 'Chuckspülung$NN2';
ChuckRinse.TimeOffDelay REF= Config.N2MotorTimer;]]></ST>
</Implementation>
</Method>
<Action Name="MediaCheck" Id="{c0188b29-db69-4c08-8ccb-be256dcc53c8}">
<Implementation>
<ST><![CDATA[//DelayTimer(IN := TRUE, PT := T#5S);
// IF NOT DelayTimer.Q THEN
// RETURN;
// END_IF
//AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.wWasteTank, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, bInWasteTankOK);
AlarmSend(iStation, SPINNER_ErrorNr.eExhaust, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, bInExhaustOk);
FOR i := 1 TO NumberOfLeakageSensor DO
AlarmSend(iStation, SPINNER_ErrorNr.eLeakage + i -1, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, bInLeakage[i]);
END_FOR
AlarmSend(iStation, SPINNER_ErrorNr.eFuse, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, bInFuseBlook);
//AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.eLeakage, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, bInLeakage);
//AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.wWindowOpened, FALSE, eReportType.Error, sAvailableResponse.NoResponse, bInWindow1ClosedCh1 AND bInWindow1ClosedCh2);
//AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.wWindowOpened+1, FALSE, eReportType.Error, sAvailableResponse.NoResponse, bInWindow2ClosedCh1 AND bInWindow2ClosedCh2);
//AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.wTank1, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, InTankOk[1]);
FOR i := 1 TO 32 DO
IF CMD[GeneralStation] <> eStationCMD.StartCMD THEN
iMediaArray[i].bReferenceTankState := TRUE;
END_IF
AlarmSend(iStationStatus.iStation, SPINNER_ErrorNr.FlowMediaNotReady + i-1, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, iMediaArray[i].bReferenceTankState OR NOT iMediaArray[i].MediaUsedInFlow);
END_FOR]]></ST>
</Implementation>
</Action>
</POU>
</TcPlcObject>