Files
HundM_Fortna/=A01+UH04-KF00/Programmbausteine/100_Main/FB_Main.scl
T

1836 lines
100 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FUNCTION_BLOCK "FB_Main"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_IN_OUT
stInOutControlUnitCabinet : "UDT_MainState";
END_VAR
VAR
fbCarousel4003 : "FB_Conveyor";
END_VAR
VAR RETAIN
arCognexInterface { S7_SetPoint := 'False'} : Array[1.."cNoScanner"] of "stCognexInterface";
END_VAR
VAR
stCognexInterfaceDummy : "stCognexInterface"; // Als Platzhalter benutzen für TRO ohne Barcode-Leser
stBarcodeReaderDummy : "UDT_BarcodeReader";
TRO400 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario";
TRO401 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario";
TRO402 : "FB_ILS_MTRO_1Sep";
TRO403 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario";
TRO404 : "FB_ILS_MTRO_1Sep";
TRO405 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_1Sep1Swi";
TRO406 : "FB_ILS_MTRO_1Sep";
TRO407 : "FB_ILS_MTRO_1Sep1Swi";
TRO408 : "FB_ILS_MTRO_Vario";
TRO409 : "FB_ILS_MTRO_1Sep";
TRO410 : "FB_ILS_MTRO_1Sep1Swi";
TRO411 : "FB_ILS_MTRO_Vario";
TRO412 : "FB_ILS_MTRO_1Sep";
TRO413 : "FB_ILS_MTRO_1Sep1Swi";
TRO414 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario";
TRO415 : "FB_ILS_MTRO_1Sep";
TRO416 : "FB_ILS_MTRO_1Sep";
TRO417 : "FB_ILS_MTRO_1Sep";
TRO418 : "FB_ILS_MTRO_Vario";
TRO419 : "FB_ILS_MTRO_1Sep";
TRO420 : "FB_ILS_MTRO_Vario";
TRO421 : "FB_ILS_MTRO_Vario_workStation";
TRO422 : "FB_ILS_MTRO_Vario_workStation";
TRO423 : "FB_ILS_MTRO_Vario_workStation";
TRO424 : "FB_ILS_MTRO_1Sep";
fbBarcodeReaderBX4103 : "FB_BarcodeReaderCognex";
xStartScan4103 : Bool;
xHandshakeScanb4103 : Bool;
nBarcodeReaderBX4103_Result : DInt;
fbBarcodeReaderBX4105 : "FB_BarcodeReaderCognex";
xStartScan4105 : Bool;
xHandshakeScan4105 : Bool;
nBarcodeReaderBX4105_Result : DInt;
fbBarcodeReaderBX4107 : "FB_BarcodeReaderCognex";
xStartScan4107 : Bool;
xHandshakeScan4107 : Bool;
nBarcodeReaderBX4107_Result : DInt;
xReInit : Bool;
rTrigReInit {InstructionName := 'R_TRIG'; LibVersion := '1.0'; S7_SetPoint := 'False'} : R_TRIG;
"rTrig_Workstation 1" {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
"rTrig_Workstation 2" {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
"rTrig_Workstation 3" {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
END_VAR
VAR_TEMP
nActCar : Int;
nActNo : Int;
nNiu : DInt;
stGenerateCarrier : "stCarrier";
nCounter1 : DInt;
xResult1 : Bool;
nIdx : Int;
nIdx2 : Int;
nFound : Int;
stEmptyCarrier : "stCarrier";
stEmptyCarrierData : "stJamData";
arCarrierPlaceHolder : Array[1..1] of "stCarrier"; // Platzhalter
stJamDataPlaceHolder : "stJamData";
stHMISwitchPlaceholder : "UDT_UnloadingStation";
idx : Int;
arEmptyStorageLine_1 : Int;
arEmptyStorageLine : Array[1..1] of "stCarrier";
t_automatik : Bool;
arDummyEventCorrectionInfo : Array[0..1] of "stEventCorrectionInfo";
tmpLaneStatus : Array[0..4] of String;
arStCarrierLeaveControl : Array[1..1] of "stCarrier";
stJamDataLeaveControl : "stJamData";
arCarrier4010 : Array[1..1] of "stCarrier"; // Platzhalter
stJamData4010 : "stJamData";
END_VAR
BEGIN
REGION Reinitialisieren
IF NOT #xReInit THEN
#xReInit := TRUE;
END_IF;
#rTrigReInit(CLK := #xReInit);
IF #rTrigReInit.Q THEN
#TRO400.nState := "DB_GLOB_TroState".arTroState["cMainTro400"];
#TRO401.nState := "DB_GLOB_TroState".arTroState["cMainTro401"];
#TRO402.nState := "DB_GLOB_TroState".arTroState["cMainTro402"];
#TRO403.nState := "DB_GLOB_TroState".arTroState["cMainTro403"];
#TRO404.nState := "DB_GLOB_TroState".arTroState["cMainTro404"];
#TRO405.nState := "DB_GLOB_TroState".arTroState["cMainTro405"];
#TRO406.nState := "DB_GLOB_TroState".arTroState["cMainTro406"];
#TRO407.nState := "DB_GLOB_TroState".arTroState["cMainTro407"];
#TRO408.nState := "DB_GLOB_TroState".arTroState["cMainTro408"];
#TRO409.nState := "DB_GLOB_TroState".arTroState["cMainTro409"];
#TRO410.nState := "DB_GLOB_TroState".arTroState["cMainTro410"];
#TRO411.nState := "DB_GLOB_TroState".arTroState["cMainTro411"];
#TRO412.nState := "DB_GLOB_TroState".arTroState["cMainTro412"];
#TRO413.nState := "DB_GLOB_TroState".arTroState["cMainTro413"];
#TRO414.nState := "DB_GLOB_TroState".arTroState["cMainTro414"];
#TRO415.nState := "DB_GLOB_TroState".arTroState["cMainTro415"];
#TRO416.nState := "DB_GLOB_TroState".arTroState["cMainTro416"];
#TRO417.nState := "DB_GLOB_TroState".arTroState["cMainTro417"];
#TRO418.nState := "DB_GLOB_TroState".arTroState["cMainTro418"];
#TRO419.nState := "DB_GLOB_TroState".arTroState["cMainTro419"];
#TRO420.nState := "DB_GLOB_TroState".arTroState["cMainTro420"];
#TRO421.nState := "DB_GLOB_TroState".arTroState["cMainTro421"];
#TRO422.nState := "DB_GLOB_TroState".arTroState["cMainTro422"];
#TRO423.nState := "DB_GLOB_TroState".arTroState["cMainTro423"];
#TRO424.nState := "DB_GLOB_TroState".arTroState["cMainTro424"];
END_IF;
END_REGION
REGION Automatik
#t_automatik := "DB_InterfaceSafety".stFromSafety.stMainContactorsUH04.Q;//#stInOutControlUnitCabinet.xRunning AND NOT #stInOutControlUnitCabinet.xStarting AND "DB_InterfaceSafety".stFromSafety.EStopMain.Q;
END_REGION
REGION Conveyors
REGION KR-M4003 (Carousel)
#fbCarousel4003.xInRequestRun :=
"fbPreMain_DB".fbStateMain.nConveyorStartUpCounter = 100 OR
#stInOutControlUnitCabinet.xRestart OR
#TRO404.xOutCarouselReq OR
#TRO405.xOutCarouselReq1 OR
#TRO406.xOutCarouselReq OR
#TRO407.xOutCarouselReq1 OR
#TRO409.xOutCarouselReq OR
#TRO410.xOutCarouselReq1 OR
#TRO412.xOutCarouselReq OR
#TRO413.xOutCarouselReq1 OR
#TRO415.xOutCarouselReq OR
#TRO416.xOutCarouselReq OR
#TRO424.xOutCarouselReq OR
#TRO417.xOutCarouselReq;
#fbCarousel4003.Settings.tEnergySafeTime := "cTimeEnergySafe" + t#20s;
#fbCarousel4003.Settings.xGridActive := TRUE;
#fbCarousel4003.Settings.sMotorProtectName := 'FC0060';
#fbCarousel4003.Settings.sGridSenName := 'BG3432';
#fbCarousel4003(xInEnabled := "cTodoTRUE",
xInGridSen := "DB_Inputs".Sensors["cInBG3432"].xDirectSensor,
xInGridQuit := "SF0002",
xInAutomaticMode := #t_automatik,
xInMotorProtectionMonitoring := "FC0060",
xOutPowerContactor => "MA0060",
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4003);
END_REGION
END_REGION
REGION TROs
REGION TRO 400 (Vario) // Loaded to AMR
#TRO400.stInSeparator1.Settings.nSeparatorNo := "cSep400.1";
#TRO400.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO400.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO400.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO400.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO400.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO400.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO400.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO400.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3260"];
#TRO400.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO400.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO400.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3262"]; //Finger in Pos
#TRO400.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3240"]; // Conveyor full
#TRO400.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3243"]; // Jam detector
#TRO400.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3261"]; // MT in Pos
#TRO400.stInVario.Settings.xContinousEmptying := FALSE;
#TRO400.stInVario.Settings.tWaitForJog := T#300ms;
#TRO400.stInVario.Settings.tConvEmpty := T#40000ms;//T#8000ms;
#TRO400.stInVario.Settings.nCountCarrier := 1;
#TRO400.stInVario.Settings.tWaitForStop := T#3s;
#TRO400.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO400.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO400.stInVario.Settings.tRasterHigh := T#5s;
#TRO400.stInVario.Settings.tRasterLow := T#5s;
#TRO400.stInPriorityManager.xReleaseOk := TRUE; //keine Vorfahrtsregelung notwendig
#TRO400.stInSettings.xIsBorner := TRUE;
#TRO400(nInMainTroNo := "cMainTro400",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO400,
xInMotorProtection := "FC0070",
xInAutomatic := #t_automatik,
arInOutJamEntr := "DB_JamArea4000".stJam4000_1.arCarrier,
stInOutJamEntr := "DB_JamArea4000".stJam4000_1.stData,
arInOutJamFinger := "DB_JamArea4001".stJam4001_1.arCarrier,
stInOutJamFinger := "DB_JamArea4001".stJam4001_1.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO400,
xOutStopper => "MB3260",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro400"],
xOutVarioMotor => "MA0070");
END_REGION
REGION TRO 401 (Vario)
#TRO401.stInSeparator1.Settings.nSeparatorNo := "cSep401.1";
#TRO401.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO401.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO401.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO401.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO401.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO401.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO401.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO401.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3242"];
#TRO401.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO401.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO401.stInVario.Settings.xContinousEmptying := FALSE;
#TRO401.stInVario.Settings.tWaitForJog := T#350ms;
#TRO401.stInVario.Settings.tConvEmpty := T#50000ms;
#TRO401.stInVario.Settings.nCountCarrier := 1;
#TRO401.stInVario.Settings.tWaitForStop := T#3s;
#TRO401.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO401.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO401.stInVario.Settings.tRasterHigh := T#5s;
#TRO401.stInVario.Settings.tRasterLow := T#5s;
#TRO401.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3244"]; //Pusher Dog in Pos
#TRO401.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3245"]; // Conveyor full
#TRO401.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3246"]; // Jam detector
#TRO401.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3241"]; // MT in Pos
#TRO401.stInPriorityManager.xReleaseOk := TRUE; //keine Vorfahrtsregelung notwendig
#TRO401(nInMainTroNo := "cMainTro401",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO401,
xInMotorProtection := "FC0071",
xInAutomatic := #t_automatik,
arInOutJamEntr := "DB_JamArea4001".stJam4001_1.arCarrier,
stInOutJamEntr := "DB_JamArea4001".stJam4001_1.stData,
arInOutJamFinger := "DB_JamArea4001".stJam4001_2.arCarrier,
stInOutJamFinger := "DB_JamArea4001".stJam4001_2.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO401,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
xOutStopper => "MB3242",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro401"],
xOutVarioMotor => "MA0071");
END_REGION
REGION TRO 402 (1Sep) (Vor Brandschutztor)
#TRO402.stInSeparator1.Settings.nSeparatorNo := "cSep402.1";
#TRO402.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO402.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO402.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO402.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO402.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO402.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO402.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO402.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3247"];
#TRO402.stInSenJam2 := "DB_Inputs".Sensors["cInBG3423"];
#TRO402.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO402.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO402.stInPriorityManager.xReleaseOk := "cTodoTRUE";
#TRO402(nInMainTroNo := "cMainTro402",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInCarouselRun := TRUE, //Gefälle
xInRelease := "DB_TRO_Test".TRO402,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4001".stJam4001_2.arCarrier,
stInOutJamEntr1 := "DB_JamArea4001".stJam4001_2.stData,
arInOutJamExit2 := "DB_JamArea4002".stJam4002_1.arCarrier,
stInOutJamExit2 := "DB_JamArea4002".stJam4002_1.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro402"],
xOutStopper1 => "MB3247",
stInOutHMI := "DB_Interface_HMI".stTRO.TRO402);
END_REGION
REGION TRO 403 (Vario)
#TRO403.stInSeparator1.Settings.nSeparatorNo := "cSep403.1";
#TRO403.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO403.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO403.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO403.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO403.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO403.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO403.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO403.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3420"];
#TRO403.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO403.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO403.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3421"]; //Finger in Pos
#TRO403.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3390"]; // Conveyor full
#TRO403.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3387"]; // Jam detector
#TRO403.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3426"]; // MT in Pos
#TRO403.stInVario.Settings.xContinousEmptying := FALSE;
#TRO403.stInVario.Settings.tWaitForJog := T#400ms;
#TRO403.stInVario.Settings.tConvEmpty := t#20s;//T#8000ms;
#TRO403.stInVario.Settings.nCountCarrier := 1;
#TRO403.stInVario.Settings.tWaitForStop := T#3s;
#TRO403.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO403.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO403.stInVario.Settings.tRasterHigh := T#5s;
#TRO403.stInVario.Settings.tRasterLow := T#5s;
#TRO403.stInPriorityManager.xReleaseOk := TRUE; //keine Vorfahrtsregelung notwendig
#TRO403(nInMainTroNo := "cMainTro403",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO403,
xInMotorProtection := "FC0073",
xInAutomatic := #t_automatik,
arInOutJamEntr := "DB_JamArea4002".stJam4002_1.arCarrier,
stInOutJamEntr := "DB_JamArea4002".stJam4002_1.stData,
arInOutJamFinger := "DB_JamArea4002".stJam4002_2.arCarrier,
stInOutJamFinger := "DB_JamArea4002".stJam4002_2.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO403,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro403"],
xOutStopper => "MB3420",
xOutVarioMotor => "MA0073");
END_REGION
REGION TRO 404 (1Sep)
#TRO404.stInSeparator1.Settings.nSeparatorNo := "cSep404.1";
#TRO404.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO404.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO404.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO404.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO404.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO404.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO404.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO404.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3386"];
#TRO404.stInSenJam2 := "DB_Inputs".Sensors["cInBG3367"];
IF "DB_JamArea4002".stJam4002_2.arCarrier[1].nBarcode > 0 THEN
"DB_JamArea4002".stJam4002_2.arCarrier[1].bStatus.%X1 := TRUE; //Wir nehmen erstmal an, dass alles, was vom Highway kommt, beladen ist. TRO405 kontrolliert nach
ELSE
"DB_JamArea4002".stJam4002_2.arCarrier[1].bStatus.%X1 := FALSE;
END_IF;
#TRO404.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO404.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO404(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO404.TroIn,
stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO404.TroOut,
nInMainTroNo := "cMainTro404",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
xInRelease := NOT "FB_CallAMRManagement_DB".Lfb_AMRManagement.xOutStopFeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4002".stJam4002_2.arCarrier,
stInOutJamEntr1 := "DB_JamArea4002".stJam4002_2.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_8.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_8.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro404"],
xOutStopper1 => "MB3386",
stInOutHMI := "DB_Interface_HMI".stTRO.TRO404);
END_REGION
REGION TEST!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// "DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination := "cDestLeaveAmr";
END_REGION
REGION TRO 405 (1Sep1Switch) + Scanner (BX4100) + Behangskontrolle
//TYP ÄNDERN MIT PART SENSOR LOGIK!!!!!!
#TRO405.stInSeparator1.Settings.nSeparatorNo := "cSep405.1";
#TRO405.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO405.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO405.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO405.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO405.stInSeparator1.Settings.xPluggedPart := TRUE;
#TRO405.stInSeparator1.Settings.xPluggedScanner := TRUE;
#TRO405.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3360"];
#TRO405.stInSeparator1.stSenPart := "DB_Inputs".Sensors["cInBG3361"];
#TRO405.stInSenJam2 := "DB_Inputs".Sensors["cInBG3362"];
#TRO405.stInSenJam3 := "DB_Inputs".Sensors["cInBG3301"];
#TRO405.stInSwitch1.Settings.nSwitchNo := "cSwi405.1";
#TRO405.stInSwitch1.Settings.xPluggedExSen3 := FALSE;
#TRO405.stInSwitch1.Settings.xPluggedExSen4 := FALSE;
#TRO405.stInSwitch1.Settings.tTransitEx := T#5s;
#TRO405.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI
#TRO405.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE;
#TRO405.stInBarcodeReader.Settings.tTimeout := T#5s;
#arCognexInterface["cScannerBX4100"].xInCamTriggerReady := "bx4100-TriggerReady";
#arCognexInterface["cScannerBX4100"].xInCamTriggerAck := "bx4100-TriggerAck";
#arCognexInterface["cScannerBX4100"].xInCamResultsAvailable := "bx4100-Results Available";
#arCognexInterface["cScannerBX4100"].xInCamGeneralFault := "bx4100-General Fault";
#arCognexInterface["cScannerBX4100"].hwInCamInspectionResults := "BX4100~Ergebnisse__64_Bytes_1";
#stJamData4010.Config.nCapacitySet := 1;
#TRO405.stInPriorityManagerDir1.xReleaseOk := TRUE; //Keine Vorfahrtsregelung notwendig
// #TRO405.stInSettings.bSepType.%X1 := TRUE;
#TRO405.stInSettings.bSepType.%X2 := TRUE;
#TRO405(nInMainTroNo := "cMainTro405",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO405,
xInCarouselRun1 := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO405,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #arCognexInterface["cScannerBX4100"],
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_1.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_1.stData,
arInOutJamExit2 := #arCarrier4010, //"DB_JamArea4010".stJam4010_1.arCarrier,
stInOutJamExit2 := #stJamData4010, //"DB_JamArea4010".stJam4010_1.stData,
arInOutJamExit3 := "DB_JamArea4003".stJam4003_2.arCarrier,
stInOutJamExit3 := "DB_JamArea4003".stJam4003_2.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro405"],
xOutStopper1 => "MB3360",
xOutSw1ExTo3 => "MB3362");
IF #TRO405.nState = 1400 THEN
IF #TRO405.xTrolleyWithPart AND "DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination = "cDestLeaveAmr" THEN
"DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination := "cDestStayAmr";
// ELSE
// "DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination := "cDestLeaveAmr";
ELSIF #TRO405.xTrolleyWoPart THEN //auskommentiert für test mit leercarriern
"DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination := "cDestLeaveAmr" ; //leave
END_IF;
END_IF;
"bx4100-TriggerEnable" := #arCognexInterface["cScannerBX4100"].xOutCamTriggerEnable;
"bx4100-Trigger" := #arCognexInterface["cScannerBX4100"].xOutCamTrigger;
"bx4100-ResultsAck" := #arCognexInterface["cScannerBX4100"].xOutCamResultsAck;
REGION Carr_Glob_Correction
"FC_CARR_GLOB_CORRECTION"(xInStart := #TRO405.xOutCorrection, //Führe Korrektur aus
nInBarcodeScan := #TRO405.nBarcodeResult,
nInStation := 0,
arOutEventLogInfo => #arDummyEventCorrectionInfo,
InOutCarrierExpect := "DB_JamArea4003".stJam4003_1.arCarrier[1]);
END_REGION
REGION Direction
"FC_Direction"(nInSwitchNo := "cSwi405.1",
nOutDirection => #TRO405.nInDirection,
InOutCarrier := "DB_JamArea4003".stJam4003_1.arCarrier[1]);
END_REGION
REGION Loaded MT: Send DReqM to Fortna WCS
IF #TRO405.xOutNewScan AND "DB_Test".xCommuActive THEN
#tmpLaneStatus[0] := "FC_Get_LaneStatus"(stInOutJamData := "DB_JamArea4004"."stJam4004_1".stData,
stInOutWorkStation := "DB_Prozessdaten".stWorkStations.stMPS1);
#tmpLaneStatus[1] := "FC_Get_LaneStatus"(stInOutJamData := "DB_JamArea4006"."stJam4006_1".stData,
stInOutWorkStation := "DB_Prozessdaten".stWorkStations.stMPS2);
#tmpLaneStatus[2] := "FC_Get_LaneStatus"(stInOutJamData := "DB_JamArea4008"."stJam4008_1".stData,
stInOutWorkStation := "DB_Prozessdaten".stWorkStations.stMPS3);
"FC_Send_GOHDReqM"(sInPLCID := "cPLCID",
xInSSCCReq := FALSE,
xInLengthReq := FALSE,
xInDockDoorReq := FALSE,
xInLaneStatusReq := TRUE,
nInBarcode := #TRO405.nOutScanResult,
sInSSCC := '',
sInDecisionPoint := 'GOH.Decant.01', //todo
sInDockDoor := '',
sInLengthInfo := '',
arInLaneStatus := #tmpLaneStatus,
nInLaneCnt := 3,
FIFO := "DB_LGF_FIFO_CommWCSBL",
BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER,
nInOutSequenceNumber:="DB_CommunicationParameters".nSeqNumWESDeviceHub);
END_IF;
END_REGION
REGION Provisorium - Zielvorgabe
IF "DB_Test".nBatchCounter > 5 THEN
"DB_Test".nBatchCounter := 1;
"DB_Test".nTargetTest += 1;
IF "DB_Test".nTargetTest > 3 THEN
"DB_Test".nTargetTest := 1;
END_IF;
END_IF;
IF #TRO405.nState = 1500 AND #TRO405.fbSeparator1.xOutTrolleyReleasedEdge AND "DB_JamArea4003".stJam4003_1.arCarrier[1].bStatus.%X0 AND "DB_JamArea4003".stJam4003_1.arCarrier[1].nDestination <> "cDestLeaveAmr"(* AND "DB_JamArea4003".stJam4003_1.arCarrier[1].bStatus.%X1 *) THEN //Nur beladene ankündigen
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.nBarcode := #TRO405.nOutScanResult;
IF "DB_Test".nTargetTest = 1 THEN
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[0] := '1';
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[1] := '1';
ELSIF "DB_Test".nTargetTest = 2 THEN
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[0] := '2';
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[1] := '2';
ELSIF "DB_Test".nTargetTest = 3 THEN
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[0] := '3';
"DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[1] := '3';
END_IF;
// "DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[0] := INT_TO_CHAR(IN := "DB_Test".nTargetTest);
// "DB_Handshake".udtIn_TeleDataFromMES.stPayload.arActions[1] := INT_TO_CHAR(IN := "DB_Test".nTargetTest);
"DB_Test".nBatchCounter += 1;
"DB_Handshake".udt_HandshakeMESStorage.str_Ctrl.xNewDataAvaible := TRUE;
END_IF;
IF "DB_Handshake".udt_HandshakeMESStorage.str_Status.xNewDataSaved
THEN
"DB_Handshake".udt_HandshakeMESStorage.str_Ctrl.xNewDataAvaible := FALSE;
END_IF;
END_REGION ;
(* IF #TRO405.xOutBookedDir2 AND "DB_Test".xCommuActive THEN
"FC_Send_GOHDUM"(sInPLCID := "cPLCID",
nInBarcode := #TRO405.stOutLastCarrier.nBarcode,
sInDecisionPoint := 'GOH.Decant.01',
sInActionTaken := '1',
nReasonCode := 1,
FIFO := "DB_LGF_FIFO_CommWCSBL",
BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER,
nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL);
END_IF; *)
END_REGION
REGION TRO 406 (1Sep) + Scanner (BX4101)
#TRO406.stInSeparator1.Settings.nSeparatorNo := "cSep406.1";
#TRO406.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Medium";
#TRO406.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO406.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO406.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO406.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO406.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO406.stInSeparator1.Settings.xPluggedScanner := TRUE;
#TRO406.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3300"];
#TRO406.stInSenJam2 := "DB_Inputs".Sensors["cInBG3303"];
#TRO406.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE;
#TRO406.stInBarcodeReader.Settings.tTimeout := T#5s;
#arCognexInterface["cScannerBX4101"].xInCamTriggerReady := "bx4101-TriggerReady";
#arCognexInterface["cScannerBX4101"].xInCamTriggerAck := "bx4101-TriggerAck";
#arCognexInterface["cScannerBX4101"].xInCamResultsAvailable := "bx4101-Results Available";
#arCognexInterface["cScannerBX4101"].xInCamGeneralFault := "bx4101-General Fault";
#arCognexInterface["cScannerBX4101"].hwInCamInspectionResults := "BX4101~Ergebnisse__64_Bytes_1";
#TRO406.stInPriorityManager.xReleaseOk := TRUE; //keine Vorfahrtsregelung notwendig
#TRO406(nInMainTroNo := "cMainTro406",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO406, //todo:Dieser TRO kann aufhören etwas loszuschicken, wenn alle Stationen voll sind, weil wir dann nur noch sinnlos rotieren und immer wieder probieren
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #arCognexInterface["cScannerBX4101"],
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_2.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_2.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_3.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_3.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO406,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro406"],
xOutStopper1 => "MB3300");
"bx4101-TriggerEnable" := #arCognexInterface["cScannerBX4101"].xOutCamTriggerEnable;
"bx4101-Trigger" := #arCognexInterface["cScannerBX4101"].xOutCamTrigger;
"bx4101-ResultsAck" := #arCognexInterface["cScannerBX4101"].xOutCamResultsAck;
REGION Carr_Glob_Correction
"FC_CARR_GLOB_CORRECTION"(xInStart := #TRO406.xOutCorrection, //Führe Korrektur aus
nInBarcodeScan := #TRO406.nBarcodeResult,
nInStation := 0,
arOutEventLogInfo => #arDummyEventCorrectionInfo,
InOutCarrierExpect := "DB_JamArea4003".stJam4003_2.arCarrier[1]);
END_REGION
REGION AMR Management Schnittstelle
IF #TRO406.xOutNewScan THEN
"DB_Handshake".str_TROScan.udt_InTro406Scan.nBarcode := #TRO406.nOutScanResult;
END_IF;
IF #TRO406.nState = 2000 OR #TRO406.nState = 1500 THEN
"DB_Handshake".str_TROs.udt_TRO406.udt_State.xReady := TRUE;
ELSE
"DB_Handshake".str_TROs.udt_TRO406.udt_State.xReady := FALSE;
END_IF;
END_REGION
END_REGION
REGION TRO 407 (1Sep1Switch) + Scanner (BX4102)
#TRO407.stInSeparator1.Settings.nSeparatorNo := "cSep407.1";
#TRO407.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO407.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO407.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO407.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO407.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO407.stInSeparator1.Settings.xPluggedScanner := TRUE;
#TRO407.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3304"];
#TRO407.stInSenJam2 := "DB_Inputs".Sensors["cInBG3311"];
#TRO407.stInSenJam3 := "DB_Inputs".Sensors["cInBG3322"];
#TRO407.stInSwitch1.Settings.nSwitchNo := "cSwi407.1";
#TRO407.stInSwitch1.Settings.xPluggedExSen3 := FALSE;
#TRO407.stInSwitch1.Settings.xPluggedExSen4 := FALSE;
#TRO407.stInSwitch1.Settings.tTransitEx := T#5s;
#TRO407.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI
#TRO407.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE;
#TRO407.stInBarcodeReader.Settings.tTimeout := T#5s;
#arCognexInterface["cScannerBX4102"].xInCamTriggerReady := "bx4102-TriggerReady";
#arCognexInterface["cScannerBX4102"].xInCamTriggerAck := "bx4102-TriggerAck";
#arCognexInterface["cScannerBX4102"].xInCamResultsAvailable := "bx4102-Results Available";
#arCognexInterface["cScannerBX4102"].xInCamGeneralFault := "bx4102-General Fault";
#arCognexInterface["cScannerBX4102"].hwInCamInspectionResults := "BX4102~Ergebnisse__64_Bytes_1";
#TRO407.stInSettings.xPrioDir2 := TRUE;
#TRO407(stInPriorityManagerDir2 := "DB_Prozessdaten".stPriorityManager.udt_TRO407.TroIn,
stOutPriorityManagerDir2 => "DB_Prozessdaten".stPriorityManager.udt_TRO407.TroOut,
nInMainTroNo := "cMainTro407",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO407,
xInCarouselRun1 := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO407,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #arCognexInterface["cScannerBX4102"],
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_3.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_3.stData,
arInOutJamExit2 := "DB_JamArea4004".stJam4004_1.arCarrier,
stInOutJamExit2 := "DB_JamArea4004".stJam4004_1.stData,
arInOutJamExit3 := "DB_JamArea4003".stJam4003_4.arCarrier,
stInOutJamExit3 := "DB_JamArea4003".stJam4003_4.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro407"],
xOutStopper1 => "MB3304",
xOutSw1ExTo3 => "MB3306");
"bx4102-TriggerEnable" := #arCognexInterface["cScannerBX4102"].xOutCamTriggerEnable;
"bx4102-Trigger" := #arCognexInterface["cScannerBX4102"].xOutCamTrigger;
"bx4102-ResultsAck" := #arCognexInterface["cScannerBX4102"].xOutCamResultsAck;
REGION Carr_Glob_Correction
"FC_CARR_GLOB_CORRECTION"(xInStart := #TRO407.xOutCorrection, //Führe Korrektur aus
nInBarcodeScan := #TRO407.nBarcodeResult,
nInStation := 0,
arOutEventLogInfo => #arDummyEventCorrectionInfo,
InOutCarrierExpect := "DB_JamArea4003".stJam4003_3.arCarrier[1]);
END_REGION
REGION Direction
"FC_Direction"(nInSwitchNo := "cSwi407.1",
nOutDirection => #TRO407.nInDirection,
InOutCarrier := "DB_JamArea4003".stJam4003_3.arCarrier[1]);
END_REGION
REGION Recirce
IF #TRO407.nState = 2400 AND #TRO407.fbStateManager.tOutTimeInStep > T#15s THEN //Steckt in CheckJam fest, weil kein Platz in der Station + Zeit vergangen
"DB_JamArea4003".stJam4003_3.arCarrier[1].nDestination := "cDestRecirc"; // Ziel zum Rotieren um nicht zu Blockieren
#TRO407.nState := 2000; //Hole nochmal die Direction
END_IF;
END_REGION
REGION Send DUM to Fortna WCS
IF #TRO407.xOutBookedDir1 THEN
"FC_Send_GOHDUM"(sInPLCID := "cPLCID",
nInBarcode := #TRO407.stOutLastCarrier.nBarcode,
sInDecisionPoint := 'GOH.Decant.01',
sInActionTaken := '2', //todo? Am besten eine Konstantentabelle anlegen aus Infos von Spezifikation
nReasonCode := 1, //todo?
FIFO := "DB_LGF_FIFO_CommWCSBL",
BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER,
nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL);
END_IF;
END_REGION
END_REGION
REGION TRO 408 (Vario)
#TRO408.stInSeparator1.Settings.nSeparatorNo := "cSep408.1";
#TRO408.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO408.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO408.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO408.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO408.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO408.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO408.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO408.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3310"];
#TRO408.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO408.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO408.stInVario.Settings.xContinousEmptying := FALSE;
#TRO408.stInVario.Settings.tWaitForJog := T#400ms;
#TRO408.stInVario.Settings.tConvEmpty := t#15000ms;//T#8000ms;
#TRO408.stInVario.Settings.nCountCarrier := 1;
#TRO408.stInVario.Settings.tWaitForStop := T#3s;
#TRO408.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO408.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3312"]; //Finger in Pos
#TRO408.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3313"]; // Conveyor full
#TRO408.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3327"]; // Jam
#TRO408.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3316"]; // MT in Position
#TRO408.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO408.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO408.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO408.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO408.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO408(nInMainTroNo := "cMainTro408",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInMotorProtection := "FC0061",
xInAutomatic := #t_automatik,
xInRelease := "DB_TRO_Test".TRO408,
arInOutJamEntr := "DB_JamArea4004".stJam4004_1.arCarrier,
stInOutJamEntr := "DB_JamArea4004".stJam4004_1.stData,
arInOutJamFinger := "DB_JamArea4004".stJam4004_2.arCarrier,
stInOutJamFinger := "DB_JamArea4004"."stJam4004_2".stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO408,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro408"],
xOutStopper => "MB3310",
xOutVarioMotor => "MA0061");
END_REGION
REGION TRO 409 (1Sep)
#TRO409.stInSeparator1.Settings.nSeparatorNo := "cSep409.1";
#TRO409.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO409.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO409.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO409.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO409.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO409.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO409.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO409.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3321"];
#TRO409.stInSenJam2 := "DB_Inputs".Sensors["cInBG3322"];
#TRO409.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO409.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO409(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO409.TroIn,
stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO409.TroOut,
nInMainTroNo := "cMainTro409",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO409,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4005"."stJam4005_1".arCarrier,
stInOutJamEntr1 := "DB_JamArea4005".stJam4005_1.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_4.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_4.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO409,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro409"],
xOutStopper1 => "MB3321");
END_REGION
REGION TRO 410 (1Sep1Switch) + Scanner (BX4104)
#TRO410.stInSeparator1.Settings.nSeparatorNo := "cSep410.1";
#TRO410.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO410.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO410.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO410.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO410.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO410.stInSeparator1.Settings.xPluggedScanner := TRUE;
#TRO410.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3363"];
#TRO410.stInSenJam2 := "DB_Inputs".Sensors["cInBG3371"];
#TRO410.stInSenJam3 := "DB_Inputs".Sensors["cInBG3382"];
#TRO410.stInSwitch1.Settings.nSwitchNo := "cSwi410.1";
#TRO410.stInSwitch1.Settings.xPluggedExSen3 := FALSE;
#TRO410.stInSwitch1.Settings.xPluggedExSen4 := FALSE;
#TRO410.stInSwitch1.Settings.tTransitEx := T#5s;
#TRO410.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI
#TRO410.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE;
#TRO410.stInBarcodeReader.Settings.tTimeout := T#5s;
#arCognexInterface["cScannerBX4104"].xInCamTriggerReady := "bx4104-TriggerReady";
#arCognexInterface["cScannerBX4104"].xInCamTriggerAck := "bx4104-TriggerAck";
#arCognexInterface["cScannerBX4104"].xInCamResultsAvailable := "bx4104-Results Available";
#arCognexInterface["cScannerBX4104"].xInCamGeneralFault := "bx4104-General Fault";
#arCognexInterface["cScannerBX4104"].hwInCamInspectionResults := "BX4104~Ergebnisse__64_Bytes_1";
#TRO410.stInSettings.xPrioDir2 := TRUE;
#TRO410(stInPriorityManagerDir2 := "DB_Prozessdaten".stPriorityManager.udt_TRO410.TroIn,
stOutPriorityManagerDir2 => "DB_Prozessdaten".stPriorityManager.udt_TRO410.TroOut,
nInMainTroNo := "cMainTro410",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO410,
xInCarouselRun1 := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO410,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #arCognexInterface["cScannerBX4104"],
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_4.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_4.stData,
arInOutJamExit2 := "DB_JamArea4006".stJam4006_1.arCarrier,
stInOutJamExit2 := "DB_JamArea4006".stJam4006_1.stData,
arInOutJamExit3 := "DB_JamArea4003".stJam4003_5.arCarrier,
stInOutJamExit3 := "DB_JamArea4003".stJam4003_5.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro410"],
xOutStopper1 => "MB3363",
xOutSw1ExTo3 => "MB3366");
"bx4104-TriggerEnable" := #arCognexInterface["cScannerBX4104"].xOutCamTriggerEnable;
"bx4104-Trigger" := #arCognexInterface["cScannerBX4104"].xOutCamTrigger;
"bx4104-ResultsAck" := #arCognexInterface["cScannerBX4104"].xOutCamResultsAck;
REGION Carr_Glob_Correction
"FC_CARR_GLOB_CORRECTION"(xInStart := #TRO410.xOutCorrection, //Führe Korrektur aus
nInBarcodeScan := #TRO410.nBarcodeResult,
nInStation := 0,
arOutEventLogInfo => #arDummyEventCorrectionInfo,
InOutCarrierExpect := "DB_JamArea4003".stJam4003_4.arCarrier[1]);
END_REGION
REGION Direction
"FC_Direction"(nInSwitchNo := "cSwi410.1",
nOutDirection => #TRO410.nInDirection,
InOutCarrier := "DB_JamArea4003".stJam4003_4.arCarrier[1]);
END_REGION
REGION Recirce
IF #TRO410.nState = 2400 AND #TRO410.fbStateManager.tOutTimeInStep > T#15s THEN //Steckt in CheckJam fest, weil kein Platz in der Station + Zeit vergangen
"DB_JamArea4003".stJam4003_4.arCarrier[1].nDestination := "cDestRecirc"; // Ziel zum Rotieren um nicht zu Blockieren
#TRO410.nState := 2000; //Hole nochmal die Direction
END_IF;
END_REGION
REGION Send DUM to Fortna WCS
IF #TRO410.xOutBookedDir1 THEN
"FC_Send_GOHDUM"(sInPLCID := "cPLCID",
nInBarcode := #TRO410.stOutLastCarrier.nBarcode,
sInDecisionPoint := 'GOH.Decant.01',
sInActionTaken := '3', //todo? Am besten eine Konstantentabelle anlegen aus Infos von Spezifikation
nReasonCode := 1, //todo?
FIFO := "DB_LGF_FIFO_CommWCSBL",
BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER,
nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL);
END_IF;
END_REGION
END_REGION
REGION TRO 411 (Vario)
#TRO411.stInSeparator1.Settings.nSeparatorNo := "cSep411.1";
#TRO411.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO411.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO411.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO411.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO411.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO411.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO411.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO411.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3370"];
#TRO411.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO411.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO411.stInVario.Settings.xContinousEmptying := FALSE;
#TRO411.stInVario.Settings.tWaitForJog := T#400ms;
#TRO411.stInVario.Settings.tConvEmpty := T#15000ms;
#TRO411.stInVario.Settings.nCountCarrier := 1;
#TRO411.stInVario.Settings.tWaitForStop := T#3s;
#TRO411.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO411.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO411.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3372"]; // Finger in Pos
#TRO411.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3373"]; // Conveyor full
#TRO411.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3396"]; // Jam
#TRO411.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3376"]; // Mt in Position;
#TRO411.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO411(nInMainTroNo := "cMainTro411",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO411,
xInMotorProtection := "FC0063",
xInAutomatic := #t_automatik,
arInOutJamEntr := "DB_JamArea4006".stJam4006_1.arCarrier,
stInOutJamEntr := "DB_JamArea4006".stJam4006_1.stData,
arInOutJamFinger := "DB_JamArea4006".stJam4006_2.arCarrier,
stInOutJamFinger := "DB_JamArea4006".stJam4006_2.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO411,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro411"],
xOutStopper => "MB3370",
xOutVarioMotor => "MA0063");
(* REGION Barcode-Reader BX4105
#arCognexInterface["cScannerBX4105"].xInCamTriggerReady := "bx4105-TriggerReady";
#arCognexInterface["cScannerBX4105"].xInCamTriggerAck := "bx4105-TriggerAck";
#arCognexInterface["cScannerBX4105"].xInCamResultsAvailable := "bx4105-Results Available";
#arCognexInterface["cScannerBX4105"].xInCamGeneralFault := "bx4105-General Fault";
#arCognexInterface["cScannerBX4105"].hwInCamInspectionResults := "BX4105~Ergebnisse__64_Bytes_1";
#fbBarcodeReaderBX4105.stInSettings.xActivateCheckASCI := TRUE;
#fbBarcodeReaderBX4105.stInSettings.tTimeout := T#5s; //T#5s zum Testen
IF #fbBarcodeReaderBX4105.xOutReadyForNewScan AND "DB_Inputs".Sensors["cInBG3374"].xDirectEdgePos THEN
#xHandshakeScan4105 := FALSE;
#xStartScan4105 := TRUE;
END_IF;
IF #fbBarcodeReaderBX4105.xOutReadingDone THEN
#nBarcodeReaderBX4105_Result := LINT_TO_DINT(#fbBarcodeReaderBX4105.#nOutBarcode);
#xHandshakeScan4105 := TRUE;
#xStartScan4105 := FALSE;
END_IF;
#fbBarcodeReaderBX4105(xInHWError := false, // todo
xInStartReading := #xStartScan4105,
xInHandshakeDone := #xHandshakeScan4105,
stInOutInterface := #arCognexInterface["cScannerBX4105"],
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutHMI := #stBarcodeReaderDummy);
"bx4105-TriggerEnable" := #arCognexInterface["cScannerBX4105"].xOutCamTriggerEnable;
"bx4105-Trigger" := #arCognexInterface["cScannerBX4105"].xOutCamTrigger;
"bx4105-ResultsAck" := #arCognexInterface["cScannerBX4105"].xOutCamResultsAck;
END_REGION *)
END_REGION
REGION TRO 412 (1Sep)
#TRO412.stInSeparator1.Settings.nSeparatorNo := "cSep412.1";
#TRO412.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO412.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO412.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO412.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO412.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO412.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO412.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO412.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3381"];
#TRO412.stInSenJam2 := "DB_Inputs".Sensors["cInBG3382"];
#TRO412.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO412.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO412(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO412.TroIn,
stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO412.TroOut,
nInMainTroNo := "cMainTro412",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO412,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4007".stJam4007_1.arCarrier,
stInOutJamEntr1 := "DB_JamArea4007".stJam4007_1.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_5.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_5.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO412,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro412"],
xOutStopper1 => "MB3381");
END_REGION
REGION TRO 413(1Sep1Switch)+Scanner(BX4106)
#TRO413.stInSeparator1.Settings.nSeparatorNo := "cSep413.1";
#TRO413.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO413.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO413.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO413.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO413.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO413.stInSeparator1.Settings.xPluggedScanner := TRUE;
#TRO413.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3430"];
#TRO413.stInSenJam2 := "DB_Inputs".Sensors["cInBG3431"];
#TRO413.stInSenJam3 := "DB_Inputs".Sensors["cInBG3450"];
#TRO413.stInSwitch1.Settings.nSwitchNo := "cSwi413.1";
#TRO413.stInSwitch1.Settings.xPluggedExSen3 := FALSE;
#TRO413.stInSwitch1.Settings.xPluggedExSen4 := FALSE;
#TRO413.stInSwitch1.Settings.tTransitEx := T#5s;
#TRO413.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI
#TRO413.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE;
#TRO413.stInBarcodeReader.Settings.tTimeout := T#5s;
#arCognexInterface["cScannerBX4106"].xInCamTriggerReady := "bx4106-TriggerReady";
#arCognexInterface["cScannerBX4106"].xInCamTriggerAck := "bx4106-TriggerAck";
#arCognexInterface["cScannerBX4106"].xInCamResultsAvailable := "bx4106-Results Available";
#arCognexInterface["cScannerBX4106"].xInCamGeneralFault := "bx4106-General Fault";
#arCognexInterface["cScannerBX4106"].hwInCamInspectionResults := "BX4106~Ergebnisse__64_Bytes_1";
#TRO413.stInSettings.xPrioDir2 := TRUE;
#TRO413(stInPriorityManagerDir2 := "DB_Prozessdaten".stPriorityManager.udt_TRO413.TroIn,
stOutPriorityManagerDir2 => "DB_Prozessdaten".stPriorityManager.udt_TRO413.TroOut,
nInMainTroNo := "cMainTro413",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO413,
xInCarouselRun1 := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO413,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #arCognexInterface["cScannerBX4106"],
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_5.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_5.stData,
arInOutJamExit2 := "DB_JamArea4008".stJam4008_1.arCarrier,
stInOutJamExit2 := "DB_JamArea4008"."stJam4008_1".stData,
arInOutJamExit3 := "DB_JamArea4003".stJam4003_6.arCarrier,
stInOutJamExit3 := "DB_JamArea4003".stJam4003_6.stData,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro413"],
xOutStopper1 => "MB3430",
xOutSw1ExTo3 => "MB3432");
"bx4106-TriggerEnable" := #arCognexInterface["cScannerBX4106"].xOutCamTriggerEnable;
"bx4106-Trigger" := #arCognexInterface["cScannerBX4106"].xOutCamTrigger;
"bx4106-ResultsAck" := #arCognexInterface["cScannerBX4106"].xOutCamResultsAck;
REGION Carr_Glob_Correction
"FC_CARR_GLOB_CORRECTION"(xInStart := #TRO413.xOutCorrection, //Führe Korrektur aus
nInBarcodeScan := #TRO413.nBarcodeResult,
nInStation := 0,
arOutEventLogInfo => #arDummyEventCorrectionInfo,
InOutCarrierExpect := "DB_JamArea4003".stJam4003_5.arCarrier[1]);
END_REGION
REGION Direction
"FC_Direction"(nInSwitchNo := "cSwi413.1",
nOutDirection => #TRO413.nInDirection,
InOutCarrier := "DB_JamArea4003".stJam4003_5.arCarrier[1]);
END_REGION
REGION Recirce
IF #TRO413.nState = 2400 AND #TRO413.fbStateManager.tOutTimeInStep > T#15s THEN //Steckt in CheckJam fest, weil kein Platz in der Station + Zeit vergangen
"DB_JamArea4003".stJam4003_5.arCarrier[1].nDestination := "cDestRecirc"; // Ziel zum Rotieren um nicht zu Blockieren
#TRO413.nState := 2000; //Hole nochmal die Direction
END_IF;
END_REGION
REGION Send DUM to Fortna WCS
IF #TRO413.xOutBookedDir1 THEN
"FC_Send_GOHDUM"(sInPLCID := "cPLCID",
nInBarcode := #TRO413.stOutLastCarrier.nBarcode,
sInDecisionPoint := 'GOH.Decant.01',
sInActionTaken := '4', //todo? Am besten eine Konstantentabelle anlegen aus Infos von Spezifikation
nReasonCode := 1, //todo?
FIFO := "DB_LGF_FIFO_CommWCSBL",
BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER,
nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL);
END_IF;
END_REGION
END_REGION
REGION TRO 414 (Vario)
#TRO414.stInSeparator1.Settings.nSeparatorNo := "cSep414.1";
#TRO414.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO414.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO414.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO414.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO414.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO414.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO414.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO414.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3440"];
#TRO414.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO414.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO414.stInVario.Settings.xContinousEmptying := FALSE;
#TRO414.stInVario.Settings.tWaitForJog := T#400ms;
#TRO414.stInVario.Settings.tConvEmpty := T#15000ms;
#TRO414.stInVario.Settings.nCountCarrier := 1;
#TRO414.stInVario.Settings.tWaitForStop := T#3s;
#TRO414.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO414.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO414.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3442"]; //Finger in Pos
#TRO414.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3443"]; // Conveyor full
#TRO414.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3446"]; // Carr in Pos
#TRO414.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3437"]; // Jam
#TRO414.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO414(nInMainTroNo := "cMainTro414",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO414,
xInMotorProtection := "FC0065",
xInAutomatic := #t_automatik,
arInOutJamEntr := "DB_JamArea4008".stJam4008_1.arCarrier,
stInOutJamEntr := "DB_JamArea4008".stJam4008_1.stData,
arInOutJamFinger := "DB_JamArea4008".stJam4008_2.arCarrier,
stInOutJamFinger := "DB_JamArea4008".stJam4008_2.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO414,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro414"],
xOutStopper => "MB3440",
xOutVarioMotor => "MA0065");
// xOutVarioMotor2 => "MA0066");
(* REGION Barcode-Reader BX4107
#arCognexInterface["cScannerBX4107"].xInCamTriggerReady := "bx4107-TriggerReady";
#arCognexInterface["cScannerBX4107"].xInCamTriggerAck := "bx4107-TriggerAck";
#arCognexInterface["cScannerBX4107"].xInCamResultsAvailable := "bx4107-Results Available";
#arCognexInterface["cScannerBX4107"].xInCamGeneralFault := "bx4107-General Fault";
#arCognexInterface["cScannerBX4107"].hwInCamInspectionResults := "BX4107~Ergebnisse__64_Bytes_1";
#fbBarcodeReaderBX4107.stInSettings.xActivateCheckASCI := TRUE;
#fbBarcodeReaderBX4107.stInSettings.tTimeout := T#5s; //T#5s zum Testen
IF #fbBarcodeReaderBX4107.xOutReadyForNewScan AND "DB_Inputs".Sensors["cInBG3444"].xDirectEdgePos THEN
#xHandshakeScan4107 := FALSE;
#xStartScan4107 := TRUE;
END_IF;
IF #fbBarcodeReaderBX4107.xOutReadingDone THEN
#nBarcodeReaderBX4107_Result := LINT_TO_DINT(#fbBarcodeReaderBX4107.#nOutBarcode);
#xHandshakeScan4107 := TRUE;
#xStartScan4107 := FALSE;
END_IF;
#fbBarcodeReaderBX4107(xInHWError := false, // todo
xInStartReading := #xStartScan4107,
xInHandshakeDone := #xHandshakeScan4107,
stInOutInterface := #arCognexInterface["cScannerBX4107"],
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutHMI := #stBarcodeReaderDummy);
"bx4107-TriggerEnable" := #arCognexInterface["cScannerBX4107"].xOutCamTriggerEnable;
"bx4107-Trigger" := #arCognexInterface["cScannerBX4107"].xOutCamTrigger;
"bx4107-ResultsAck" := #arCognexInterface["cScannerBX4107"].xOutCamResultsAck;
END_REGION *)
END_REGION
REGION TRO 415 (1Sep)
#TRO415.stInSeparator1.Settings.nSeparatorNo := "cSep415.1";
#TRO415.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO415.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO415.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO415.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO415.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO415.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO415.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO415.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3451"];
#TRO415.stInSenJam2 := "DB_Inputs".Sensors["cInBG3450"];
#TRO415.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO415.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO415(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO415.TroIn,
stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO415.TroOut,
nInMainTroNo := "cMainTro415",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO415,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4009".stJam4009_1.arCarrier,
stInOutJamEntr1 := "DB_JamArea4009".stJam4009_1.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_6.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_6.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO415,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro415"],
xOutStopper1 => "MB3451");
END_REGION
REGION TRO 416 (1Sep) + Beladeprüfung
#TRO416.stInSeparator1.Settings.nSeparatorNo := "cSep416.1";
#TRO416.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO416.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO416.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO416.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO416.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO416.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO416.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO416.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3435"];
#TRO416.stInSenJam2 := "DB_Inputs".Sensors["cInBG3433"];
#TRO416.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
IF "DB_JamArea4003".stJam4003_6.arCarrier[1].bStatus.%X0 AND "DB_JamArea4003".stJam4003_6.arCarrier[1].nDestination <> "cDestRecirc" THEN
"DB_JamArea4003".stJam4003_6.arCarrier[1].nDestination := "cDestLeaveAmr";
END_IF;
#TRO416(nInMainTroNo := "cMainTro416",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO416,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_6.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_6.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_7.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_7.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO416,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro416"],
xOutStopper1 => "MB3435");
END_REGION
REGION TRO 417 (1Sep)
#TRO417.stInSeparator1.Settings.nSeparatorNo := "cSep417.1";
#TRO417.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Long";
#TRO417.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO417.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO417.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO417.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO417.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO417.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO417.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3383"];
#TRO417.stInSenJam2 := "DB_Inputs".Sensors["cInBG3367"];
#TRO417(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO417.TroIn,
stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO417.TroOut,
nInMainTroNo := "cMainTro417",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO417,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_7.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_7.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_8.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_8.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO417,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro417"],
xOutStopper1 => "MB3383");
END_REGION
REGION TRO 418 (Vario)
#TRO418.stInSeparator1.Settings.nSeparatorNo := "cSep418.1";
#TRO418.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO418.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO418.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO418.stInSeparator1.Settings.tDelayToNextItem := T#5s;
#TRO418.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO418.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO418.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO418.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO418.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3391"];
#TRO418.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO418.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO418.stInVario.Settings.xContinousEmptying := FALSE;
#TRO418.stInVario.Settings.tWaitForJog := T#300ms;
#TRO418.stInVario.Settings.tConvEmpty := T#20000ms;
#TRO418.stInVario.Settings.nCountCarrier := 1;
#TRO418.stInVario.Settings.tWaitForStop := T#3s;
#TRO418.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO418.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO418.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3393"]; //Finger in Pos
#TRO418.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3425"]; // Conveyor full
#TRO418.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3264"]; // Jam detector
#TRO418.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3392"]; // MT in Pos
#TRO418.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO418.stInSettings.xIsBorner := TRUE;
#TRO418(nInMainTroNo := "cMainTro418",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInAutomatic := #t_automatik,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO418,
xInMotorProtection := "FC0074",
arInOutJamEntr := "DB_JamArea4010".stJam4010_1.arCarrier,
stInOutJamEntr := "DB_JamArea4010".stJam4010_1.stData,
arInOutJamFinger := "DB_JamArea4011".stJam4011_1.arCarrier,
stInOutJamFinger := "DB_JamArea4011".stJam4011_1.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO418,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro418"],
xOutStopper => "MB3391",
xOutVarioMotor => "MA0074");
END_REGION
REGION !!!!!! TRO 419 (1Sep) GIBT NICHT MEHR!!!!!!!
// #TRO419.stInSeparator1.Settings.nSeparatorNo := "cSep419.1";
// #TRO419.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
// #TRO419.stInSeparator1.Settings.tTrailingTime := t#0ms;
// #TRO419.stInSeparator1.Settings.tHandlingTime := t#0ms;
// #TRO419.stInSeparator1.Settings.tJam := "TimeForSepJam";
// #TRO419.stInSeparator1.Settings.xPluggedJam := TRUE;
// #TRO419.stInSeparator1.Settings.xPluggedPart := FALSE;
// #TRO419.stInSeparator1.Settings.xPluggedScanner := FALSE;
// #TRO419.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3424"];
// #TRO419.stInSenJam2 := "DB_Inputs".Sensors["cInBG3250"];
// #TRO419.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
// #TRO419(nInMainTroNo := "cMainTro419",
// xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
// xInAllRdyToStart := TRUE,
// xInCancel := "cTodoFalse",
// xInRelease := "DB_TRO_Test".TRO419, // todooooo "DI0036" AND "DI0037", //Brandschutz tor offen + Brandschutztor kein Fehler (NC oder NO signal?)
// xInCarouselRun := TRUE,
// stInOutMachineState := #stInOutControlUnitCabinet,
// stInOutCognexInterface := #stCognexInterfaceDummy,
// arInOutJamEntr1 := "DB_JamArea4010".stJam4010_2.arCarrier,
// stInOutJamEntr1 := "DB_JamArea4010".stJam4010_2.stData,
// arInOutJamExit2 := "DB_JamArea4011".stJam4011_1.arCarrier,
// stInOutJamExit2 := "DB_JamArea4011".stJam4011_1.stData,
// stInOutHMI := "DB_Interface_HMI".stTRO.TRO419,
// nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro419"],
// xOutStopper1 => "MB3424");
END_REGION
REGION TRO 420 (Vario)
#TRO420.stInSeparator1.Settings.nSeparatorNo := "cSep420.1";
#TRO420.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO420.stInSeparator1.Settings.tHandlingTime := t#400ms;
#TRO420.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO420.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO420.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO420.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO420.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO420.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3250"];
#TRO420.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO420.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO420.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3253"]; //Finger in Pos
#TRO420.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3256"]; // Conveyor full
#TRO420.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3251"]; // Jam detector, fehlt!
#TRO420.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3255"]; // MT in Pos
#TRO420.stInVario.Settings.xContinousEmptying := FALSE;
#TRO420.stInVario.Settings.tWaitForJog := T#300ms;
#TRO420.stInVario.Settings.tConvEmpty := T#50000ms;
#TRO420.stInVario.Settings.nCountCarrier := 1;
#TRO420.stInVario.Settings.tWaitForStop := T#3s;
#TRO420.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO420.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO420.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#stJamDataLeaveControl.Config.nCapacitySet := 1;
#TRO420(nInMainTroNo := "cMainTro420",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInAutomatic := #t_automatik,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO420,
xInMotorProtection := "FC0072",
arInOutJamEntr := "DB_JamArea4011".stJam4011_1.arCarrier,
stInOutJamEntr := "DB_JamArea4011".stJam4011_1.stData,
arInOutJamFinger := #arStCarrierLeaveControl,//JAM Übergabe CPU UH01!
stInOutJamFinger := #stJamDataLeaveControl,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO420,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro420"],
xOutStopper => "MB3250",
xOutVarioMotor => "MA0072");
END_REGION
REGION TRO 421 (Vario)
#TRO421.stInSeparator1.Settings.nSeparatorNo := "cSep421.1";
#TRO421.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO421.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO421.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO421.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO421.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO421.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO421.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO421.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3326"];
#TRO421.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO421.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO421.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3315"]; //Finger in Pos
#TRO421.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3317"]; // Conveyor full
#TRO421.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3324"]; // MT in Position
#TRO421.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3320"]; // Jam Detector
// #TRO421.stInVario.stSenUnloadPos := "DB_Inputs".Sensors["cInBG3314"]; //Unload Position
// #TRO421.stInVario.xButton := "SF0025"; // Release Button
#TRO421.stInVario.Settings.xContinousEmptying := FALSE;
#TRO421.stInVario.Settings.tWaitForJog := T#400ms;
#TRO421.stInVario.Settings.tConvEmpty := T#30000ms;
#TRO421.stInVario.Settings.nCountCarrier := 1;
#TRO421.stInVario.Settings.tWaitForStop := T#3s;
#TRO421.stInVario.Settings.xJamSenDelayActive := TRUE;
#TRO421.stInVario.Settings.tJamSenDelay := T#2s;
#TRO421.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO421.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO421.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO421.fbConvVario.xBeladenError := "DB_Inputs".Sensors["cInBG3325"].xDirectSensor;
#TRO421(nInMainTroNo := "cMainTro421",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInAutomatic := #t_automatik,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO421,
xInMotorProtection := "FC0062",
stInStationSensor:="DB_Inputs".Sensors["cInBG3314"],
xInReleaseStation:= #"rTrig_Workstation 1".CLK,
arInOutJamEntr := "DB_JamArea4004".stJam4004_2.arCarrier,
stInOutJamEntr := "DB_JamArea4004".stJam4004_2.stData,
arInOutJamFinger := "DB_JamArea4005".stJam4005_1.arCarrier,
stInOutJamFinger := "DB_JamArea4005".stJam4005_1.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO421,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro421"],
xOutStopper => "MB3326",
xOutVarioMotor => "MA0062");
REGION Barcode-Reader BX4103
#arCognexInterface["cScannerBX4103"].xInCamTriggerReady := "bx4103-TriggerReady";
#arCognexInterface["cScannerBX4103"].xInCamTriggerAck := "bx4103-TriggerAck";
#arCognexInterface["cScannerBX4103"].xInCamResultsAvailable := "bx4103-Results Available";
#arCognexInterface["cScannerBX4103"].xInCamGeneralFault := "bx4103-General Fault";
#arCognexInterface["cScannerBX4103"].hwInCamInspectionResults := "BX4103~Ergebnisse__64_Bytes_1";
#fbBarcodeReaderBX4103.stInSettings.xActivateCheckASCI := TRUE;
#fbBarcodeReaderBX4103.stInSettings.tTimeout := T#5s; //T#5s zum Testen
#TRO421.fbConvVario.xReadyForScan := #fbBarcodeReaderBX4103.xOutReadyForNewScan;
#TRO421.fbConvVario.xReadingDone := #fbBarcodeReaderBX4103.xOutReadingDone;
(* IF #TRO421.fbConvVario.xStartScanBarcode(* "DB_Inputs".Sensors["cInBG3314"].xDirectEdgePos *)THEN
#xHandshakeScanb4103 := FALSE;
#xStartScan4103 := TRUE;
END_IF; *)
IF #fbBarcodeReaderBX4103.xOutReadingDone THEN
#TRO421.nBarcodeReader_Result := LINT_TO_DINT(#fbBarcodeReaderBX4103.#nOutBarcode);
(* #xHandshakeScanb4103 := NOT #TRO421.fbConvVario.xSationStop (* TRUE *);
#xStartScan4103 := FALSE; *)
END_IF;
#fbBarcodeReaderBX4103(xInHWError := false, // todo
xInStartReading := #TRO421.fbConvVario.xStartScanBarcode,
xInHandshakeDone := #TRO421.fbConvVario.xHandShakeScan,
stInOutInterface := #arCognexInterface["cScannerBX4103"],
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutHMI := #stBarcodeReaderDummy);
"bx4103-TriggerEnable" := #arCognexInterface["cScannerBX4103"].xOutCamTriggerEnable;
"bx4103-Trigger" := #arCognexInterface["cScannerBX4103"].xOutCamTrigger;
"bx4103-ResultsAck" := #arCognexInterface["cScannerBX4103"].xOutCamResultsAck;
END_REGION
REGION Release and Reset Buttons
#TRO421.fbConvVario.xResetBeladen := "SF0053";
"PF0053" := #TRO421.fbConvVario.xResetLed OR "SF0003";
#"rTrig_Workstation 1"(CLK := "SF0025"); //Release Button Workstation 1
END_REGION
END_REGION
REGION TRO 422 (Vario)
#TRO422.stInSeparator1.Settings.nSeparatorNo := "cSep422.1";
#TRO422.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO422.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO422.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO422.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO422.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO422.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO422.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO422.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3397"];
#TRO422.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO422.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO422.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3375"]; //Finger in Pos
#TRO422.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3377"]; // Conveyor full
#TRO422.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3384"]; // MT in Position
#TRO422.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3380"]; // Jam detector
// #TRO422.stInVario2.stSenUnloadPos := "DB_Inputs".Sensors["cInBG3374"]; //Unload Position
// #TRO422.stInVario2.xButton := "SF0026"; // Release Button
#TRO422.stInVario.Settings.xContinousEmptying := FALSE;
#TRO422.stInVario.Settings.tWaitForJog := T#400ms;
#TRO422.stInVario.Settings.tConvEmpty := T#30000ms;
#TRO422.stInVario.Settings.nCountCarrier := 1;
#TRO422.stInVario.Settings.tWaitForStop := T#3s;
#TRO422.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO422.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO422.stInVario.Settings.xJamSenDelayActive := TRUE;
#TRO422.stInVario.Settings.tJamSenDelay := T#2s;
#TRO422.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO422.fbConvVario.xBeladenError := "DB_Inputs".Sensors["cInBG3385"].xDirectSensor;
#TRO422(nInMainTroNo := "cMainTro422",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInAutomatic := #t_automatik,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO422,
xInMotorProtection := "FC0064",
stInStationSensor:="DB_Inputs".Sensors["cInBG3374"],
xInReleaseStation:=#"rTrig_Workstation 2".CLK,
arInOutJamEntr := "DB_JamArea4006".stJam4006_2.arCarrier,
stInOutJamEntr := "DB_JamArea4006".stJam4006_2.stData,
arInOutJamFinger := "DB_JamArea4007".stJam4007_1.arCarrier,
stInOutJamFinger := "DB_JamArea4007".stJam4007_1.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO422,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro422"],
xOutStopper => "MB3397",
xOutVarioMotor => "MA0064");
REGION Release AND Reset Buttons
#TRO422.fbConvVario.xResetBeladen := "SF0055";
"PF0055" := #TRO422.fbConvVario.xResetLed OR "SF0003";
// TO DO
#"rTrig_Workstation 2"(CLK := "SF0026"); //Release Button Workstation 2
END_REGION
REGION Barcode-Reader BX4105
#arCognexInterface["cScannerBX4105"].xInCamTriggerReady := "bx4105-TriggerReady";
#arCognexInterface["cScannerBX4105"].xInCamTriggerAck := "bx4105-TriggerAck";
#arCognexInterface["cScannerBX4105"].xInCamResultsAvailable := "bx4105-Results Available";
#arCognexInterface["cScannerBX4105"].xInCamGeneralFault := "bx4105-General Fault";
#arCognexInterface["cScannerBX4105"].hwInCamInspectionResults := "BX4105~Ergebnisse__64_Bytes_1";
#fbBarcodeReaderBX4105.stInSettings.xActivateCheckASCI := TRUE;
#fbBarcodeReaderBX4105.stInSettings.tTimeout := T#5s; //T#5s zum Testen
#TRO422.fbConvVario.xReadyForScan := #fbBarcodeReaderBX4105.xOutReadyForNewScan;
#TRO422.fbConvVario.xReadingDone := #fbBarcodeReaderBX4105.xOutReadingDone;
(* IF #TRO421.fbConvVario.xStartScanBarcode(* "DB_Inputs".Sensors["cInBG3314"].xDirectEdgePos *)THEN
#xHandshakeScanb4103 := FALSE;
#xStartScan4103 := TRUE;
END_IF; *)
IF #fbBarcodeReaderBX4105.xOutReadingDone THEN
#TRO422.nBarcodeReader_Result := LINT_TO_DINT(#fbBarcodeReaderBX4105.#nOutBarcode);
(* #xHandshakeScanb4103 := NOT #TRO422.fbConvVario.xSationStop (* TRUE *);
#xStartScan4103 := FALSE; *)
END_IF;
#fbBarcodeReaderBX4105(xInHWError := false, // todo
xInStartReading := #TRO422.fbConvVario.xStartScanBarcode,
xInHandshakeDone := #TRO422.fbConvVario.xHandShakeScan,
stInOutInterface := #arCognexInterface["cScannerBX4105"],
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutHMI := #stBarcodeReaderDummy);
"bx4105-TriggerEnable" := #arCognexInterface["cScannerBX4105"].xOutCamTriggerEnable;
"bx4105-Trigger" := #arCognexInterface["cScannerBX4105"].xOutCamTrigger;
"bx4105-ResultsAck" := #arCognexInterface["cScannerBX4105"].xOutCamResultsAck;
END_REGION
END_REGION
REGION TRO 423 (Vario)
#TRO423.stInSeparator1.Settings.nSeparatorNo := "cSep423.1";
#TRO423.stInSeparator1.Settings.tTrailingTime := "cTimeSepTrailing";
#TRO423.stInSeparator1.Settings.tHandlingTime := t#200ms;
#TRO423.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO423.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO423.stInSeparator1.Settings.xPluggedJam := FALSE;
#TRO423.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO423.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO423.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3436"];
#TRO423.stInSeparator1.Settings.tSenFree := T#1200ms;
#TRO423.stInSeparator1.Settings.tSenWait := T#4300ms;
#TRO423.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3445"]; //Finger in Pos
#TRO423.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3447"]; // Conveyor full
#TRO423.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3454"]; // MT in Position
#TRO423.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3431"]; // Jam detector
// #TRO414.stInVario2.stSenUnloadPos := "DB_Inputs".Sensors["cInBG3444"]; //Unload Position
// #TRO414.stInVario2.xButton := "SF0027"; // Release Button
#TRO423.stInVario.Settings.xContinousEmptying := FALSE;
#TRO423.stInVario.Settings.tWaitForJog := T#400ms;
#TRO423.stInVario.Settings.tConvEmpty := T#30000ms;
#TRO423.stInVario.Settings.nCountCarrier := 1;
#TRO423.stInVario.Settings.tWaitForStop := T#3s;
#TRO423.stInVario.Settings.tCarrierInPosDelay := t#1200ms;
#TRO423.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms;
#TRO423.stInVario.Settings.xJamSenDelayActive := TRUE;
#TRO423.stInVario.Settings.tJamSenDelay := T#2s;
#TRO423.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung
#TRO423.fbConvVario.xBeladenError := "DB_Inputs".Sensors["cInBG3455"].xDirectSensor;
#TRO423(nInMainTroNo := "cMainTro423",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInAutomatic := #t_automatik,
xInReset := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO423,
xInMotorProtection := "FC0066",
stInStationSensor:="DB_Inputs".Sensors["cInBG3444"],
xInReleaseStation:=#"rTrig_Workstation 3".CLK,
arInOutJamEntr := "DB_JamArea4008".stJam4008_2.arCarrier,
stInOutJamEntr := "DB_JamArea4008".stJam4008_2.stData,
arInOutJamFinger := "DB_JamArea4009".stJam4009_1.arCarrier,
stInOutJamFinger := "DB_JamArea4009".stJam4009_1.stData,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO423,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro423"],
xOutStopper => "MB3436",
xOutVarioMotor => "MA0066");
REGION Barcode-Reader BX4107
#arCognexInterface["cScannerBX4107"].xInCamTriggerReady := "bx4107-TriggerReady";
#arCognexInterface["cScannerBX4107"].xInCamTriggerAck := "bx4107-TriggerAck";
#arCognexInterface["cScannerBX4107"].xInCamResultsAvailable := "bx4107-Results Available";
#arCognexInterface["cScannerBX4107"].xInCamGeneralFault := "bx4107-General Fault";
#arCognexInterface["cScannerBX4107"].hwInCamInspectionResults := "BX4107~Ergebnisse__64_Bytes_1";
#fbBarcodeReaderBX4107.stInSettings.xActivateCheckASCI := TRUE;
#fbBarcodeReaderBX4107.stInSettings.tTimeout := T#5s; //T#5s zum Testen
#TRO423.fbConvVario.xReadyForScan := #fbBarcodeReaderBX4107.xOutReadyForNewScan;
#TRO423.fbConvVario.xReadingDone := #fbBarcodeReaderBX4107.xOutReadingDone;
(* IF #TRO421.fbConvVario.xStartScanBarcode(* "DB_Inputs".Sensors["cInBG3314"].xDirectEdgePos *)THEN
#xHandshakeScanb4103 := FALSE;
#xStartScan4103 := TRUE;
END_IF; *)
IF #fbBarcodeReaderBX4107.xOutReadingDone THEN
#TRO423.nBarcodeReader_Result := LINT_TO_DINT(#fbBarcodeReaderBX4107.#nOutBarcode);
(* #xHandshakeScanb4103 := NOT #TRO422.fbConvVario.xSationStop (* TRUE *);
#xStartScan4103 := FALSE; *)
END_IF;
#fbBarcodeReaderBX4107(xInHWError := false, // todo
xInStartReading := #TRO423.fbConvVario.xStartScanBarcode,
xInHandshakeDone := #TRO423.fbConvVario.xHandShakeScan,
stInOutInterface := #arCognexInterface["cScannerBX4107"],
stInOutControlUnitCabinet := #stInOutControlUnitCabinet,
stInOutHMI := #stBarcodeReaderDummy);
"bx4107-TriggerEnable" := #arCognexInterface["cScannerBX4107"].xOutCamTriggerEnable;
"bx4107-Trigger" := #arCognexInterface["cScannerBX4107"].xOutCamTrigger;
"bx4107-ResultsAck" := #arCognexInterface["cScannerBX4107"].xOutCamResultsAck;
END_REGION
REGION Release AND Reset Buttons
// TO DO
#TRO423.fbConvVario.xResetBeladen := "SF0057";
"PF0057" := #TRO423.fbConvVario.xResetLed OR "SF0003";
#"rTrig_Workstation 3"(CLK := "SF0027"); //Release Button Workstation 2
END_REGION
END_REGION
REGION TRO 424 (1Sep) vor Behangskontrolle
#TRO424.stInSeparator1.Settings.nSeparatorNo := "cSep424.1";
#TRO424.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO424.stInSeparator1.Settings.tTrailingTime := t#0ms;
#TRO424.stInSeparator1.Settings.tHandlingTime := t#0ms;
#TRO424.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO424.stInSeparator1.Settings.xPluggedJam := TRUE;
#TRO424.stInSeparator1.Settings.xPluggedPart := FALSE;
#TRO424.stInSeparator1.Settings.xPluggedScanner := FALSE;
#TRO424.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3400"];
#TRO424.stInSenJam2 := "DB_Inputs".Sensors["cInBG3360"];
#TRO424.stInPriorityManager.xReleaseOk := TRUE; //keine Vorfahrtsregelung notwendig
#TRO424(nInMainTroNo := "cMainTro424",
xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q,
xInAllRdyToStart := TRUE,
xInCancel := "cTodoFalse",
xInRelease := "DB_TRO_Test".TRO424,
xInCarouselRun := #fbCarousel4003.xOutConveyorFullSpeed,
stInOutMachineState := #stInOutControlUnitCabinet,
stInOutCognexInterface := #stCognexInterfaceDummy,
arInOutJamEntr1 := "DB_JamArea4003".stJam4003_8.arCarrier,
stInOutJamEntr1 := "DB_JamArea4003".stJam4003_8.stData,
arInOutJamExit2 := "DB_JamArea4003".stJam4003_1.arCarrier,
stInOutJamExit2 := "DB_JamArea4003".stJam4003_1.stData,
stInOutHMI := "DB_Interface_HMI".stTRO.TRO424,
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro424"],
xOutStopper1 => "MB3400");
END_REGION
END_REGION
END_FUNCTION_BLOCK