FUNCTION_BLOCK "FB_Main" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_IN_OUT stInOutControlUnitCabinetOF1 : "UDT_MainState"; stInOutControlUnitCabinetOF2 : "UDT_MainState"; END_VAR VAR fbCarousel0101 : "FB_Conveyor"; // Eingangskreisel fbCarousel0102 : "FB_Conveyor"; // Ausgangskreisel fbConveyor0103 : "FB_Conveyor"; // Bürsten Zufahrt LS1 fbCarousel0104 : "FB_Conveyor"; // Kreisel LS1 fbConveyor0106 : "FB_Conveyor"; // Bürsten Abfuhr LS1 fbConveyor0107 : "FB_Conveyor"; // Bürsten Zufahrt LS2 fbCarousel0108 : "FB_Conveyor"; fbConveyor0110 : "FB_Conveyor"; // Bürsten Abfuhr LS2 fbCarousel4204 : "FB_Conveyor"; fbConveyor4103_B : "FB_Conveyor"; // Bürsten Highway Loaded to Storage fbConveyor4203_B : "FB_Conveyor"; // Bürsten Highway Empty to Storage fbConveyor4302_A : "FB_Conveyor"; // Bürsten Highway Empty to Inbound fbConveyor4402_A : "FB_Conveyor"; // Bürsten Highway Loaded to AMR fbLoadingBoom1 : "FB_LoadingBoom_INBOUND"; fbLoadingBoom2 : "FB_LoadingBoom_INBOUND"; rTrig_IBN_KREISEL {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; xKreiselmerker : Bool; // IBN arBarcodeReader { S7_SetPoint := 'False'} : Array[1.."cNoScanner"] of "FB_BarcodeReaderCognex"; END_VAR VAR RETAIN arCognexInterface { S7_SetPoint := 'False'} : Array[1.."cNoScanner"] of "stCognexInterface"; END_VAR VAR stCognexInterfaceDummy : "stCognexInterface"; END_VAR VAR RETAIN stConvStationsTro101 { S7_SetPoint := 'False'} : "stConveyorStations"; // 1.1.1 stConvStationsTro102 : "stConveyorStations"; END_VAR VAR stCognexIntfTro105 { S7_SetPoint := 'False'} : "stCognexInterface"; stCognexIntfTro110 : "stCognexInterface"; TRO100 : "FB_ILS_MTRO_1Sep"; TRO101_IN : "FB_ILS_MTRO_1Sep"; TRO101 : "FB_EmptyCarrBuffer"; TRO102_IN : "FB_ILS_MTRO_1Sep"; TRO102 : "FB_EmptyCarrBuffer"; TRO103 : "FB_ILS_MTRO_1Sep"; TRO104 : "FB_ILS_MTRO_1Sep"; TRO105 : "FB_ILS_MTRO_1Sep_SSCC"; TRO106 : "FB_ILS_MTRO_1Sep"; TRO107 : "FB_ILS_MTRO_1Sep1Swi"; TRO108 : "FB_ILS_MTRO_1Sep"; TRO109 : "FB_ILS_MTRO_1Sep"; TRO110 : "FB_ILS_MTRO_1Sep_SSCC"; TRO111 : "FB_ILS_MTRO_1Sep"; TRO112 : "FB_ILS_MTRO_1Sep1Swi"; TRO113 : "FB_ILS_MTRO_1Sep"; TRO114 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_1Sep1Swi"; TRO115 : "FB_ILS_MTRO_Vario"; TRO116 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_1Sep"; TRO117 : "FB_ILS_MTRO_1Sep"; TRO120 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO121 : "FB_ILS_MTRO_Vario"; TRO122 : "FB_ILS_MTRO_1Sep"; TRO123 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO124 : "FB_ILS_MTRO_1Sep1Swi"; TRO125 : "FB_ILS_MTRO_1Sep"; TRO126 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO127 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO128 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO129 : "FB_ILS_MTRO_1Sep"; TRO130 : "FB_ILS_MTRO_1Sep"; TRO131 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO132 : "FB_ILS_MTRO_1Sep"; TRO133 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; TRO134 { S7_SetPoint := 'False'} : "FB_ILS_MTRO_Vario"; rTrig_ClarificationButton {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; rTrig_LengthMeasurement {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; rTimeResult : LReal; rTimeMem : LReal; xHighwayPrio124 : Bool; xHighwayPrio130 : Bool; xLineTro101 : Int; xLineTro102 : Int; nBarcodeEmpty : DInt; xReInit : Bool; rTrigReInit {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; stTelegramDReqM_TRO110 : "UDT_TelegramData_Send"; xTest : Bool; tOfBürstentakt4103_B {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME; tOfBürstentakt4203_B {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME; tOfBürstentakt4302_A {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME; tOfBürstentakt4402_A {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME; xBrushFull4103_B : Bool; xBrushFull4203_B : Bool; xBrushFull4302_A : Bool; xBrushFull4402_A : Bool; END_VAR VAR_TEMP nActCar : Int; nActNo101 : Int; nActNo102 : Int; nNiu : DInt; stGenerateCarrier : "stCarrier"; nCounter1 : DInt; xResult1 : Bool; nIdx : Int; nIdx2 : Int; nFound : Int; stEmptyCarrier : "stCarrier"; stEmptyCarrierData : "stJamData"; arTmpStorageData101 : Array[1..5] of "stStorageData"; arTmpCarrier : Array[1..1] of "stCarrier"; // Platzhalter arTmpCarrierBufferExit : Array[1..70] of "stCarrier"; stHMISwitchPlaceholder : "UDT_UnloadingStation"; idx : Int; arEmptyStorageLine_1 : Int; arEmptyStorageLine : Array[1..1] of "stCarrier"; arDummyEventCorrectionInfo : Array[0..1] of "stEventCorrectionInfo"; t_Automatik_OF1 : Bool; t_Automatik_OF2 : Bool; stTmpJamDataBufferEntry : "stJamData"; tmpPlaceHolderLaneStatus : Array[0..4] of String; arStCarrierLeaveControl : Array[1..1] of "stCarrier"; stJamDataLeaveControl : "stJamData"; arStCarrier4104 : Array[1..1] of "stCarrier"; stJamData4104 : "stJamData"; sLengthInfo : String; stDummy : "stCarrier"; END_VAR BEGIN REGION Automatik #t_Automatik_OF1 := "DB_InterfaceSafety".stFromSafety.stMainContactorsUH01.Q AND "DB_InterfaceSafety".stFromSafety.stMainContactorsUC0110.Q AND "DB_InterfaceSafety".stFromSafety.stMainContactorsUC0111.Q;//#stInOutControlUnitCabinetOF1.xRunning AND NOT #stInOutControlUnitCabinetOF1.xStarting AND "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q; #t_Automatik_OF2 := "DB_InterfaceSafety".stFromSafety.stMainContactorsUC011.Q;//#stInOutControlUnitCabinetOF2.xRunning AND NOT #stInOutControlUnitCabinetOF2.xStarting AND "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q; END_REGION REGION Reinitialisieren IF NOT #xReInit THEN #xReInit := TRUE; END_IF; #rTrigReInit(CLK := #xReInit); IF #rTrigReInit.Q THEN #TRO100.nState := "DB_GLOB_TroState".arTroState["cMainTro100"]; #TRO101_IN.nState := "DB_GLOB_TroState".arTroState["cMainTro101_IN"]; #TRO102_IN.nState := "DB_GLOB_TroState".arTroState["cMainTro102_IN"]; #TRO101.nStateA := "DB_GLOB_TroState".arTroState["cMainTro101"]; #TRO102.nStateA := "DB_GLOB_TroState".arTroState["cMainTro102"]; #TRO103.nState := "DB_GLOB_TroState".arTroState["cMainTro103"]; #TRO104.nState := "DB_GLOB_TroState".arTroState["cMainTro104"]; #TRO105.nState := "DB_GLOB_TroState".arTroState["cMainTro105"]; #TRO106.nState := "DB_GLOB_TroState".arTroState["cMainTro106"]; #TRO107.nState := "DB_GLOB_TroState".arTroState["cMainTro107"]; #TRO108.nState := "DB_GLOB_TroState".arTroState["cMainTro108"]; #TRO109.nState := "DB_GLOB_TroState".arTroState["cMainTro109"]; #TRO110.nState := "DB_GLOB_TroState".arTroState["cMainTro110"]; #TRO111.nState := "DB_GLOB_TroState".arTroState["cMainTro111"]; #TRO112.nState := "DB_GLOB_TroState".arTroState["cMainTro112"]; #TRO113.nState := "DB_GLOB_TroState".arTroState["cMainTro113"]; #TRO114.nState := "DB_GLOB_TroState".arTroState["cMainTro114"]; #TRO115.nState := "DB_GLOB_TroState".arTroState["cMainTro115"]; #TRO116.nState := "DB_GLOB_TroState".arTroState["cMainTro116"]; #TRO117.nState := "DB_GLOB_TroState".arTroState["cMainTro117"]; // #TRO118.nState := "DB_GLOB_TroState".arTroState["cMainTro118"]; //gibt es nicht // #TRO119.nState := "DB_GLOB_TroState".arTroState["cMainTro119"]; //gibt es nicht #TRO120.nState := "DB_GLOB_TroState".arTroState["cMainTro120"]; #TRO121.nState := "DB_GLOB_TroState".arTroState["cMainTro121"]; #TRO122.nState := "DB_GLOB_TroState".arTroState["cMainTro122"]; #TRO123.nState := "DB_GLOB_TroState".arTroState["cMainTro123"]; #TRO124.nState := "DB_GLOB_TroState".arTroState["cMainTro124"]; #TRO125.nState := "DB_GLOB_TroState".arTroState["cMainTro125"]; #TRO126.nState := "DB_GLOB_TroState".arTroState["cMainTro126"]; #TRO127.nState := "DB_GLOB_TroState".arTroState["cMainTro127"]; #TRO128.nState := "DB_GLOB_TroState".arTroState["cMainTro128"]; #TRO129.nState := "DB_GLOB_TroState".arTroState["cMainTro129"]; #TRO130.nState := "DB_GLOB_TroState".arTroState["cMainTro130"]; #TRO131.nState := "DB_GLOB_TroState".arTroState["cMainTro131"]; // #TRO132.nState := "DB_GLOB_TroState".arTroState["cMainTro132"]; //gibt es nicht #TRO133.nState := "DB_GLOB_TroState".arTroState["cMainTro133"]; #TRO134.nState := "DB_GLOB_TroState".arTroState["cMainTro134"]; #fbLoadingBoom1.fbWorkSation.xStopperFull := "DB_GLOB_StopperState".xStopperLoadingBoom1; #fbLoadingBoom2.fbWorkSation.xStopperFull := "DB_GLOB_StopperState".xStopperLoadingBoom2; END_IF; END_REGION REGION Conveyor REGION KR-M0101 (Entry Conv) #fbCarousel0101.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR #TRO100.xOutCarouselReq OR #TRO101_IN.xOutCarouselReq OR #TRO102_IN.xOutCarouselReq; #fbCarousel0101.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbCarousel0101.Settings.xGridActive := TRUE; #fbCarousel0101.Settings.sMotorProtectName := 'FC0060'; #fbCarousel0101.Settings.sGridSenName := 'BG3347'; #fbCarousel0101(xInEnabled := "cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3347"].xDirectSensor, xInGridQuit := "SF0031" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0060", xOutPowerContactor => "MA0060", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".#stConveyors.stCarousel.stCar0101); END_REGION REGION KR-M0102 (Exit Conv) #fbCarousel0102.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR #TRO101.xOutCarouselReq OR #TRO102.xOutCarouselReq OR #TRO106.xOutCarouselReq OR #TRO107.xOutCarouselReq1 OR #TRO111.xOutCarouselReq OR #TRO112.xOutCarouselReq1 OR #TRO113.xOutCarouselReq OR #TRO114.xOutCarouselReq1 OR #TRO117.xOutCarouselReq; #fbCarousel0102.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbCarousel0102.Settings.xGridActive := TRUE; #fbCarousel0102.Settings.sMotorProtectName := 'FC0061'; #fbCarousel0102.Settings.sGridSenName := 'BG3342'; #fbCarousel0102(xInEnabled := "cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3342"].xDirectSensor, xInGridQuit := "SF0033" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0061", xOutPowerContactor => "MA0061", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0102); END_REGION REGION KR-M0103 (Loading Boom 1 - Entry Conv) #fbConveyor0103.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR #TRO103.xOutCarouselReq; #fbConveyor0103.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbConveyor0103.Settings.xGridActive := TRUE; #fbConveyor0103.Settings.sMotorProtectName := 'FC0062'; #fbConveyor0103.Settings.sGridSenName := 'BG3270'; #fbConveyor0103(xInEnabled := "cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3270"].xDirectSensor, xInGridQuit := "SF0043" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0062", xOutPowerContactor => "MA0062", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0103); END_REGION REGION KR-M0104 (Car Boom1) // "MB0325" := "IBN".xBumperReset OR "SF0002"; #fbCarousel0104.xInRequestRun := #stInOutControlUnitCabinetOF1.xRestart OR #TRO103.xOutCarouselReq(* OR "DB_JamBoom1".stJamStopper.arCarrier[1].bStatus.%X0 *)OR #TRO104.xOutCarouselReq OR "DB_Inputs".Sensors["cInBG0286"].xDirectEdgeNeg OR "DB_Inputs".Sensors["cInBG0285"].xDirectEdgeNeg OR (#fbLoadingBoom1.stOutStopper.xStopper2 AND NOT "SF0306") OR (#fbLoadingBoom1.stOutStopper.xStopper1Finger AND "SF0306"); #fbCarousel0104.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbCarousel0104.Settings.xGridActive := TRUE; #fbCarousel0104.Settings.sMotorProtectName := 'FC0320'; #fbCarousel0104.Settings.sGridSenName := 'BG0284'; #fbCarousel0104(xInEnabled := TRUE, xInAutomaticMode := #t_Automatik_OF1 AND (#fbLoadingBoom1.xOutReady OR #fbLoadingBoom1.xOutMoveReq), xInMotorProtectionMonitoring := "FC0320", xInGridSen := "DB_Inputs".Sensors["cInBG0284"].xDirectSensor, xInGridQuit := "SF0043" OR "SF0002", xOutPowerContactor => "MA0320", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0104); END_REGION REGION KR-M0106 (Loading Boom 1 - Exit Conv) #fbConveyor0106.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR (#fbLoadingBoom1.stOutStopper.xStopper2 AND NOT "SF0306") OR (#fbLoadingBoom1.stOutStopper.xStopper1Finger AND "SF0306") OR "DB_Inputs".Sensors["cInBG0285"].xDirectEdgePos; #fbConveyor0106.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbConveyor0106.Settings.xGridActive := FALSE;//TRUE; #fbConveyor0106.Settings.sMotorProtectName := 'FC0064'; #fbConveyor0106.Settings.sGridSenName := 'BG3273'; #fbConveyor0106(xInEnabled := NOT "DB_Inputs".Sensors["cInBG3276"].xJam,//"cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3273"].xDirectSensor, xInGridQuit := "SF0043" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0064", xOutPowerContactor => "MA0064", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0106); END_REGION REGION KR-M0107 (Loading Boom 2 - Entry Conv) #fbConveyor0107.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR #TRO108.xOutCarouselReq; #fbConveyor0107.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbConveyor0107.Settings.xGridActive := TRUE; #fbConveyor0107.Settings.sMotorProtectName := 'FC0065'; #fbConveyor0107.Settings.sGridSenName := 'BG3284'; #fbConveyor0107(xInEnabled := "cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3284"].xDirectSensor, xInGridQuit := "SF0054" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0065", xOutPowerContactor => "MA0065", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0107); END_REGION REGION KR-M0108 (Car Boom2) // "MB0325" := "IBN".xBumperReset OR "SF0002"; #fbCarousel0108.xInRequestRun := #stInOutControlUnitCabinetOF1.xRestart OR #TRO108.xOutCarouselReq(* OR "DB_JamBoom2".stJamStopper.arCarrier[1].bStatus.%X0 *)OR #TRO109.xOutCarouselReq OR "DB_Inputs".Sensors["cInBG0346"].xDirectEdgeNeg OR "DB_Inputs".Sensors["cInBG0345"].xDirectEdgeNeg OR (#fbLoadingBoom2.stOutStopper.xStopper2 AND NOT "SF0366") OR (#fbLoadingBoom2.stOutStopper.xStopper1Finger AND "SF0366"); #fbCarousel0108.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbCarousel0108.Settings.xGridActive := TRUE; #fbCarousel0108.Settings.sMotorProtectName := 'FC0380'; #fbCarousel0108.Settings.sGridSenName := 'BG0344'; #fbCarousel0108(xInEnabled := TRUE, xInAutomaticMode := #t_Automatik_OF1 AND (#fbLoadingBoom2.xOutReady OR #fbLoadingBoom2.xOutMoveReq), xInMotorProtectionMonitoring := "FC0380", xInGridSen := "DB_Inputs".Sensors["cInBG0344"].xDirectSensor, xInGridQuit := "SF0054" OR "SF0002", xOutPowerContactor => "MA0380", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0108); END_REGION REGION KR-M0110 (Loading Boom 2 - Exit Conv) #fbConveyor0110.xInRequestRun := "fbPreMain_DB".fbStateMainOF1.nConveyorStartUpCounter = 100 OR #stInOutControlUnitCabinetOF1.xRestart OR (#fbLoadingBoom2.stOutStopper.xStopper2 AND NOT "SF0366") OR (#fbLoadingBoom2.stOutStopper.xStopper1Finger AND "SF0366") OR "DB_Inputs".Sensors["cInBG0345"].xDirectEdgePos; #fbConveyor0110.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbConveyor0110.Settings.xGridActive := FALSE;//TRUE; #fbConveyor0110.Settings.sMotorProtectName := 'FC0067'; #fbConveyor0110.Settings.sGridSenName := 'BG3285'; #fbConveyor0110(xInEnabled := NOT "DB_Inputs".Sensors["cInBG3294"].xJam,//"cTodoTRUE", xInGridSen := "DB_Inputs".Sensors["cInBG3285"].xDirectSensor, xInGridQuit := "SF0054" OR "SF0002", xInAutomaticMode := #t_Automatik_OF1, xInMotorProtectionMonitoring := "FC0067", xOutPowerContactor => "MA0067", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar0110); END_REGION REGION KR-M4204 (Kreisel Highway) #fbCarousel4204.Settings.tEnergySafeTime := T#90s; #fbCarousel4204.Settings.tStartingTime := T#50ms; #fbCarousel4204.Settings.xGridActive := TRUE; #fbCarousel4204.xInRequestRun := (* "fbPreMain_DB".fbStateMain.nConveyorStartUpCounter = 100 *)#stInOutControlUnitCabinetOF2.xRestart OR #stInOutControlUnitCabinetOF2.xRestart OR #TRO124.xOutCarouselReq1 OR #TRO124.xOutCarouselReq2 OR #TRO125.xOutCarouselReq OR #TRO129.xOutCarouselReq OR #TRO130.xOutCarouselReq; #fbCarousel4204.Settings.tEnergySafeTime := "cTimeEnergySafe"; #fbCarousel4204.Settings.xGridActive := TRUE; #fbCarousel4204.Settings.sMotorProtectName := 'FC0140'; #fbCarousel4204.Settings.sGridSenName := 'BG3007'; #fbCarousel4204(xInEnabled := "SF0120" AND "SF0124", xInGridSen := "DB_Inputs".Sensors["cInBG3007"].xDirectSensor, xInGridQuit := "SF0117" OR "SF0121", xInAutomaticMode := #t_Automatik_OF2, xInMotorProtectionMonitoring := "FC0140", xOutPowerContactor => "MA0140", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF2, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4204); END_REGION REGION ILS-CV M4103_B (Bürstenförderer) REGION Enable und RequestRun IF "DB_Inputs".Sensors["cInBG3143"].xJam AND "DB_Inputs".Sensors["cInBG3142"].xDbncdSensor THEN //Bürstenförderer darf nicht fahren #fbConveyor4103_B.xInEnabled := FALSE; #xBrushFull4103_B := TRUE; ELSIF NOT "DB_Inputs".Sensors["cInBG3143"].xJam THEN #fbConveyor4103_B.xInEnabled := TRUE; #xBrushFull4103_B := FALSE; ELSIF "DB_Inputs".Sensors["cInBG3143"].xJam AND NOT #xBrushFull4103_B THEN #fbConveyor4103_B.xInEnabled := #tOfBürstentakt4103_B.Q; END_IF; #fbConveyor4103_B.xInRequestRun := "DB_Inputs".Sensors["cInBG3140"].xDirectEdgePos; // Trigger #tOfBürstentakt4103_B(IN:="DB_Inputs".Sensors["cInBG3140"].xDirectEdgePos, PT:= t#1s); END_REGION #fbConveyor4103_B.Settings.tEnergySafeTime := t#90s; //IBN todo #fbConveyor4103_B.Settings.xGridActive := FALSE; #fbConveyor4103_B.Settings.sMotorProtectName := 'FC0152'; #fbConveyor4103_B(xInAutomaticMode := #t_Automatik_OF2, xInMotorProtectionMonitoring := "FC0152", xOutPowerContactor => "MA0152", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF2, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4103_B); END_REGION REGION ILS-CV M4203_B (Bürstenförderer) REGION Enable und RequestRun IF "DB_Inputs".Sensors["cInBG3147"].xJam AND "DB_Inputs".Sensors["cInBG3146"].xDbncdSensor THEN //Bürstenförderer darf nicht fahren #fbConveyor4203_B.xInEnabled := FALSE; #xBrushFull4203_B := TRUE; ELSIF NOT "DB_Inputs".Sensors["cInBG3147"].xJam THEN #fbConveyor4203_B.xInEnabled := TRUE; #xBrushFull4203_B := FALSE; ELSIF "DB_Inputs".Sensors["cInBG3147"].xJam AND NOT #xBrushFull4203_B THEN #fbConveyor4203_B.xInEnabled := #tOfBürstentakt4203_B.Q; END_IF; #fbConveyor4203_B.xInRequestRun := "DB_Inputs".Sensors["cInBG3144"].xDirectEdgePos; // Trigger #tOfBürstentakt4203_B(IN := "DB_Inputs".Sensors["cInBG3144"].xDirectEdgePos, PT := t#1s); END_REGION #fbConveyor4203_B.Settings.tEnergySafeTime := t#90s; //IBN todo #fbConveyor4203_B.Settings.xGridActive := FALSE; #fbConveyor4203_B.Settings.sMotorProtectName := 'FC0153'; #fbConveyor4203_B(xInAutomaticMode := #t_Automatik_OF2, xInMotorProtectionMonitoring := "FC0153", xOutPowerContactor => "MA0153", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF2, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4203_B); END_REGION REGION ILS-CV M4302_A (Bürstenförderer) REGION Enable und RequestRun IF "DB_Inputs".Sensors["cInBG3153"].xJam AND "DB_Inputs".Sensors["cInBG3152"].xDbncdSensor THEN //Bürstenförderer darf nicht fahren #fbConveyor4302_A.xInEnabled := FALSE; #xBrushFull4302_A := TRUE; ELSIF NOT "DB_Inputs".Sensors["cInBG3153"].xJam THEN #fbConveyor4302_A.xInEnabled := TRUE; #xBrushFull4302_A := FALSE; ELSIF "DB_Inputs".Sensors["cInBG3153"].xJam AND NOT #xBrushFull4302_A THEN #fbConveyor4302_A.xInEnabled := #tOfBürstentakt4302_A.Q; END_IF; #fbConveyor4302_A.xInRequestRun := "DB_Inputs".Sensors["cInBG3150"].xDirectEdgePos; // Trigger #tOfBürstentakt4302_A(IN := "DB_Inputs".Sensors["cInBG3150"].xDirectEdgePos, PT := t#1s); END_REGION #fbConveyor4302_A.Settings.tEnergySafeTime := t#90s; //IBN todo #fbConveyor4302_A.Settings.xGridActive := FALSE; #fbConveyor4302_A.Settings.sMotorProtectName := 'FC0154'; #fbConveyor4302_A(xInAutomaticMode := #t_Automatik_OF2, xInMotorProtectionMonitoring := "FC0154", xOutPowerContactor => "MA0154", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF2, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4302_A); END_REGION REGION ILS-CV M4402_A (Bürstenförderer) REGION Enable und RequestRun IF "DB_Inputs".Sensors["cInBG3157"].xJam AND "DB_Inputs".Sensors["cInBG3156"].xDbncdSensor THEN //Bürstenförderer darf nicht fahren #fbConveyor4402_A.xInEnabled := FALSE; #xBrushFull4402_A := TRUE; ELSIF NOT "DB_Inputs".Sensors["cInBG3157"].xJam THEN #fbConveyor4402_A.xInEnabled := TRUE; #xBrushFull4402_A := FALSE; ELSIF "DB_Inputs".Sensors["cInBG3157"].xJam AND NOT #xBrushFull4402_A THEN #fbConveyor4402_A.xInEnabled := #tOfBürstentakt4402_A.Q; END_IF; #fbConveyor4402_A.xInRequestRun := "DB_Inputs".Sensors["cInBG3154"].xDirectEdgePos; // Trigger #tOfBürstentakt4402_A(IN := "DB_Inputs".Sensors["cInBG3154"].xDirectEdgePos, PT := t#1s); END_REGION #fbConveyor4402_A.Settings.tEnergySafeTime := t#90s; //IBN todo #fbConveyor4402_A.Settings.xGridActive := FALSE; #fbConveyor4402_A.Settings.sMotorProtectName := 'FC0155'; #fbConveyor4402_A(xInAutomaticMode := #t_Automatik_OF2, xInMotorProtectionMonitoring := "FC0155", xOutPowerContactor => "MA0155", stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF2, stInOutInterfaceHMI := "DB_Interface_HMI".stConveyors.stCarousel.stCar4402_A); END_REGION END_REGION REGION LoadingBoom 1 REGION Eingänge REGION UZ0110-1 #fbLoadingBoom1.stInControl.xBtnReleaseMT1 := "SF0305"; #fbLoadingBoom1.stInControl.xSwitchLoadingPos2 := "SF0306"; END_REGION REGION UZ0110-2 #fbLoadingBoom1.stInControl.xBtnBack := FALSE;//"SF0330"; auskommentiert für IBN aus Sicherheitsgründen #fbLoadingBoom1.stInControl.xBtnForth := FALSE;//"SF0331"; auskommentiert für IBN aus Sicherheitsgründen #fbLoadingBoom1.stInControl.xBtnReleaseMT2 := "SF0332"; END_REGION REGION Schalter Stützfuß #fbLoadingBoom1.stInControl.xSwitchFootUp := false;//"SF0334"; auskommentiert für IBN aus Sicherheitsgründen #fbLoadingBoom1.stInControl.xSwitchFootDown := false;//"SF0333"; auskommentiert für IBN aus Sicherheitsgründen END_REGION REGION UZ0103 #fbLoadingBoom1.stInControl.xSwitchLightOnOff := "SF0041"; #fbLoadingBoom1.stInControl.xBtnBoomActive := "SF0044"; #fbLoadingBoom1.stInControl.xBtnReset := "SF0043" OR "SF0002" OR "IBN".xQuit; END_REGION REGION Schaltschrank #fbLoadingBoom1.stInControl.xSwitchFootManual := "SF0025"; END_REGION REGION Signale Ladeschleife #fbLoadingBoom1.stInBoom.xMotorProtection1 := "FC0070" AND "FC0072"; //Beides auf einen Eingang? #fbLoadingBoom1.stInBoom.xLimitForth := "DB_Inputs".Sensors["cInBG3343"].xDirectSensor; #fbLoadingBoom1.stInBoom.xLimitForthEmergency := "SF0051"; #fbLoadingBoom1.stInBoom.xLimitBack := "DB_Inputs".Sensors["cInBG3344"].xDirectSensor; #fbLoadingBoom1.stInBoom.xLimitBackEmergency := "SF0050"; #fbLoadingBoom1.stInBoom.xBumperOk := TRUE; END_REGION REGION Signale Fuß #fbLoadingBoom1.stInFoot.xMotorProtection := "FC0321"; #fbLoadingBoom1.stInFoot.xLimitUp := "SF0322"; #fbLoadingBoom1.stInFoot.xLimitDown := "SF0323"; END_REGION REGION Sonstiges #fbLoadingBoom1.stInSettings.tBoomInput := T#5s; #fbLoadingBoom1.stInSettings.tWheelInput := T#5s; #fbLoadingBoom1.stInSettings.tSenWaitStopper1 := T#100ms; #fbLoadingBoom1.stInSettings.tWaitAfterReleaseStopper1 := T#1200ms; #fbLoadingBoom1.stInSettings.tWaitBeforeSwitchStopper2 := T#4000ms; #fbLoadingBoom1.stInSettings.tTrailingStopper2 := T#150ms; #fbLoadingBoom1.stInTilt.wTilt := "wTiltSensorLS1"; #fbLoadingBoom1.stInTilt.xClock := "Clock_10Hz"; #fbLoadingBoom1.stInTilt.tDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.tTiltDiff; #fbLoadingBoom1.stInTilt.tZero := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.tTiltZero; #fbLoadingBoom1.stInTilt.nDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nTiltOffset; #fbLoadingBoom1.stInTilt.nZeroOk := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nTiltZero; #fbLoadingBoom1.stInTilt.nTiltComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nTiltNullen; #fbLoadingBoom1.stInTilt.xComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xTiltTeach; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xTiltTeachReq := #fbLoadingBoom1.fbTiltSensor.xOutTeachNec; #fbLoadingBoom1.stInDistance.wDistance := "wDistanceSensorLS1"; #fbLoadingBoom1.stInDistance.nStartSlow := 2510; // Format z.B. 2799 für 279,9mm #fbLoadingBoom1.stInDistance.nStartFast := 2520; #fbLoadingBoom1.stInDistance.nDistanceZero := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nDistanceZero; #fbLoadingBoom1.stInDistance.nDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nDistanceDiff; #fbLoadingBoom1.stInDistance.tDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.tDistanceDiff; #fbLoadingBoom1.stInDistance.xComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xDistanceTeach; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xDistanceTeachReq := #fbLoadingBoom1.fbDistanceFoot.xOutTeachNec; //Für Landsberg am Lech: nDistanceZero = 2460(246mm), nDiff = 250(25mm), tDiff //IBN // IF #fbLoadingBoom1.fbTiltSensor.nTiltComp = 0 THEN //Entsrpicht in LL ungefähr dem Hallenboden, daher soll nach reinitialisieren auch wieder dieser Wert geschrieben werden // #fbLoadingBoom1.fbTiltSensor.nTiltComp := -20; // END_IF; //IBN END_REGION END_REGION REGION CALL #fbLoadingBoom1(stInSen2mThreshold := "DB_Inputs".Sensors["cInBG0287"], stInSenJamEntr := "DB_Inputs".Sensors["cInBG0286"], stInSenJamExit1 := "DB_Inputs".Sensors["cInBG0285"], stInSenJamExit2 := "DB_Inputs".Sensors["cInBG3276"], stInSenStopper1 := "DB_Inputs".Sensors["cInBG0282"], stInSenStopper2 := "DB_Inputs".Sensors["cInBG0283"], xInMachineRunning := "DB_MachineGlobal".stStateMainOF1.xRunning, xInTrolleyInSep := #TRO104.nState >= 2500 AND #TRO104.xReleaseTrolleySep1, //to do mit welcehm Signal oder welchem Wert hier gehandhabt wird xInSafety := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q AND NOT "DB_InterfaceSafety".stFromSafety.EStopMainOF1.AckReq, // xOutLedMovement => "PF0287", xOutLight => "QA0012", xOutBoomActive => "PF0044", arInOutCarrierStopper := "DB_JamArea0104".stJam0104_2.arCarrier, arInOutCarrierExit := "DB_JamArea0104".stJam0104_3.arCarrier, stInOutCarrierExit := "DB_JamArea0104".stJam0104_3.stData, xOutStopperState => "DB_GLOB_StopperState".xStopperLoadingBoom1); "PF0287" := #fbLoadingBoom1.xOutLedMovement OR "SF0003"; END_REGION REGION Ausgänge "MB0282" := #fbLoadingBoom1.stOutStopper.xStopper1Clamp; //prüfen "MB0284" := #fbLoadingBoom1.stOutStopper.xStopper1Finger; //prüfen "MB0283" := #fbLoadingBoom1.stOutStopper.xStopper2; "QA0071" := #fbLoadingBoom1.stOutBoom.xBoomForth1; "QA0073" := #fbLoadingBoom1.stOutBoom.xBoomForth2; "MA0070" := #fbLoadingBoom1.stOutBoom.xBoomBack1; "MA0072" := #fbLoadingBoom1.stOutBoom.xBoomBack2; "DQ0322" := #fbLoadingBoom1.stOutFoot.xFootUp; "DQ0323" := #fbLoadingBoom1.stOutFoot.xFootDown; "DQ0324" := #fbLoadingBoom1.stOutFoot.xFootSpeed1; END_REGION "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xBoomActive := #fbLoadingBoom1.xOutBoomActive; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xMovement := #fbLoadingBoom1.xOutLedMovement; IF #fbLoadingBoom1.fbWorkSation.nActiveStopperNo = 1 THEN "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xLoadingPos := TRUE; ELSIF #fbLoadingBoom1.fbWorkSation.nActiveStopperNo = 2 THEN "DB_Interface_HMI".stLoadingBoom.stDataBoom1.xLoadingPos := FALSE; END_IF; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nPosition.%X0 := #fbLoadingBoom1.stInBoom.xLimitBackEmergency; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nPosition.%X1 := #fbLoadingBoom1.stInBoom.xLimitBack; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nPosition.%X2 := NOT #fbLoadingBoom1.xAbove2m; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nPosition.%X3 := #fbLoadingBoom1.stInBoom.xLimitForth; "DB_Interface_HMI".stLoadingBoom.stDataBoom1.nPosition.%X4 := #fbLoadingBoom1.stInBoom.xLimitForthEmergency; END_REGION REGION LoadingBoom 2 REGION Eingänge REGION UZ0111-1 #fbLoadingBoom2.stInControl.xBtnReleaseMT1 := "SF0365"; #fbLoadingBoom2.stInControl.xSwitchLoadingPos2 := "SF0366"; END_REGION REGION UZ0111-2 #fbLoadingBoom2.stInControl.xBtnBack := false; //"SF0390"; //auskommentiert für "IBN" aus Sicherheitsgründen #fbLoadingBoom2.stInControl.xBtnForth := false; //"SF0391"; //auskommentiert für "IBN" aus Sicherheitsgründen #fbLoadingBoom2.stInControl.xBtnReleaseMT2 := "SF0392"; END_REGION REGION Schalter Stützfuß #fbLoadingBoom2.stInControl.xSwitchFootUp := false;//"SF0394"; auskommentiert für IBN aus Sicherheitsgründen #fbLoadingBoom2.stInControl.xSwitchFootDown := false;//"SF0393"; auskommentiert für IBN aus Sicherheitsgründen END_REGION REGION UZ0104 #fbLoadingBoom2.stInControl.xSwitchLightOnOff := "SF0046"; #fbLoadingBoom2.stInControl.xBtnBoomActive := "SF0055"; #fbLoadingBoom2.stInControl.xBtnReset := "SF0054" OR "SF0002" OR "IBN".xQuit; //sf0002 nur provisorisch END_REGION REGION Schaltschrank #fbLoadingBoom2.stInControl.xSwitchFootManual := "SF0026"; END_REGION REGION Signale Ladeschleife #fbLoadingBoom2.stInBoom.xMotorProtection1 := "FC0074" AND "FC0076"; //Beides auf einen Eingang? #fbLoadingBoom2.stInBoom.xLimitForth := "DB_Inputs".Sensors["cInBG3345"].xDirectSensor; #fbLoadingBoom2.stInBoom.xLimitForthEmergency := "SF0053"; #fbLoadingBoom2.stInBoom.xLimitBack := "DB_Inputs".Sensors["cInBG3346"].xDirectSensor; #fbLoadingBoom2.stInBoom.xLimitBackEmergency := "SF0052"; #fbLoadingBoom2.stInBoom.xBumperOk := TRUE; END_REGION REGION Signale Fuß #fbLoadingBoom2.stInFoot.xMotorProtection := "FC0381"; #fbLoadingBoom2.stInFoot.xLimitUp := "SF0382"; #fbLoadingBoom2.stInFoot.xLimitDown := "SF0383"; END_REGION REGION Sonstiges #fbLoadingBoom2.stInSettings.tBoomInput := T#5s; #fbLoadingBoom2.stInSettings.tWheelInput := T#5s; #fbLoadingBoom2.stInSettings.tSenWaitStopper1 := T#100ms; #fbLoadingBoom2.stInSettings.tWaitAfterReleaseStopper1 := T#1200ms; #fbLoadingBoom2.stInSettings.tWaitBeforeSwitchStopper2 := T#4000ms; #fbLoadingBoom2.stInSettings.tTrailingStopper2 := T#150ms; #fbLoadingBoom2.stInTilt.wTilt := "wTiltSensorLS2"; #fbLoadingBoom2.stInTilt.xClock := "Clock_10Hz"; #fbLoadingBoom2.stInTilt.tDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.tTiltDiff; #fbLoadingBoom2.stInTilt.tZero := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.tTiltZero; #fbLoadingBoom2.stInTilt.nDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nTiltOffset; #fbLoadingBoom2.stInTilt.nZeroOk := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nTiltZero; #fbLoadingBoom2.stInTilt.nTiltComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nTiltNullen; #fbLoadingBoom2.stInTilt.xComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xTiltTeach; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xTiltTeachReq := #fbLoadingBoom2.fbTiltSensor.xOutTeachNec; #fbLoadingBoom2.stInDistance.wDistance := "wDistanceSensorLS2"; #fbLoadingBoom2.stInDistance.nStartSlow := 2510; // Format z.B. 2799 für 279,9mm #fbLoadingBoom2.stInDistance.nStartFast := 2520; #fbLoadingBoom2.stInDistance.nDistanceZero := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nDistanceZero; #fbLoadingBoom2.stInDistance.nDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nDistanceDiff; #fbLoadingBoom2.stInDistance.tDiff := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.tDistanceDiff; #fbLoadingBoom2.stInDistance.xComp := "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xDistanceTeach; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xDistanceTeachReq := #fbLoadingBoom2.fbDistanceFoot.xOutTeachNec; //Für Landsberg am Lech: nDistanceZero = 2460(246mm), nDiff = 250(25mm), tDiff //IBN // IF #fbLoadingBoom1.fbTiltSensor.nTiltComp = 0 THEN //Entsrpicht in LL ungefähr dem Hallenboden, daher soll nach reinitialisieren auch wieder dieser Wert geschrieben werden // #fbLoadingBoom1.fbTiltSensor.nTiltComp := -20; // END_IF; //IBN END_REGION END_REGION REGION CALL #fbLoadingBoom2(stInSen2mThreshold := "DB_Inputs".Sensors["cInBG0347"], stInSenJamEntr := "DB_Inputs".Sensors["cInBG0346"], stInSenJamExit1 := "DB_Inputs".Sensors["cInBG0345"], stInSenJamExit2 := "DB_Inputs".Sensors["cInBG3294"], stInSenStopper1 := "DB_Inputs".Sensors["cInBG0342"], stInSenStopper2 := "DB_Inputs".Sensors["cInBG0343"], xInMachineRunning := "DB_MachineGlobal".stStateMainOF1.xRunning, xInTrolleyInSep := #TRO109.nState >= 2500 AND #TRO109.xReleaseTrolleySep1, //to do mit welcehm Signal oder welchem Wert hier gehandhabt wird xInSafety := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q AND NOT "DB_InterfaceSafety".stFromSafety.EStopMainOF1.AckReq, // xOutLedMovement => "PF0347", xOutLight => "QA0013", xOutBoomActive => "PF0055", arInOutCarrierStopper := "DB_JamArea0108".stJam0108_2.arCarrier, arInOutCarrierExit := "DB_JamArea0108".stJam0108_3.arCarrier, stInOutCarrierExit := "DB_JamArea0108".stJam0108_3.stData, xOutStopperState => "DB_GLOB_StopperState".xStopperLoadingBoom2); "PF0347" := #fbLoadingBoom2.xOutLedMovement OR "SF0003"; END_REGION REGION Ausgänge "MB0342" := #fbLoadingBoom2.stOutStopper.xStopper1Clamp; //prüfen "MB0344" := #fbLoadingBoom2.stOutStopper.xStopper1Finger; //prüfen "MB0343" := #fbLoadingBoom2.stOutStopper.xStopper2; "QA0075" := #fbLoadingBoom2.stOutBoom.xBoomForth1; "QA0077" := #fbLoadingBoom2.stOutBoom.xBoomForth2; "MA0074" := #fbLoadingBoom2.stOutBoom.xBoomBack1; "MA0076" := #fbLoadingBoom2.stOutBoom.xBoomBack2; "DQ0382" := #fbLoadingBoom2.stOutFoot.xFootUp; "DQ0383" := #fbLoadingBoom2.stOutFoot.xFootDown; "DQ0384" := #fbLoadingBoom2.stOutFoot.xFootSpeed1; END_REGION "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xBoomActive := #fbLoadingBoom2.xOutBoomActive; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xMovement := #fbLoadingBoom2.xOutLedMovement; IF #fbLoadingBoom2.fbWorkSation.nActiveStopperNo = 1 THEN "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xLoadingPos := TRUE; ELSIF #fbLoadingBoom2.fbWorkSation.nActiveStopperNo = 2 THEN "DB_Interface_HMI".stLoadingBoom.stDataBoom2.xLoadingPos := FALSE; END_IF; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nPosition.%X0 := #fbLoadingBoom2.stInBoom.xLimitBackEmergency; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nPosition.%X1 := #fbLoadingBoom2.stInBoom.xLimitBack; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nPosition.%X2 := NOT #fbLoadingBoom2.xAbove2m; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nPosition.%X3 := #fbLoadingBoom2.stInBoom.xLimitForth; "DB_Interface_HMI".stLoadingBoom.stDataBoom2.nPosition.%X4 := #fbLoadingBoom2.stInBoom.xLimitForthEmergency; END_REGION REGION Empty Carrier Buffer REGION Buffer Entscheidung IF #TRO101.xOutFull AND #TRO102.xOutFull THEN #TRO101.xInPause := TRUE; #TRO102.xInPause := TRUE; ELSIF #TRO101.nOutFillLevel > #TRO102.nOutFillLevel THEN #TRO101.xInPause := TRUE;//true #TRO102.xInPause := FALSE; ELSE #TRO101.xInPause := FALSE; #TRO102.xInPause := FALSE; END_IF; END_REGION REGION TRO101 (Empty Buffer rechts) REGION TRO 101_IN(1Sep) #TRO101_IN.stInSeparator1.Settings.nSeparatorNo := 999; #TRO101_IN.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO101_IN.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO101_IN.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO101_IN.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO101_IN.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO101_IN.stInSeparator1.Settings.xPluggedNullBT := FALSE; // #TRO101_IN.stInSeparator1.Settings.xPluggedJam := TRUE; //siehe weiter unten #TRO101_IN.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO101_IN.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO101_IN.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3246"]; // #TRO101_IN.stInSenJam2 := "DB_Inputs".Sensors["cInBG3245"];//siehe weiter unten #TRO101_IN.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO101_IN.stInSettings.xIsBorner := TRUE; #TRO101_IN.stInSettings.nBornerDest := "cDestInboundLS"; IF #TRO101.xOutBypass THEN #TRO101_IN.stInSeparator1.Settings.xPluggedJam := TRUE; //IBN zum Klicken #TRO101_IN.stInSenJam2 := "DB_Inputs".Sensors["cInBG3245"];//IBN #TRO101_IN(nInMainTroNo := 1000, xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, // xInCancel := "cTodoFalse", //IBN xInCarouselRun := #fbCarousel0101.xOutConveyorFullSpeed, xInRelease := #TRO101.xOutReadyToReceive OR (NOT #TRO101.xOutReadyToReceive AND NOT "DB_Inputs".Sensors["cInBG3245"].xDbncdSensor(* AND #fbEmptyBuffer101.nOutLineNr = 6 *)),//IBN stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0101".stJam0101_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0101".stJam0101_1.stData, arInOutJamExit2 := "DB_JamArea0101".stJam0101_2.arCarrier,//arTmpCarrier, stInOutJamExit2 := "DB_JamArea0101".stJam0101_2.stData, xOutStopper1 => "MB3246", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro101_IN"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO101_In); // TODO!!!!!!!!!!! ELSE #stTmpJamDataBufferEntry.Config.nCapacitySet := "DB_JamBuffer101".arLine[#TRO101.nOutLineNr].stData.Config.nCapacitySet; #stTmpJamDataBufferEntry.Status.nCount := "DB_JamBuffer101".arLine[#TRO101.nOutLineNr].stData.Status.nCount; #TRO101_IN.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO101_IN(nInMainTroNo := 1000, xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, // xInCancel := "cTodoFalse", //IBN xInCarouselRun := #fbCarousel0101.xOutConveyorFullSpeed, xInRelease := #TRO101.xOutReadyToReceive(* AND #fbEmptyBuffer101.nOutLineNr = 6 *),//IBN stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0101".stJam0101_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0101".stJam0101_1.stData, arInOutJamExit2 := "DB_JamBuffer101".arLine[#TRO101.nOutLineNr].arCarrier,//arTmpCarrier, stInOutJamExit2 := #stTmpJamDataBufferEntry, xOutStopper1 => "MB3246", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro101_IN"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO101_In); // TODO!!!!!!!!!!! END_IF; END_REGION REGION Separator Settings REGION Sep Buffer 1 #nActNo101 := 1; #TRO101.arInSep[#nActNo101].stSettings.nJamLength := 5;//"cStorage111ExitJam1"; #TRO101.arInSep[#nActNo101].stSenTrolley := "DB_Inputs".Sensors["cInBG3320"]; #TRO101.arInSep[#nActNo101].stSettings.tHandlingTime := T#200ms; #TRO101.arInSep[#nActNo101].stSettings.tTrailingTime := T#500ms; #TRO101.arInSep[#nActNo101].stSettings.xPluggedScanner := FALSE; #TRO101.arInSep[#nActNo101].stSettings.tSenFree := T#1500ms; #TRO101.arInSep[#nActNo101].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 2 #nActNo101 := 2; #TRO101.arInSep[#nActNo101].stSettings.nJamLength := 7; #TRO101.arInSep[#nActNo101].stSenTrolley := "DB_Inputs".Sensors["cInBG3321"]; #TRO101.arInSep[#nActNo101].stSettings.tHandlingTime := T#200ms; #TRO101.arInSep[#nActNo101].stSettings.tTrailingTime := T#500ms; #TRO101.arInSep[#nActNo101].stSettings.xPluggedScanner := FALSE; #TRO101.arInSep[#nActNo101].stSettings.tSenFree := T#1500ms; #TRO101.arInSep[#nActNo101].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 3 #nActNo101 := 3; #TRO101.arInSep[#nActNo101].stSettings.nJamLength := 10; #TRO101.arInSep[#nActNo101].stSenTrolley := "DB_Inputs".Sensors["cInBG3322"]; #TRO101.arInSep[#nActNo101].stSettings.tHandlingTime := T#200ms; #TRO101.arInSep[#nActNo101].stSettings.tTrailingTime := T#500ms; #TRO101.arInSep[#nActNo101].stSettings.xPluggedScanner := FALSE; #TRO101.arInSep[#nActNo101].stSettings.tSenFree := T#1500ms; #TRO101.arInSep[#nActNo101].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 4 #nActNo101 := 4; #TRO101.arInSep[#nActNo101].stSettings.nJamLength := 10; #TRO101.arInSep[#nActNo101].stSenTrolley := "DB_Inputs".Sensors["cInBG3323"]; #TRO101.arInSep[#nActNo101].stSettings.tHandlingTime := T#200ms; #TRO101.arInSep[#nActNo101].stSettings.tTrailingTime := T#500ms; #TRO101.arInSep[#nActNo101].stSettings.xPluggedScanner := FALSE; #TRO101.arInSep[#nActNo101].stSettings.tSenFree := T#1500ms; #TRO101.arInSep[#nActNo101].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 5 #nActNo101 := 5; #TRO101.arInSep[#nActNo101].stSettings.nJamLength := 10; #TRO101.arInSep[#nActNo101].stSenTrolley := "DB_Inputs".Sensors["cInBG3324"]; #TRO101.arInSep[#nActNo101].stSettings.tHandlingTime := T#200ms; #TRO101.arInSep[#nActNo101].stSettings.tTrailingTime := T#500ms; #TRO101.arInSep[#nActNo101].stSettings.xPluggedScanner := FALSE; #TRO101.arInSep[#nActNo101].stSettings.tSenFree := T#1500ms; #TRO101.arInSep[#nActNo101].stSettings.tSenWait := T#3000ms; END_REGION END_REGION REGION Jamsensoren #TRO101.arInJamSensor[1] := "DB_Inputs".Sensors["cInBG3250"]; #TRO101.arInJamSensor[2] := "DB_Inputs".Sensors["cInBG3251"]; #TRO101.arInJamSensor[3] := "DB_Inputs".Sensors["cInBG3252"]; #TRO101.arInJamSensor[4] := "DB_Inputs".Sensors["cInBG3253"]; #TRO101.arInJamSensor[5] := "DB_Inputs".Sensors["cInBG3254"]; END_REGION REGION Dummy Zielvergabe #stDummy.nBarcode := 1; #stDummy.nDestination := 0; #stDummy.bStatus.%X0 := TRUE; IF "DB_JamBuffer101".arLine[1].arCarrier[1] = #stDummy THEN "DB_JamBuffer101".arLine[1].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer101".arLine[2].arCarrier[1] = #stDummy THEN "DB_JamBuffer101".arLine[2].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer101".arLine[3].arCarrier[1] = #stDummy THEN "DB_JamBuffer101".arLine[3].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer101".arLine[4].arCarrier[1] = #stDummy THEN "DB_JamBuffer101".arLine[4].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer101".arLine[5].arCarrier[1] = #stDummy THEN "DB_JamBuffer101".arLine[5].arCarrier[1].nDestination := 10; END_IF; END_REGION REGION TRO 101 CALL #TRO101.xStart := "DB_TRO_TEST".TRO101Start OR ("DB_JamArea0107".stJam0107_1.stData.Status.nCount < ("DB_JamArea0107".stJam0107_1.stData.Config.nCapacitySet * 75 / 100)); //NUR FÜR TEST #TRO101.stInSettings.nNoOfLines := 5; #TRO101(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO101.TroIn, stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO101.TroOut, nInBufferNr := "cMainTro101", xInBufferReq := TRUE,//IBN xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInConveyorRunOut := #fbCarousel0102.xOutConveyorFullSpeed, xInBufferRelease := "DB_TRO_TEST".TRO101 AND "DB_JamArea0107".stJam0107_1.stData.Status.nCount < ("cJam0107_1" / 2), stInSenJamExit := "DB_Inputs".Sensors["cInBG3330"], nOutActNo => #nActNo101, stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, arInOutStorageLines := "DB_JamBuffer101".arLine, arInOutJamExit := "DB_JamArea0102".stJam0102_2.arCarrier, stInOutJamExit := "DB_JamArea0102".stJam0102_2.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro101"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO101); "MB3250" := #TRO101.arOutSwitchLine[1]; "MB3251" := #TRO101.arOutSwitchLine[2]; "MB3252" := #TRO101.arOutSwitchLine[3]; "MB3253" := #TRO101.arOutSwitchLine[4]; "MB3254" := #TRO101.arOutSwitchLine[5]; "MB3320" := #TRO101.arOutSeparatorStore[1]; "MB3321" := #TRO101.arOutSeparatorStore[2]; "MB3322" := #TRO101.arOutSeparatorStore[3]; "MB3323" := #TRO101.arOutSeparatorStore[4]; "MB3324" := #TRO101.arOutSeparatorStore[5]; END_REGION END_REGION REGION TRO102 (Empty Buffer links) REGION TRO 102_IN(1Sep) #stTmpJamDataBufferEntry.Config.nCapacitySet := "DB_JamBuffer102".arLine[#TRO102.nOutLineNr].stData.Config.nCapacitySet; #stTmpJamDataBufferEntry.Status.nCount := "DB_JamBuffer102".arLine[#TRO102.nOutLineNr].stData.Status.nCount; #TRO102_IN.stInSeparator1.Settings.nSeparatorNo := 999; #TRO102_IN.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO102_IN.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO102_IN.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO102_IN.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO102_IN.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO102_IN.stInSeparator1.Settings.xPluggedNullBT := FALSE; // #TRO102_IN.stInSeparator1.Settings.xPluggedJam := TRUE; //hat nicht #TRO102_IN.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO102_IN.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO102_IN.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3257"]; // #TRO102_IN.stInSenJam2 := "DB_Inputs".Sensors["cInBG3245"]; //hat nicht #TRO102_IN.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO102_IN.stInSettings.xIsBorner := TRUE; #TRO102_IN.stInSettings.nBornerDest := "cDestInboundLS"; #TRO102_IN(nInMainTroNo := 1000, xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, // xInCancel := "cTodoFalse", //IBN xInCarouselRun := #fbCarousel0101.xOutConveyorFullSpeed, xInRelease := #TRO102.xOutReadyToReceive,//IBN stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0101".stJam0101_2.arCarrier,//"DB_JamBuffer101".arLine[6].arCarrier, stInOutJamEntr1 := "DB_JamArea0101".stJam0101_2.stData, arInOutJamExit2 := "DB_JamBuffer102".arLine[#TRO102.nOutLineNr].arCarrier,//arTmpCarrier, stInOutJamExit2 := #stTmpJamDataBufferEntry, xOutStopper1 => "MB3257", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro102_IN"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO102_In); // TODO!!!!!!!!!!! END_REGION REGION Separator Settings REGION Sep Buffer 1 #nActNo102 := 1; #TRO102.arInSep[#nActNo102].stSettings.nJamLength := 5;//"cStorage111ExitJam1"; #TRO102.arInSep[#nActNo102].stSenTrolley := "DB_Inputs".Sensors["cInBG3310"]; #TRO102.arInSep[#nActNo102].stSettings.tHandlingTime := T#200ms; #TRO102.arInSep[#nActNo102].stSettings.tTrailingTime := T#500ms; #TRO102.arInSep[#nActNo102].stSettings.xPluggedScanner := FALSE; #TRO102.arInSep[#nActNo102].stSettings.tSenFree := T#1500ms; #TRO102.arInSep[#nActNo102].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 2 #nActNo102 := 2; #TRO102.arInSep[#nActNo102].stSettings.nJamLength := 7; #TRO102.arInSep[#nActNo102].stSenTrolley := "DB_Inputs".Sensors["cInBG3311"]; #TRO102.arInSep[#nActNo102].stSettings.tHandlingTime := T#200ms; #TRO102.arInSep[#nActNo102].stSettings.tTrailingTime := T#500ms; #TRO102.arInSep[#nActNo102].stSettings.xPluggedScanner := FALSE; #TRO102.arInSep[#nActNo102].stSettings.tSenFree := T#1500ms; #TRO102.arInSep[#nActNo102].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 3 #nActNo102 := 3; #TRO102.arInSep[#nActNo102].stSettings.nJamLength := 9; #TRO102.arInSep[#nActNo102].stSenTrolley := "DB_Inputs".Sensors["cInBG3312"]; #TRO102.arInSep[#nActNo102].stSettings.tHandlingTime := T#200ms; #TRO102.arInSep[#nActNo102].stSettings.tTrailingTime := T#500ms; #TRO102.arInSep[#nActNo102].stSettings.xPluggedScanner := FALSE; #TRO102.arInSep[#nActNo102].stSettings.tSenFree := T#1500ms; #TRO102.arInSep[#nActNo102].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 4 #nActNo102 := 4; #TRO102.arInSep[#nActNo102].stSettings.nJamLength := 10; #TRO102.arInSep[#nActNo102].stSenTrolley := "DB_Inputs".Sensors["cInBG3313"]; #TRO102.arInSep[#nActNo102].stSettings.tHandlingTime := T#200ms; #TRO102.arInSep[#nActNo102].stSettings.tTrailingTime := T#500ms; #TRO102.arInSep[#nActNo102].stSettings.xPluggedScanner := FALSE; #TRO102.arInSep[#nActNo102].stSettings.tSenFree := T#1500ms; #TRO102.arInSep[#nActNo102].stSettings.tSenWait := T#3000ms; END_REGION REGION Sep Buffer 5 #nActNo102 := 5; #TRO102.arInSep[#nActNo102].stSettings.nJamLength := 10; #TRO102.arInSep[#nActNo102].stSenTrolley := "DB_Inputs".Sensors["cInBG3314"]; #TRO102.arInSep[#nActNo102].stSettings.tHandlingTime := T#200ms; #TRO102.arInSep[#nActNo102].stSettings.tTrailingTime := T#500ms; #TRO102.arInSep[#nActNo102].stSettings.xPluggedScanner := FALSE; #TRO102.arInSep[#nActNo102].stSettings.tSenFree := T#1500ms; #TRO102.arInSep[#nActNo102].stSettings.tSenWait := T#3000ms; END_REGION END_REGION REGION Jamsensoren #TRO102.arInJamSensor[1] := "DB_Inputs".Sensors["cInBG3260"]; #TRO102.arInJamSensor[2] := "DB_Inputs".Sensors["cInBG3261"]; #TRO102.arInJamSensor[3] := "DB_Inputs".Sensors["cInBG3262"]; #TRO102.arInJamSensor[4] := "DB_Inputs".Sensors["cInBG3263"]; #TRO102.arInJamSensor[5] := "DB_Inputs".Sensors["cInBG3264"]; END_REGION REGION Dummy Zielvergabe #stDummy.nBarcode := 1; #stDummy.nDestination := 0; #stDummy.bStatus.%X0 := TRUE; IF "DB_JamBuffer102".arLine[1].arCarrier[1] = #stDummy THEN "DB_JamBuffer102".arLine[1].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer102".arLine[2].arCarrier[1] = #stDummy THEN "DB_JamBuffer102".arLine[2].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer102".arLine[3].arCarrier[1] = #stDummy THEN "DB_JamBuffer102".arLine[3].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer102".arLine[4].arCarrier[1] = #stDummy THEN "DB_JamBuffer102".arLine[4].arCarrier[1].nDestination := 10; END_IF; IF "DB_JamBuffer102".arLine[5].arCarrier[1] = #stDummy THEN "DB_JamBuffer102".arLine[5].arCarrier[1].nDestination := 10; END_IF; END_REGION REGION TRO 102 CALL #TRO102.xStart := "DB_TRO_TEST".TRO102Start OR ("DB_JamArea0103".stJam0103_1.stData.Status.nCount < ("DB_JamArea0103".stJam0103_1.stData.Config.nCapacitySet * 75 / 100)); //NUR FÜR TEST #TRO102.stInSettings.nNoOfLines := 5; #TRO102(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO102.TroIn, stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO102.TroOut, nInBufferNr := "cMainTro102", xInBufferReq := TRUE,//IBN xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInConveyorRunOut := #fbCarousel0102.xOutConveyorFullSpeed, xInBufferRelease := "DB_TRO_TEST".TRO102 AND "DB_JamArea0103".stJam0103_1.stData.Status.nCount < ("cJam0103_1" / 2), stInSenJamExit := "DB_Inputs".Sensors["cInBG3304"], nOutActNo => #nActNo102, stInOutControlUnitCabinet := #stInOutControlUnitCabinetOF1, arInOutStorageLines := "DB_JamBuffer102".arLine, arInOutJamExit := "DB_JamArea0102".stJam0102_1.arCarrier, stInOutJamExit := "DB_JamArea0102".stJam0102_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro102"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO102); "MB3260" := #TRO102.arOutSwitchLine[1]; "MB3261" := #TRO102.arOutSwitchLine[2]; "MB3262" := #TRO102.arOutSwitchLine[3]; "MB3263" := #TRO102.arOutSwitchLine[4]; "MB3264" := TRUE;//#fbEmptyBuffer101.arOutSwitchLine[5]; "MB3310" := #TRO102.arOutSeparatorStore[1]; "MB3311" := #TRO102.arOutSeparatorStore[2]; "MB3312" := #TRO102.arOutSeparatorStore[3]; "MB3313" := #TRO102.arOutSeparatorStore[4]; "MB3314" := #TRO102.arOutSeparatorStore[5]; END_REGION END_REGION END_REGION REGION TRO REGION TRO 100 (1Sep) #TRO100.stInSeparator1.Settings.nSeparatorNo := "cSep100.1"; #TRO100.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO100.stInSeparator1.Settings.tTrailingTime := t#600ms; #TRO100.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO100.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO100.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO100.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO100.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO100.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3242"]; #TRO100.stInSenJam2 := "DB_Inputs".Sensors["cInBG3243"]; #TRO100.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO100.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO100.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO100(nInMainTroNo := "cMainTro100", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun := #fbCarousel0101.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO100, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0100".stJam0100_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0100".stJam0100_1.stData, arInOutJamExit2 := "DB_JamArea0101".stJam0101_1.arCarrier, stInOutJamExit2 := "DB_JamArea0101".stJam0101_1.stData, xOutStopper1 => "MB3242", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro100"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO100); END_REGION REGION TRO 103 (1Sep) #TRO103.stInSeparator1.Settings.nSeparatorNo := "cSep103.1"; #TRO103.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO103.stInSeparator1.Settings.tTrailingTime := t#500ms; #TRO103.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO103.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO103.stInSeparator1.Settings.tSenWait := T#3000ms; #TRO103.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO103.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO103.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO103.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO103.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3271"]; #TRO103.stInSenJam2 := "DB_Inputs".Sensors["cInBG0286"]; #TRO103.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO103(nInMainTroNo := "cMainTro103", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun := #fbCarousel0104.xOutConveyorFullSpeed AND #fbConveyor0103.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO103, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0103".stJam0103_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0103".stJam0103_1.stData, arInOutJamExit2 := "DB_JamArea0104".stJam0104_1.arCarrier, stInOutJamExit2 := "DB_JamArea0104".stJam0104_1.stData, xOutStopper1 => "MB3271", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro103"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO103); END_REGION REGION TRO 104 (1Sep)+Scanner #TRO104.stInSeparator1.Settings.nSeparatorNo := "cSep104.1"; #TRO104.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO104.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO104.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO104.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO104.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO104.stInSeparator1.Settings.xPluggedNullBT := FALSE; #TRO104.stInSeparator1.Settings.xPluggedJam := TRUE; //? #TRO104.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO104.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO104.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG0280"]; #TRO104.stInSenJam2 := "DB_Inputs".Sensors["cInBG0281"]; //sinnvoll? BG0281 gibt es nicht mehr #TRO104.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO104.stInBarcodeReader.Settings.tTimeout := T#5s; #arCognexInterface["cScannerBX1103"].xInCamTriggerReady := "bx1103-TriggerReady"; #arCognexInterface["cScannerBX1103"].xInCamTriggerAck := "bx1103-TriggerAck"; #arCognexInterface["cScannerBX1103"].xInCamResultsAvailable := "bx1103-Results Available"; #arCognexInterface["cScannerBX1103"].xInCamGeneralFault := "bx1103-General Fault"; #arCognexInterface["cScannerBX1103"].hwInCamInspectionResults := "BX1103~Ergebnisse_–_64_Bytes_1"; #TRO104.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO104(nInMainTroNo := "cMainTro104", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInRelease := #fbLoadingBoom1.xOutReady AND #fbLoadingBoom1.stOutStopper.xStopperReceive, //Freigabe xInCarouselRun := #fbCarousel0104.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1103"], arInOutJamEntr1 := "DB_JamArea0104".stJam0104_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0104".stJam0104_1.stData, arInOutJamExit2 := "DB_JamArea0104".stJam0104_2.arCarrier, stInOutJamExit2 := "DB_JamArea0104".stJam0104_2.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO104, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro104"], xOutStopper1 => "MB0280"); "bx1103-TriggerEnable" := #arCognexInterface["cScannerBX1103"].xOutCamTriggerEnable; "bx1103-Trigger" := #arCognexInterface["cScannerBX1103"].xOutCamTrigger; "bx1103-ResultsAck" := #arCognexInterface["cScannerBX1103"].xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO104.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO104.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0104".stJam0104_1.arCarrier[1]); END_REGION END_REGION REGION TRO 105 (1Sep)+Scanner #TRO105.stInSeparator1.Settings.nSeparatorNo := "cSep105.1"; #TRO105.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO105.stInSeparator1.Settings.tTrailingTime := t#600ms; #TRO105.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO105.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO105.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO105.stInSeparator1.Settings.xPluggedNullBT := FALSE; #TRO105.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO105.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO105.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO105.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3280"]; #TRO105.stInSenJam2 := "DB_Inputs".Sensors["cInBG3281"]; #TRO105.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO105.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO105.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO105.stInBarcodeReader.Settings.tTimeout := T#3000ms; #arCognexInterface["cScannerBX1104"].xInCamTriggerReady := "bx1104-TriggerReady"; #arCognexInterface["cScannerBX1104"].xInCamTriggerAck := "bx1104-TriggerAck"; #arCognexInterface["cScannerBX1104"].xInCamResultsAvailable := "bx1104-Results Available"; #arCognexInterface["cScannerBX1104"].xInCamGeneralFault := "bx1104-General Fault"; #arCognexInterface["cScannerBX1104"].hwInCamInspectionResults := "BX1104~Ergebnisse_–_64_Bytes_1"; //SSCC #stCognexIntfTro105.xInCamTriggerReady := "bx1107-TriggerReady"; #stCognexIntfTro105.xInCamTriggerAck := "bx1107-TriggerAck"; #stCognexIntfTro105.xInCamResultsAvailable := "bx1107-Results Available"; #stCognexIntfTro105.xInCamGeneralFault := "bx1107-General Fault"; #stCognexIntfTro105.hwInCamInspectionResults := "BX1107~Ergebnisse_–_64_Bytes_1"; #TRO105.stInBarcodeReaderSSCC.Settings.xActivateCheckASCI := TRUE; #TRO105.stInBarcodeReaderSSCC.Settings.tTimeout := T#3s; #TRO105.stInBarcodeReaderSSCC.xInPluggedSSCC := TRUE; #TRO105.stInBarcodeReaderSSCC.stSenEndMeasurement := "DB_Inputs".Sensors["cInBG3281"]; #TRO105.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO105(nInMainTroNo := "cMainTro105", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInCarouselRun := TRUE,// Gefälle xInRelease := "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive OR "IBN".xFahrenOhneTcpPartner, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1104"], stInOutCognexInterfaceSSCC := #stCognexIntfTro105, arInOutJamEntr1 := "DB_JamArea0104".stJam0104_3.arCarrier, stInOutJamEntr1 := "DB_JamArea0104".stJam0104_3.stData, arInOutJamExit2 := "DB_JamArea0106".stJam0106_2.arCarrier, stInOutJamExit2 := "DB_JamArea0106".stJam0106_2.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO105, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro105"], xOutStopper1 => "MB3280"); "bx1104-TriggerEnable" := #arCognexInterface["cScannerBX1104"].xOutCamTriggerEnable; "bx1104-Trigger" := #arCognexInterface["cScannerBX1104"].xOutCamTrigger; "bx1104-ResultsAck" := #arCognexInterface["cScannerBX1104"].xOutCamResultsAck; //SSCC "bx1107-TriggerEnable" := #stCognexIntfTro105.xOutCamTriggerEnable; "bx1107-Trigger" := #stCognexIntfTro105.xOutCamTrigger; "bx1107-ResultsAck" := #stCognexIntfTro105.xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO105.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO105.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0104".stJam0104_3.arCarrier[1]); END_REGION REGION Write SSCC result TO HMI Interface IF #TRO105.xOutNewScanSSCC THEN "DB_Interface_HMI".stSSCC.SSCC1107.stLastMeasurement.nBarcodeTrolley := "DB_JamArea0104".stJam0104_3.arCarrier[1].nBarcode; "DB_Interface_HMI".stSSCC.SSCC1107.stLastMeasurement.sSSCC := LINT_TO_STRING(#TRO105.nOutScanResultSSCC); END_IF; END_REGION REGION Send DReqM to Fortna WCS (SSCC) // Wenn SSCC Read abgeschlossen, dann Telegram mit spezifizierten Daten generieren und in TCP Sende-FIFO schieben IF #TRO105.xOutNewScanSSCC AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDReqM"(sInPLCID := "cPLCID", xInSSCCReq := TRUE, xInLengthReq := FALSE, xInDockDoorReq := TRUE, xInLaneStatusReq := FALSE, nInBarcode := "DB_JamArea0104".stJam0104_3.arCarrier[1].nBarcode, sInSSCC := #TRO105.fbBarcodeReaderSSCC.sOutBarcode,////DELETE(IN := LINT_TO_STRING(#TRO105.nOutScanResultSSCC), L := 1, P := 1), sInDecisionPoint := "cDP_DOCK_01", sInDockDoor := '"1"', sInLengthInfo := '', arInLaneStatus := #tmpPlaceHolderLaneStatus, nInLaneCnt := 0, FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; IF "IBN".xTestTelegramSend THEN "FC_Send_GOHDReqM"(sInPLCID := "cPLCID", xInSSCCReq := TRUE, xInLengthReq := FALSE, xInDockDoorReq := TRUE, xInLaneStatusReq := FALSE, nInBarcode := 22343390,//"DB_JamArea0104".stJam0104_3.arCarrier[1].nBarcode, sInSSCC := 'Test',//DELETE(IN := LINT_TO_STRING(#TRO105.nOutScanResultSSCC), L := 1, P := 1), sInDecisionPoint := "cDP_DOCK_01", sInDockDoor := '"1"', sInLengthInfo := '', arInLaneStatus := #tmpPlaceHolderLaneStatus, nInLaneCnt := 0, FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); "IBN".xTestTelegramSend := FALSE; END_IF; END_REGION REGION Send DUM to Fortna WCS IF #TRO105.xOutBookedDir1 AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDUM"(sInPLCID := "cPLCID", nInBarcode := #TRO105.stOutLastCarrier.nBarcode, sInDecisionPoint := "cDP_DOCK_01", sInActionTaken := "cSTRAIGHT", nReasonCode := "cSUCCESS", FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; END_REGION END_REGION REGION TRO 106 (1Sep) #TRO106.stInSeparator1.Settings.nSeparatorNo := "cSep106.1"; #TRO106.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO106.stInSeparator1.Settings.tTrailingTime := t#600ms; #TRO106.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO106.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO106.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO106.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO106.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO106.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3315"]; #TRO106.stInSenJam2 := "DB_Inputs".Sensors["cInBG3330"]; #TRO106.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO106.stInSeparator1.Settings.tSenWait := T#4000ms; IF "DB_JamArea0106".stJam0106_2.arCarrier[1].bStatus.%X0 THEN "DB_JamArea0106".stJam0106_2.arCarrier[1].nDestination := 100; // NUR ZUM TESTEN END_IF; #TRO106(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO106.TroIn, stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO106.TroOut, nInMainTroNo := "cMainTro106", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO106, xInCarouselRun := #fbCarousel0102.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0106".stJam0106_2.arCarrier, stInOutJamEntr1 := "DB_JamArea0106".stJam0106_2.stData, arInOutJamExit2 := "DB_JamArea0102".stJam0102_2.arCarrier, stInOutJamExit2 := "DB_JamArea0102".stJam0102_2.stData, xOutStopper1 => "MB3315", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro106"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO106); END_REGION REGION TRO 107(1Sep1Swi) #TRO107.stInSeparator1.Settings.nSeparatorNo := "cSep107.1"; #TRO107.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO107.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO107.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO107.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO107.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO107.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO107.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO107.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3306"]; #TRO107.stInSenJam2 := "DB_Inputs".Sensors["cInBG3305"]; #TRO107.stInSenJam3 := "DB_Inputs".Sensors["cInBG3330"]; #TRO107.stInSwitch1.Settings.nSwitchNo := "cSwi107.1"; #TRO107.stInSwitch1.Settings.xPluggedExSen3 := FALSE; #TRO107.stInSwitch1.Settings.xPluggedExSen4 := FALSE; #TRO107.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI // "DB_JamArea0102".stJam0102_1.arCarrier[1].nDestination := 100; // NUR ZUM TESTEN #TRO107.stInSettings.xPrioDir2 := TRUE; #TRO107(stInPriorityManagerDir2 := "DB_Prozessdaten".stPriorityManager.udt_TRO107.TroIn, stOutPriorityManagerDir2 => "DB_Prozessdaten".stPriorityManager.udt_TRO107.TroOut, nInMainTroNo := "cMainTro107", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun1 := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := TRUE, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0102".stJam0102_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_1.stData, arInOutJamExit2 := "DB_JamArea0103".stJam0103_1.arCarrier, stInOutJamExit2 := "DB_JamArea0103".stJam0103_1.stData, arInOutJamExit3 := "DB_JamArea0102".stJam0102_2.arCarrier, stInOutJamExit3 := "DB_JamArea0102".stJam0102_2.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO107, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro107"], xOutStopper1 => "MB3306", xOutSw1ExTo3 => "MB3304"); REGION Direction "FC_Direction"(nInSwitchNo := "cSwi107.1", nOutDirection => #TRO107.nInDirection, InOutCarrier := "DB_JamArea0102".stJam0102_1.arCarrier[1]); END_REGION END_REGION REGION TRO 108 (1Sep) #TRO108.stInSeparator1.Settings.nSeparatorNo := "cSep108.1"; #TRO108.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO108.stInSeparator1.Settings.tTrailingTime := t#500ms; #TRO108.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO108.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO108.stInSeparator1.Settings.tSenWait := T#3000ms; #TRO108.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO108.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO108.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO108.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO108.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3283"]; #TRO108.stInSenJam2 := "DB_Inputs".Sensors["cInBG0346"]; #TRO108.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO108(nInMainTroNo := "cMainTro108", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, // xInCancel := "cTodoFalse",//IBN xInCarouselRun := #fbCarousel0108.xOutConveyorFullSpeed AND #fbConveyor0107.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO108, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0107".stJam0107_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0107".stJam0107_1.stData, arInOutJamExit2 := "DB_JamArea0108".stJam0108_1.arCarrier, stInOutJamExit2 := "DB_JamArea0108".stJam0108_1.stData, xOutStopper1 => "MB3283", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro108"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO108); END_REGION REGION TRO 109 (1Sep)+Scanner #TRO109.stInSeparator1.Settings.nSeparatorNo := "cSep109.1"; #TRO109.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO109.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO109.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO109.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO109.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO109.stInSeparator1.Settings.xPluggedNullBT := FALSE; #TRO109.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO109.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO109.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO109.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG0340"]; #TRO109.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO109.stInBarcodeReader.Settings.tTimeout := T#5s; #arCognexInterface["cScannerBX1105"].xInCamTriggerReady := "bx1105-TriggerReady"; #arCognexInterface["cScannerBX1105"].xInCamTriggerAck := "bx1105-TriggerAck"; #arCognexInterface["cScannerBX1105"].xInCamResultsAvailable := "bx1105-Results Available"; #arCognexInterface["cScannerBX1105"].xInCamGeneralFault := "bx1105-General Fault"; #arCognexInterface["cScannerBX1105"].hwInCamInspectionResults := "BX1105~Ergebnisse_–_64_Bytes_1"; #TRO109.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO109(nInMainTroNo := "cMainTro109", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO109, xInCarouselRun := #fbCarousel0108.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1105"], arInOutJamEntr1 := "DB_JamArea0108".stJam0108_1.arCarrier, stInOutJamEntr1 := "DB_JamArea0108".stJam0108_1.stData, arInOutJamExit2 := "DB_JamArea0108".stJam0108_2.arCarrier, stInOutJamExit2 := "DB_JamArea0108".stJam0108_2.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO109, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro109"], xOutStopper1 => "MB0340"); "bx1105-TriggerEnable" := #arCognexInterface["cScannerBX1105"].xOutCamTriggerEnable; "bx1105-Trigger" := #arCognexInterface["cScannerBX1105"].xOutCamTrigger; "bx1105-ResultsAck" := #arCognexInterface["cScannerBX1105"].xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO109.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO109.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0108".stJam0108_1.arCarrier[1]); END_REGION END_REGION REGION TRO 110 (1Sep)+Scanner #TRO110.stInSeparator1.Settings.nSeparatorNo := "cSep110.1"; #TRO110.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO110.stInSeparator1.Settings.tTrailingTime := t#600ms; #TRO110.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO110.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO110.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO110.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO110.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO110.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3295"]; #TRO110.stInSenJam2 := "DB_Inputs".Sensors["cInBG3296"]; #TRO110.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO110.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO110.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO110.stInBarcodeReader.Settings.tTimeout := T#3000ms; #arCognexInterface["cScannerBX1106"].xInCamTriggerReady := "bx1106-TriggerReady"; #arCognexInterface["cScannerBX1106"].xInCamTriggerAck := "bx1106-TriggerAck"; #arCognexInterface["cScannerBX1106"].xInCamResultsAvailable := "bx1106-Results Available"; #arCognexInterface["cScannerBX1106"].xInCamGeneralFault := "bx1106-General Fault"; #arCognexInterface["cScannerBX1106"].hwInCamInspectionResults := "BX1106~Ergebnisse_–_64_Bytes_1"; // SSCC #stCognexIntfTro110.xInCamTriggerReady := "bx1108-TriggerReady"; #stCognexIntfTro110.xInCamTriggerAck := "bx1108-TriggerAck"; #stCognexIntfTro110.xInCamResultsAvailable := "bx1108-Results Available"; #stCognexIntfTro110.xInCamGeneralFault := "bx1108-General Fault"; #stCognexIntfTro110.hwInCamInspectionResults := "BX1108~Ergebnisse_–_64_Bytes_1"; #TRO110.stInBarcodeReaderSSCC.Settings.xActivateCheckASCI := TRUE; #TRO110.stInBarcodeReaderSSCC.Settings.tTimeout := T#3s; #TRO110.stInBarcodeReaderSSCC.xInPluggedSSCC := TRUE; #TRO110.stInBarcodeReaderSSCC.stSenEndMeasurement := "DB_Inputs".Sensors["cInBG3296"]; #TRO110.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO110(nInMainTroNo := "cMainTro110", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInCarouselRun := TRUE, //Gefälle xInRelease := "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive OR "IBN".xFahrenOhneTcpPartner, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1106"], stInOutCognexInterfaceSSCC := #stCognexIntfTro110, arInOutJamEntr1 := "DB_JamArea0108".stJam0108_3.arCarrier, stInOutJamEntr1 := "DB_JamArea0108".stJam0108_3.stData, arInOutJamExit2 := "DB_JamArea0110".stJam0110_2.arCarrier, stInOutJamExit2 := "DB_JamArea0110".stJam0110_2.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO110, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro110"], xOutStopper1 => "MB3295"); "bx1106-TriggerEnable" := #arCognexInterface["cScannerBX1106"].xOutCamTriggerEnable; "bx1106-Trigger" := #arCognexInterface["cScannerBX1106"].xOutCamTrigger; "bx1106-ResultsAck" := #arCognexInterface["cScannerBX1106"].xOutCamResultsAck; //SSCC "bx1108-TriggerEnable" := #stCognexIntfTro110.xOutCamTriggerEnable; "bx1108-Trigger" := #stCognexIntfTro110.xOutCamTrigger; "bx1108-ResultsAck" := #stCognexIntfTro110.xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO110.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO110.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0108".stJam0108_3.arCarrier[1]); END_REGION REGION Write SSCC result TO HMI Interface IF #TRO110.xOutNewScanSSCC THEN "DB_Interface_HMI".stSSCC.SSCC1108.stLastMeasurement.nBarcodeTrolley := "DB_JamArea0108".stJam0108_3.arCarrier[1].nBarcode; "DB_Interface_HMI".stSSCC.SSCC1108.stLastMeasurement.sSSCC := DELETE(IN := LINT_TO_STRING(#TRO110.nOutScanResultSSCC), L := 1, P := 1); END_IF; END_REGION REGION Send DReqM to Fortna WCS (SSCC) // Wenn SSCC Read abgeschlossen, dann Telegram mit spezifizierten Daten generieren und in TCP Sende-FIFO schieben IF #TRO110.xOutNewScanSSCC AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDReqM"(sInPLCID := "cPLCID", xInSSCCReq := TRUE, xInLengthReq := FALSE, xInDockDoorReq := TRUE, xInLaneStatusReq := FALSE, nInBarcode := "DB_JamArea0108".stJam0108_3.arCarrier[1].nBarcode, sInSSCC := #TRO110.fbBarcodeReaderSSCC.sOutBarcode,//DELETE(IN := LINT_TO_STRING(#TRO110.nOutScanResultSSCC), L := 1, P := 1), sInDecisionPoint := "cDP_DOCK_02", sInDockDoor := '"2"', sInLengthInfo := '', arInLaneStatus := #tmpPlaceHolderLaneStatus, nInLaneCnt := 0, FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; END_REGION REGION Send DUM to Fortna WCS IF #TRO110.xOutBookedDir1 AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDUM"(sInPLCID := "cPLCID", nInBarcode := #TRO110.stOutLastCarrier.nBarcode, sInDecisionPoint := "cDP_DOCK_02", sInActionTaken := "cSTRAIGHT", nReasonCode := "cSUCCESS", FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; END_REGION END_REGION REGION TRO 111 (1Sep) #TRO111.stInSeparator1.Settings.nSeparatorNo := "cSep111.1"; #TRO111.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO111.stInSeparator1.Settings.tTrailingTime := t#600ms; #TRO111.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO111.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO111.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO111.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO111.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO111.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3325"]; #TRO111.stInSenJam2 := "DB_Inputs".Sensors["cInBG3334"]; #TRO111.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO111.stInSeparator1.Settings.tSenWait := T#4000ms; IF "DB_JamArea0110".stJam0110_2.arCarrier[1].bStatus.%X0 THEN "DB_JamArea0110".stJam0110_2.arCarrier[1].nDestination := 100; // NUR ZUM TESTEN END_IF; #TRO111(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO111.TroIn, stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO111.TroOut, nInMainTroNo := "cMainTro111", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := TRUE, xInCarouselRun := #fbCarousel0102.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0110".stJam0110_2.arCarrier, stInOutJamEntr1 := "DB_JamArea0110".stJam0110_2.stData, arInOutJamExit2 := "DB_JamArea0102".stJam0102_3.arCarrier, stInOutJamExit2 := "DB_JamArea0102".stJam0102_3.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO111, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro111"], xOutStopper1 => "MB3325"); END_REGION REGION TRO 112 (1Sep1Swi) #TRO112.stInSeparator1.Settings.nSeparatorNo := "cSep112.1"; #TRO112.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO112.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO112.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO112.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO112.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO112.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO112.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO112.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3332"]; #TRO112.stInSenJam2 := "DB_Inputs".Sensors["cInBG3331"]; #TRO112.stInSenJam3 := "DB_Inputs".Sensors["cInBG3334"]; #TRO112.stInSwitch1.Settings.nSwitchNo := "cSwi112.1"; #TRO112.stInSwitch1.Settings.xPluggedExSen3 := FALSE; #TRO112.stInSwitch1.Settings.xPluggedExSen4 := FALSE; #TRO112.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI // "DB_JamArea0102".stJam0102_2.arCarrier[1].nDestination := 100; // NUR ZUM TESTEN #TRO112.stInSettings.xPrioDir2 := TRUE; #TRO112(stInPriorityManagerDir2 := "DB_Prozessdaten".stPriorityManager.udt_TRO112.TroIn, stOutPriorityManagerDir2 => "DB_Prozessdaten".stPriorityManager.udt_TRO112.TroOut, nInMainTroNo := "cMainTro112", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun1 := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := TRUE, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0102".stJam0102_2.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_2.stData, arInOutJamExit2 := "DB_JamArea0107".stJam0107_1.arCarrier, stInOutJamExit2 := "DB_JamArea0107".stJam0107_1.stData, arInOutJamExit3 := "DB_JamArea0102".stJam0102_3.arCarrier, stInOutJamExit3 := "DB_JamArea0102".stJam0102_3.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO112, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro112"], xOutStopper1 => "MB3332", xOutSw1ExTo3 => "MB3330"); REGION Direction "FC_Direction"(nInSwitchNo := "cSwi112.1", nOutDirection => #TRO112.nInDirection, InOutCarrier := "DB_JamArea0102".stJam0102_2.arCarrier[1]); END_REGION END_REGION REGION TRO 113 (1Sep)+Scanner REGION Schnittstelle RFID - TODO //TRO113 darf nur rauslassen, wenn RFID Ready = TRUE //27.11. funktioniert soweit. Wenn Rielec grün leuchtet, fahren wir durch und sie sannen. Wenn nicht, dann stoppen wir vorher ; END_REGION #TRO113.stInSeparator1.Settings.nSeparatorNo := "cSep113.1"; #TRO113.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO113.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO113.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO113.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO113.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO113.stInSeparator1.Settings.xPluggedNullBT := FALSE; #TRO113.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO113.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO113.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO113.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3335"]; // #TRO113.stInSenJam2 := "DB_Inputs".Sensors["cInBG3336"]; #TRO113.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO113.stInBarcodeReader.Settings.tTimeout := T#5s; #arCognexInterface["cScannerBX1101"].xInCamTriggerReady := "bx1101-TriggerReady"; #arCognexInterface["cScannerBX1101"].xInCamTriggerAck := "bx1101-TriggerAck"; #arCognexInterface["cScannerBX1101"].xInCamResultsAvailable := "bx1101-Results Available"; #arCognexInterface["cScannerBX1101"].xInCamGeneralFault := "bx1101-General Fault"; #arCognexInterface["cScannerBX1101"].hwInCamInspectionResults := "BX1101~Ergebnisse_–_64_Bytes_1"; #TRO113.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO113(nInMainTroNo := "cMainTro113", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO113 AND ("DI0047" OR (NOT "DI0047" AND "DI0042")) AND ("FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive OR "IBN".xFahrenOhneTcpPartner), //RFID Freigabe stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1101"], arInOutJamEntr1 := "DB_JamArea0102".stJam0102_3.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_3.stData, arInOutJamExit2 := "DB_JamArea0102".stJam0102_4.arCarrier, stInOutJamExit2 := "DB_JamArea0102".stJam0102_4.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO113, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro113"], xOutStopper1 => "MB3335"); "bx1101-TriggerEnable" := #arCognexInterface["cScannerBX1101"].xOutCamTriggerEnable; "bx1101-Trigger" := #arCognexInterface["cScannerBX1101"].xOutCamTrigger; "bx1101-ResultsAck" := #arCognexInterface["cScannerBX1101"].xOutCamResultsAck; REGION RFID Austausch //Simpel zum Testen "DQ0042" := #TRO113.nState = 2000; //Wait for release "DQ0047" := #TRO113.fbSeparator1.xOutTrolleyReleasedEdge; //Version: Flanke // IF #TRO113.fbSeparator1.xOutTrolleyReleasedEdge THEN // "DQ0047" := TRUE; // //xxxxxxxxxxxxxxxxx to do // END_IF; // "DB_Interface_HMI".stRFID.FromPartner.xStationReady := "DI0042"; "DB_Interface_HMI".stRFID.FromPartner.xBypassMode := "DI0047"; "DB_Interface_HMI".stRFID.ToPartner.xLineReady := "DQ0042"; "DB_Interface_HMI".stRFID.ToPartner.xJetSent := "DQ0047"; END_REGION REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO113.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO113.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0102".stJam0102_3.arCarrier[1]); END_REGION REGION Längenmessung "FB_Längenmessung_DB"(xInStartMessung := (#TRO113.nState = 2500 AND #TRO113.fbSeparator1.xOutTrolleyReleasedEdge), xInEndeMessung := "DB_Inputs".Sensors["cInBG3357"].xDirectEdgeNeg, xInTeilVorhanden := "DB_Inputs".Sensors["cInBG3354"].xDirectSensor, xInTeilLang := NOT "DB_Inputs".Sensors["cInBG3355"].xDirectSensor, xInTeilzuLang := NOT "DB_Inputs".Sensors["cInBG3356"].xDirectSensor); #rTrig_LengthMeasurement(CLK := "FB_Längenmessung_DB".xOutFinished); IF #rTrig_LengthMeasurement.Q THEN IF "FB_Längenmessung_DB".xOutTeilKurz THEN "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode; "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nResult := 1; //kurz ELSIF "FB_Längenmessung_DB".xOutTeilLang THEN "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode; "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nResult := 2; //lang ELSIF "FB_Längenmessung_DB".xOutErrorzuLang THEN "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode; "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nResult := -1; // zu lang ELSIF "FB_Längenmessung_DB".xOutLeer THEN "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode; "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nResult := 10; // leer ELSE "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode; "DB_Interface_HMI".stLengthMeasurement.stLastMeasurement.nResult := -99; //Fehler END_IF; END_IF; REGION DReqM to Fortna WCS (LM) // Wenn Längenmessung abgeschlossen dann Telegram mit spezifizierten Daten generieren und in TCP Sende-FIFO schieben IF #rTrig_LengthMeasurement.Q AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN IF "FB_Längenmessung_DB".xOutTeilKurz THEN #sLengthInfo := 'Short'; ELSIF "FB_Längenmessung_DB".xOutTeilLang THEN #sLengthInfo := 'Long'; ELSIF "FB_Längenmessung_DB".xOutErrorzuLang THEN #sLengthInfo := 'Too Long'; ELSIF "FB_Längenmessung_DB".xOutLeer THEN #sLengthInfo := 'Empty'; ELSE #sLengthInfo := 'Error'; END_IF; "FC_Send_GOHDReqM"(sInPLCID := "cPLCID", xInSSCCReq := FALSE, xInLengthReq := TRUE, xInDockDoorReq := FALSE, xInLaneStatusReq := FALSE, nInBarcode := "DB_JamArea0102".stJam0102_4.arCarrier[1].nBarcode, sInSSCC := '', sInDecisionPoint := "cDP_REC_01", sInDockDoor := '', sInLengthInfo := #sLengthInfo, arInLaneStatus := #tmpPlaceHolderLaneStatus, nInLaneCnt := 0, FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; END_REGION END_REGION END_REGION REGION TRO 114 (1Sep1Switch)+Scanner #TRO114.stInSeparator1.Settings.nSeparatorNo := "cSep114.1"; #TRO114.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO114.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO114.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO114.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO114.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO114.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO114.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO114.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3337"]; #TRO114.stInSenJam2 := "DB_Inputs".Sensors["cInBG3340"]; #TRO114.stInSenJam3 := "DB_Inputs".Sensors["cInBG3341"]; #TRO114.stInSwitch1.Settings.nSwitchNo := "cSwi114.1"; #TRO114.stInSwitch1.Settings.xPluggedExSen3 := FALSE; #TRO114.stInSwitch1.Settings.xPluggedExSen4 := FALSE; #TRO114.stInSwitch1.Settings.nTo1Destinations := 3; //Info nötig für HMI #TRO114.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO114.stInBarcodeReader.Settings.tTimeout := T#5s; #arCognexInterface["cScannerBX1102"].xInCamTriggerReady := "bx1102-TriggerReady"; #arCognexInterface["cScannerBX1102"].xInCamTriggerAck := "bx1102-TriggerAck"; #arCognexInterface["cScannerBX1102"].xInCamResultsAvailable := "bx1102-Results Available"; #arCognexInterface["cScannerBX1102"].xInCamGeneralFault := "bx1102-General Fault"; #arCognexInterface["cScannerBX1102"].hwInCamInspectionResults := "BX1102~Ergebnisse_–_64_Bytes_1"; #TRO114.stInPriorityManagerDir1.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung // "DB_JamArea0102".stJam0102_4.arCarrier[1].nDestination := "cDestInboundOut"; // NUR ZUM TESTEN #stJamData4104.Config.nCapacitySet := 1; #TRO114(nInMainTroNo := "cMainTro114", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun1 := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO114 AND ("FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive OR "IBN".xFahrenOhneTcpPartner), stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1102"], arInOutJamEntr1 := "DB_JamArea0102".stJam0102_4.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_4.stData, arInOutJamExit2 := #arStCarrier4104,//"DB_JamArea4104".stJam4104_1.arCarrier, stInOutJamExit2 := #stJamData4104,//"DB_JamArea4104".stJam4104_1.stData, arInOutJamExit3 := "DB_JamArea0102".stJam0102_5.arCarrier, stInOutJamExit3 := "DB_JamArea0102".stJam0102_5.stData, stInOutHMI := "DB_Interface_HMI".stTRO.TRO114, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro114"], xOutStopper1 => "MB3337", xOutSw1ExTo3 => "MB3340"); "bx1102-TriggerEnable" := #arCognexInterface["cScannerBX1102"].xOutCamTriggerEnable; "bx1102-Trigger" := #arCognexInterface["cScannerBX1102"].xOutCamTrigger; "bx1102-ResultsAck" := #arCognexInterface["cScannerBX1102"].xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO114.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO114.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0102".stJam0102_4.arCarrier[1]); END_REGION REGION Direction "FC_Direction"(nInSwitchNo := "cSwi114.1", nOutDirection => #TRO114.nInDirection, InOutCarrier := "DB_JamArea0102".stJam0102_4.arCarrier[1]); END_REGION REGION Send DUM to Fortna WCS IF #TRO114.xOutBookedDir1 AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDUM"(sInPLCID := "cPLCID", nInBarcode := #TRO114.stOutLastCarrier.nBarcode, sInDecisionPoint := "cDP_REC_01", sInActionTaken := "cSTORAGE", nReasonCode := "cSUCCESS", FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; IF #TRO114.xOutBookedDir2 AND "FB_CommunicationWCSBL_DB".fbTeleHandler.xOutConnectionActive THEN "FC_Send_GOHDUM"(sInPLCID := "cPLCID", nInBarcode := #TRO114.stOutLastCarrier.nBarcode, sInDecisionPoint := "cDP_REC_01", sInActionTaken := "cSTRAIGHT", nReasonCode := "cSUCCESS", FIFO := "DB_LGF_FIFO_CommWCSBL", BUFFER := "DB_Buffer_CommunicationWCSBL".BUFFER, nInOutSequenceNumber := "DB_CommunicationParameters".nSeqNumWCSBL); END_IF; END_REGION END_REGION REGION TRO 115 (Vario) #TRO115.stInSeparator1.Settings.nSeparatorNo := "cSep115.1"; #TRO115.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO115.stInSeparator1.Settings.tTrailingTime := t#800ms; #TRO115.stInSeparator1.Settings.tHandlingTime := t#300ms; #TRO115.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO115.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO115.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO115.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO115.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3025"]; #TRO115.stInSeparator1.Settings.tSenFree := t#2000ms;//T#1200ms; #TRO115.stInSeparator1.Settings.tSenWait := T#5000ms; #TRO115.stInVario.Settings.xContinousEmptying := FALSE; #TRO115.stInVario.Settings.tWaitForJog := T#300ms; #TRO115.stInVario.Settings.tConvEmpty := T#45000ms; #TRO115.stInVario.Settings.nCountCarrier := 1; #TRO115.stInVario.Settings.tWaitForStop := t#3s; #TRO115.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO115.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO115.stInVario.Settings.tRasterHigh := t#5s; #TRO115.stInVario.Settings.tRasterLow := t#5s; #TRO115.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3026"]; // MT in Pos #TRO115.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3027"]; // Pusher Dog in Pos #TRO115.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3000"]; // Conveyor full #TRO115.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3001"]; // Jam detector #TRO115.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO115.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO115.stInVario.Settings.tJamSenDelay := T#2s; #TRO115.stInSettings.xIsBorner := TRUE; #TRO115(nInMainTroNo := "cMainTro115", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInMotorProtection := "FC0145", xInAllRdyToStart := TRUE, xInReset := "cTodoFalse", xInErrorQuit := "SF0002", xInAutomatic := #t_Automatik_OF1 AND "SF0120", xInRelease := "DB_TRO_TEST".TRO115, arInOutJamEntr := "DB_JamArea4104".stJam4104_1.arCarrier, stInOutJamEntr := "DB_JamArea4104".stJam4104_1.stData, arInOutJamFinger := "DB_JamArea4103".stJam4103_1.arCarrier, stInOutJamFinger := "DB_JamArea4103".stJam4103_1.stData, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO115, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro115"], xOutStopper => "MB3025", xOutVarioMotor => "MA0145"); END_REGION REGION TRO 116 (1Sep) #TRO116.stInSeparator1.Settings.nSeparatorNo := "cSep116.1"; #TRO116.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Medium"; #TRO116.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO116.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO116.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO116.stInSeparator1.Settings.xPluggedConfirm := FALSE; #TRO116.stInSeparator1.Settings.xPluggedNullBT := FALSE; #TRO116.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO116.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO116.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO116.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3316"]; #TRO116.stInSenJam2 := "DB_Inputs".Sensors["cInBG3300"]; #TRO116.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO116(nInMainTroNo := "cMainTro116", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := "DB_TRO_TEST".TRO116, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea0102".stJam0102_5.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_5.stData, arInOutJamExit2 := "DB_JamArea0102".stJam0102_6.arCarrier, stInOutJamExit2 := "DB_JamArea0102".stJam0102_6.stData, // nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro116"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO116, xOutStopper1 => "MB3316"); IF #TRO116.nOutStateLast > 1000 THEN "DB_GLOB_TroState".arTroState["cMainTro116"] := #TRO116.nOutStateLast; END_IF; END_REGION REGION TRO 117 (1Sep) + Scanner #TRO117.stInSeparator1.Settings.nSeparatorNo := "cSep117.1"; #TRO117.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO117.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO117.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO117.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO117.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO117.stInSeparator1.Settings.xPluggedPart := TRUE; #TRO117.stInSettings.bSepType.%X0 := TRUE; #TRO117.stInSettings.bSepType.%X1 := TRUE; #TRO117.stInSettings.tPartSenHigh := T#500ms; #TRO117.stInSettings.tInSenHigh := T#500ms; #TRO117.stInSeparator1.stSenPart := "DB_Inputs".Sensors["cInBG3301"]; #TRO117.stInSeparator1.Settings.xPluggedScanner := TRUE; #TRO117.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3300"]; #TRO117.stInSenJam2 := "DB_Inputs".Sensors["cInBG3304"]; #TRO117.stInBarcodeReader.Settings.xActivateCheckASCI := TRUE; #TRO117.stInBarcodeReader.Settings.tTimeout := T#5s; #arCognexInterface["cScannerBX1100"].xInCamTriggerReady := "bx1100-TriggerReady"; #arCognexInterface["cScannerBX1100"].xInCamTriggerAck := "bx1100-TriggerAck"; #arCognexInterface["cScannerBX1100"].xInCamResultsAvailable := "bx1100-Results Available"; #arCognexInterface["cScannerBX1100"].xInCamGeneralFault := "bx1100-General Fault"; #arCognexInterface["cScannerBX1100"].hwInCamInspectionResults := "BX1100~Ergebnisse_–_64_Bytes_1"; REGION NUR FÜR TEST // "DB_JamArea0102".stJam0102_6.arCarrier[1].nDestination := "cDestClearing"; END_REGION #TRO117(stInPriorityManager := "DB_Prozessdaten".stPriorityManager.udt_TRO117.TroIn, stOutPriorityManager => "DB_Prozessdaten".stPriorityManager.udt_TRO117.TroOut, nInMainTroNo := "cMainTro117", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF1.Q, xInAllRdyToStart := TRUE, xInCarouselRun := #fbCarousel0102.xOutConveyorFullSpeed, xInRelease := #rTrig_ClarificationButton.Q, stInOutMachineState := #stInOutControlUnitCabinetOF1, stInOutCognexInterface := #arCognexInterface["cScannerBX1100"], arInOutJamEntr1 := "DB_JamArea0102".stJam0102_6.arCarrier, stInOutJamEntr1 := "DB_JamArea0102".stJam0102_6.stData, arInOutJamExit2 := "DB_JamArea0102".stJam0102_1.arCarrier, stInOutJamExit2 := "DB_JamArea0102".stJam0102_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro117"], stInOutHMI := "DB_Interface_HMI".stTRO.TRO117, xOutStopper1 => "MB3300"); "bx1100-TriggerEnable" := #arCognexInterface["cScannerBX1100"].xOutCamTriggerEnable; "bx1100-Trigger" := #arCognexInterface["cScannerBX1100"].xOutCamTrigger; "bx1100-ResultsAck" := #arCognexInterface["cScannerBX1100"].xOutCamResultsAck; REGION Carr_Glob_Correction "FC_CARR_GLOB_CORRECTION"(xInStart := #TRO117.xOutCorrection, //Führe Korrektur aus nInBarcodeScan := #TRO117.nBarcodeResult, nInStation := 0, arOutEventLogInfo => #arDummyEventCorrectionInfo, InOutCarrierExpect := "DB_JamArea0102".stJam0102_6.arCarrier[1]); END_REGION REGION Clarification Release #rTrig_ClarificationButton(CLK := "SF0032"); END_REGION REGION Trolley Handling IF NOT "DB_Inputs".Sensors["cInBG3300"].xDirectSensor AND "DB_Interface_HMI".stClearingStation.xDeleteTrolley THEN "DB_JamArea0102".stJam0102_6.arCarrier[1] := #stEmptyCarrier; "DB_Interface_HMI".stClearingStation.xDeleteTrolley := FALSE; #TRO117.nState := 100; END_IF; IF (* NOT "DB_Inputs".Sensors["cInBG3300"].xDirectSensor AND *) NOT "BG3301" AND "DB_Interface_HMI".stClearingStation.xDeleteLoad THEN "DB_JamArea0102".stJam0102_6.arCarrier[1].bStatus.%X1 := FALSE; "DB_Interface_HMI".stClearingStation.xDeleteLoad := FALSE; END_IF; "DB_Interface_HMI".stClearingStation.stFirstCarrierInStation := "DB_JamArea0102".stJam0102_6.arCarrier[1]; "DB_Interface_HMI".stClearingStation.xTrolleyInStation := "DB_Inputs".Sensors["cInBG3300"].xDbncdSensor; END_REGION ; END_REGION ; REGION TRO 120 (Vario) // Loaded To Storage #TRO120.stInSeparator1.Settings.nSeparatorNo := "cSep120.1"; #TRO120.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO120.stInSeparator1.Settings.tTrailingTime := T#600ms; #TRO120.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO120.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO120.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO120.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO120.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO120.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3003"]; #TRO120.stInSeparator1.Settings.tSenFree := T#2000ms; #TRO120.stInSeparator1.Settings.tSenWait := T#4300ms; #TRO120.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3002"]; //Fingrer in Pos #TRO120.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3006"]; // Conveyor full #TRO120.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3004"]; // MT in Pos #TRO120.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3005"]; // Jam detector #TRO120.stInVario.Settings.xContinousEmptying := FALSE; #TRO120.stInVario.Settings.tWaitForJog := T#50ms;//T#400ms; #TRO120.stInVario.Settings.tConvEmpty := T#90000ms; #TRO120.stInVario.Settings.nCountCarrier := 1; #TRO120.stInVario.Settings.tWaitForStop := T#3s; #TRO120.stInVario.Settings.xLongSlope := TRUE; #TRO120.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO120.stInVario.Settings.tRasterHigh := T#2500ms; #TRO120.stInVario.Settings.tRasterLow := T#2500ms; #TRO120.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO120.stInVario.Settings.tJamSenDelay := T#2s; #TRO120.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #stJamDataLeaveControl.Config.nCapacitySet := 1; #TRO120(nInMainTroNo := "cMainTro120", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124" AND "SF0126" AND "SF0130", xInReset := "cTodoFalse", xInErrorQuit := "SF0121", xInMotorProtection := "FC0146", xInRelease := "DB_TRO_TEST".TRO120, arInOutJamEntr := "DB_JamArea4103".stJam4103_1.arCarrier, stInOutJamEntr := "DB_JamArea4103".stJam4103_1.stData, arInOutJamFinger := #arStCarrierLeaveControl,//JAM, Übergabe CPU Level 2! stInOutJamFinger := #stJamDataLeaveControl, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO120, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro120"], xOutStopper => "MB3003", xOutVarioMotor => "MA0146"); END_REGION REGION TRO 121(Vario) #TRO121.stInSeparator1.Settings.nSeparatorNo := "cSep121.1"; #TRO121.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO121.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO121.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO121.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO121.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO121.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO121.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO121.stInSeparator1.Settings.xStuckCorrection := 1; #TRO121.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3080"]; #TRO121.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO121.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO121.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3081"]; //Finger in Pos #TRO121.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3062"]; // Conveyor full #TRO121.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3082"]; // MT in Pos #TRO121.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3061"]; // Jam detector #TRO121.stInVario.Settings.xContinousEmptying := FALSE; #TRO121.stInVario.Settings.tWaitForJog := T#200ms;//T#400ms; #TRO121.stInVario.Settings.tConvEmpty := T#45000ms; #TRO121.stInVario.Settings.nCountCarrier := 1; #TRO121.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO121.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO121.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO121.stInSettings.xIsBorner := TRUE; #TRO121.stInSettings.nBornerDest := "cDestInboundLS"; #TRO121(nInMainTroNo := "cMainTro121", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2, xInReset := "cTodoFalse", xInErrorQuit := "SF0117", xInMotorProtection := "FC0141", xInRelease := "DB_TRO_TEST".TRO121, arInOutJamEntr := "DB_JamArea4503".stJam4503_1.arCarrier, stInOutJamEntr := "DB_JamArea4503".stJam4503_1.stData, arInOutJamFinger := "DB_JamArea4503".stJam4503_2.arCarrier, stInOutJamFinger := "DB_JamArea4503".stJam4503_2.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO121, xOutStopper => "MB3080", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro121"], xOutVarioMotor => "MA0141"); END_REGION REGION TRO 122 (1Sep) #TRO122.stInSeparator1.Settings.xStuckCorrection := 1; #TRO122.stInSeparator1.Settings.nSeparatorNo := "cSep107.1"; #TRO122.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO122.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO122.stInSeparator1.Settings.tTrailingTime := t#500ms; #TRO122.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO122.stInSeparator1.Settings.xPluggedJam := FALSE; //nächster InSep mögl., aber Jam wurde erhöht #TRO122.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO122.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO122.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3060"]; #TRO122.stInSenJam2 := "DB_Inputs".Sensors["cInBG3063"]; #TRO122.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO122.stInSeparator1.Settings.tSenWait := T#3500ms; #TRO122.stInPriorityManager.xReleaseOk := "cTodoTRUE"; //Brandschutztor.... #TRO122(nInMainTroNo := "cMainTro122", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO122, xInCarouselRun := "cTodoTRUE", //Gefälle mit Brandschutztor stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea4503".stJam4503_2.arCarrier, stInOutJamEntr1 := "DB_JamArea4503".stJam4503_2.stData, arInOutJamExit2 := "DB_JamArea4502".stJam4502_1.arCarrier, stInOutJamExit2 := "DB_JamArea4502".stJam4502_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro122"], xOutStopper1 => "MB3060", stInOutHMI := "DB_Interface_HMI".stTRO.TRO122); END_REGION REGION TRO 123 (Vario) #TRO123.stInSeparator1.Settings.xStuckCorrection := 1; #TRO123.stInSeparator1.Settings.nSeparatorNo := "cSep123.1"; #TRO123.stInSeparator1.Settings.tTrailingTime := T#600ms; #TRO123.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO123.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO123.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO123.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO123.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO123.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO123.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3063"]; #TRO123.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO123.stInSeparator1.Settings.tSenWait := T#3500ms; #TRO123.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3065"]; //Finger in Pos #TRO123.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3066"]; // Conveyor full #TRO123.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3064"]; // MT in Pos #TRO123.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3067"]; // Jam detector #TRO123.stInVario.Settings.xContinousEmptying := FALSE; #TRO123.stInVario.Settings.tWaitForJog := T#200ms;//T#400ms; #TRO123.stInVario.Settings.tConvEmpty := T#30000ms; #TRO123.stInVario.Settings.nCountCarrier := 1; #TRO123.stInVario.Settings.tWaitForStop := t#3s; #TRO123.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO123.stInVario.Settings.tJamSenDelay := T#1500ms; #TRO123.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO123.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO123.stInVario.Settings.xLongSlope := TRUE; #TRO123.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO123(nInMainTroNo := "cMainTro123", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120", xInReset := "cTodoFalse", xInErrorQuit := "SF0121", xInMotorProtection := "FC0142", xInRelease := "DB_TRO_TEST".TRO123, arInOutJamEntr := "DB_JamArea4502".stJam4502_1.arCarrier, stInOutJamEntr := "DB_JamArea4502".stJam4502_1.stData, arInOutJamFinger := "DB_JamArea4502".stJam4502_2.arCarrier, stInOutJamFinger := "DB_JamArea4502".stJam4502_2.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO123, xOutStopper => "MB3063", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro123"], xOutVarioMotor => "MA0142"); END_REGION REGION TRO 124 (1Sep1Switch) #TRO124.stInSeparator1.Settings.xStuckCorrection := 1; #TRO124.stInSeparator1.Settings.nSeparatorNo := "cSep124.1"; #TRO124.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO124.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO124.stInSeparator1.Settings.tTrailingTime := t#500ms; #TRO124.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO124.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO124.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO124.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO124.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3024"]; #TRO124.stInSenJam2 := "DB_Inputs".Sensors["cInBG3015"]; #TRO124.stInSenJam3 := "DB_Inputs".Sensors["cInBG3017"]; //BG3017 #TRO124.stInSwitch1.Settings.nSwitchNo := "cSwi124.1"; #TRO124.stInSwitch1.Settings.xPluggedExSen3 := FALSE; #TRO124.stInSwitch1.Settings.xPluggedExSen4 := FALSE; #TRO124.stInSwitch1.Settings.nTo1Destinations := 4; //Info nötig für HMI #TRO124.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO124.stInSeparator1.Settings.tSenWait := T#4300ms; // #TRO124.stInPriorityManager.xReleaseOk := TRUE; IF #TRO101.xOutFull AND #TRO102.xOutFull AND ("DB_JamArea0100".stJam0100_1.stData.Status.nCount >= "DB_JamArea0100".stJam0100_1.stData.Config.nCapacitySet) THEN "DB_JamArea4502".stJam4502_2.arCarrier[1].nDestination := "cDestHighwayStorage"; END_IF; #TRO124.stInSettings.xPrioDir1 := TRUE; #TRO124.stInSettings.xPrioDir2 := TRUE; #TRO124.stInPriorityManagerDir1.xReleaseOk := TRUE; #TRO124.stInPriorityManagerDir2.xReleaseOk := TRUE; #TRO124(nInMainTroNo := "cMainTro124", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO124 OR #xHighwayPrio124, xInCarouselRun1 := #fbCarousel4204.xOutConveyorFullSpeed, xInCarouselRun2 := #fbCarousel4204.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea4502".stJam4502_2.arCarrier, stInOutJamEntr1 := "DB_JamArea4502".stJam4502_2.stData, arInOutJamExit2 := "DB_JamArea4204".stJam4204_2.arCarrier, stInOutJamExit2 := "DB_JamArea4204".stJam4204_2.stData, arInOutJamExit3 := "DB_JamArea4501".stJam4501_1.arCarrier, stInOutJamExit3 := "DB_JamArea4501".stJam4501_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro124"], xOutStopper1 => "MB3024", xOutSw1ExTo4 => "MB3015", stInOutHMI := "DB_Interface_HMI".stTRO.TRO124); REGION Direction "FC_Direction"(nInSwitchNo := "cSwi124.1", nOutDirection => #TRO124.nInDirection, InOutCarrier := "DB_JamArea4502".stJam4502_2.arCarrier[1]); END_REGION REGION TO DO: WAS MACHT SWITCH????? IF NOT "DB_Inputs".Sensors["cInBG3024"].xDirectSensor AND "DB_Inputs".Sensors["cInBG3024"].tDirectChangeLast > T#8s THEN #xHighwayPrio124 := FALSE; //Jam von TRO124 ist schon lange leer. TRO130 darf fahren und TRO124 darf nicht #xHighwayPrio130 := TRUE; "MB3015" := TRUE; //Weiche von 1Sep1Swi überschreiben! ELSIF #xHighwayPrio130 AND "DB_Inputs".Sensors["cInBG3024"].xDbncdSensor THEN #xHighwayPrio124 := FALSE; //Wenn TRO130 Prio hatte und Sensor von TRO124 hat wieder eine Belegung. TRO124 darf fahren und TRO130 darf nicht #xHighwayPrio130 := FALSE; "MB3015" := TRUE; //Weiche von 1Sep1Swi überschreiben! ELSIF "DB_Inputs".Sensors["cInBG3024"].xDirectSensor AND "DB_Inputs".Sensors["cInBG3024"].tDirectChangeLast > T#6s THEN #xHighwayPrio124 := TRUE; //Wenn TRO130 Prio hatte und Sensor von TRO124 hat wieder eine Belegung. TRO124 darf fahren und TRO130 darf nicht #xHighwayPrio130 := FALSE; //Weiche von 1Sep1Swi nicht mehr überschreiben! END_IF; REGION !!!!!!für Test auf GERADEAUS manipuliert!!!!!!! // "MB3015" := FALSE; // DAS WIEDER AUSKOMMENTIEREN FÜR NORMALBETRIEB END_REGION END_REGION ; END_REGION REGION TRO 125 (1Sep) #TRO125.stInSeparator1.Settings.nSeparatorNo := "cSep125.1"; #TRO125.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO125.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO125.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO125.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO125.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO125.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO125.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO125.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3010"]; #TRO125.stInSenJam2 := "DB_Inputs".Sensors["cInBG3014"]; #TRO125.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO125(nInMainTroNo := "cMainTro125", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO125, xInCarouselRun := #fbCarousel4204.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea4204".stJam4204_2.arCarrier, stInOutJamEntr1 := "DB_JamArea4204".stJam4204_2.stData, arInOutJamExit2 := "DB_JamArea4203".stJam4203_1.arCarrier, stInOutJamExit2 := "DB_JamArea4203".stJam4203_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro125"], xOutStopper1 => "MB3010", stInOutHMI := "DB_Interface_HMI".stTRO.TRO125); END_REGION REGION TRO 126 (Vario) // Empty to Storage #TRO126.stInSeparator1.Settings.nSeparatorNo := "cSep126.1"; #TRO126.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO126.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO126.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO126.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO126.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO126.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO126.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO126.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3120"]; #TRO126.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO126.stInSeparator1.Settings.tSenWait := T#4300ms; #TRO126.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3122"]; //Pusher Dog in Pos #TRO126.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3123"]; // Conveyor full #TRO126.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3121"]; // MT in Pos #TRO126.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3124"]; // Jam detector #TRO126.stInVario.Settings.tRasterHigh := T#5000ms; #TRO126.stInVario.Settings.tRasterLow := T#5000ms; #TRO126.stInVario.Settings.xContinousEmptying := FALSE; #TRO126.stInVario.Settings.tWaitForJog := T#200ms;//T#400ms; #TRO126.stInVario.Settings.tConvEmpty := T#50000ms; #TRO126.stInVario.Settings.nCountCarrier := 1; #TRO126.stInVario.Settings.tWaitForStop := T#3s; #TRO126.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO126.stInVario.Settings.tJamSenDelay := T#2s; #TRO126.stInVario.Settings.tCarrierInPosDelay := t#1300ms; #TRO126.stInVario.Settings.xLongSlope := TRUE; #TRO126.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #stJamDataLeaveControl.Config.nCapacitySet := 1; #TRO126(nInMainTroNo := "cMainTro126", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124" AND "SF0126" AND "SF0130", xInReset := "cTodoFalse", xInErrorQuit := "DB_Interface_HMI".stTRO.TRO126.UDT_Ctrl.xErrorQuit OR "SF0125", xInMotorProtection := "FC0147", xInRelease := "DB_TRO_TEST".TRO126, arInOutJamEntr := "DB_JamArea4203".stJam4203_1.arCarrier, stInOutJamEntr := "DB_JamArea4203".stJam4203_1.stData, arInOutJamFinger := #arStCarrierLeaveControl, //Übergabe zu UH03 stInOutJamFinger := #stJamDataLeaveControl, //Übergabe zu UH03 stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO126, xOutStopper => "MB3120", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro126"], xOutVarioMotor => "MA0147"); END_REGION REGION TRO 127 (Vario) #TRO127.stInSeparator1.Settings.nSeparatorNo := "cSep127.1"; #TRO127.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO127.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO127.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO127.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO127.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO127.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO127.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO127.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3020"]; #TRO127.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO127.stInSeparator1.Settings.tSenWait := T#3500ms; #TRO127.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3021"]; //Finger in Pos #TRO127.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3023"]; // Conveyor full #TRO127.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3011"]; // MT in Pos #TRO127.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3022"]; // Jam detector #TRO127.stInVario.Settings.xContinousEmptying := FALSE; #TRO127.stInVario.Settings.tWaitForJog := T#300ms;//T#400ms; #TRO127.stInVario.Settings.tConvEmpty := T#35000ms; #TRO127.stInVario.Settings.nCountCarrier := 1; #TRO127.stInVario.Settings.tWaitForStop := T#3s; #TRO127.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO127.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO127.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO127(nInMainTroNo := "cMainTro127", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124", xInReset := "cTodoFalse", xInErrorQuit := "SF0121", xInMotorProtection := "FC0144", xInRelease := "DB_TRO_TEST".TRO127, arInOutJamEntr := "DB_JamArea4501".stJam4501_1.arCarrier, stInOutJamEntr := "DB_JamArea4501".stJam4501_1.stData, arInOutJamFinger := "DB_JamArea4501".stJam4501_2.arCarrier, stInOutJamFinger := "DB_JamArea4501".stJam4501_2.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO127, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro127"], xOutStopper => "MB3020", xOutVarioMotor => "MA0144"); END_REGION REGION TRO 128 (Vario) // Empty to Inbound #TRO128.stInSeparator1.Settings.nSeparatorNo := "cSep128.1"; #TRO128.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO128.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO128.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO128.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO128.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO128.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO128.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO128.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3290"]; #TRO128.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO128.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO128.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3291"]; //Finger in Pos #TRO128.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3240"]; // Conveyor full #TRO128.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3292"]; // MT in Pos #TRO128.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3241"]; // Jam detector #TRO128.stInVario.Settings.xContinousEmptying := FALSE; #TRO128.stInVario.Settings.tWaitForJog := T#300ms;//T#400ms; #TRO128.stInVario.Settings.tConvEmpty := T#60000ms; #TRO128.stInVario.Settings.nCountCarrier := 1; #TRO128.stInVario.Settings.tWaitForStop := T#3s; #TRO128.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO128.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO128.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO128(nInMainTroNo := "cMainTro128", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120", xInReset := "cTodoFalse", xInErrorQuit := "SF0121", xInMotorProtection := "FC0057", xInRelease := "DB_TRO_TEST".TRO128, arInOutJamEntr := "DB_JamArea4501".stJam4501_2.arCarrier, stInOutJamEntr := "DB_JamArea4501".stJam4501_2.stData, arInOutJamFinger := "DB_JamArea0100".stJam0100_1.arCarrier, stInOutJamFinger := "DB_JamArea0100".stJam0100_1.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO128, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro128"], xOutStopper => "MB3290", xOutVarioMotor => "MA0057"); END_REGION REGION TRO 129 (1Sep) #TRO129.stInSeparator1.Settings.nSeparatorNo := "cSep129.1"; #TRO129.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO129.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO129.stInSeparator1.Settings.tTrailingTime := t#500ms; #TRO129.stInSeparator1.Settings.tHandlingTime := t#200ms; #TRO129.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO129.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO129.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO129.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3125"]; #TRO129.stInSenJam2 := "DB_Inputs".Sensors["cInBG3012"]; #TRO129.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO129.stInSeparator1.Settings.tSenWait := T#3500ms; #TRO129.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO129(nInMainTroNo := "cMainTro129", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := "DB_TRO_TEST".TRO129 AND (NOT #TRO101.xOutFull OR NOT #TRO102.xOutFull OR ("DB_JamArea0100".stJam0100_1.stData.Status.nCount < "DB_JamArea0100".stJam0100_1.stData.Config.nCapacitySet)), xInCarouselRun := #fbCarousel4204.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea4302".stJam4302_2.arCarrier, stInOutJamEntr1 := "DB_JamArea4302".stJam4302_2.stData, arInOutJamExit2 := "DB_JamArea4204".stJam4204_1.arCarrier, stInOutJamExit2 := "DB_JamArea4204".stJam4204_1.stData, nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro129"], xOutStopper1 => "MB3125", stInOutHMI := "DB_Interface_HMI".stTRO.TRO129); END_REGION REGION TRO 130 (1Sep) #TRO130.stInSeparator1.Settings.nSeparatorNo := "cSep130.1"; #TRO130.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO130.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO130.stInSeparator1.Settings.tTrailingTime := t#100ms; #TRO130.stInSeparator1.Settings.tHandlingTime := t#50ms; #TRO130.stInSeparator1.Settings.xPluggedJam := TRUE; #TRO130.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO130.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO130.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3013"]; #TRO130.stInSenJam2 := "DB_Inputs".Sensors["cInBG3017"]; //BG3017!!!!!!!!!!!!!!!!!!!!!!!!!!! #TRO130.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO130(nInMainTroNo := "cMainTro130", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInCancel := "cTodoFalse", xInRelease := #xHighwayPrio130 OR "DB_TRO_TEST".TRO130, //Nur wenn Weiche zum Abbiegen geschalten ist und Prio Freigabe true, darf dieser TRO überhaupt fahren xInCarouselRun := #fbCarousel4204.xOutConveyorFullSpeed, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, arInOutJamEntr1 := "DB_JamArea4204".stJam4204_1.arCarrier, stInOutJamEntr1 := "DB_JamArea4204".stJam4204_1.stData, arInOutJamExit2 := "DB_JamArea4501".stJam4501_1.arCarrier, //"DB_JamArea4204".stJam4204_2.arCarrier,// stInOutJamExit2 := "DB_JamArea4501".stJam4501_1.stData, //"DB_JamArea4204".stJam4204_2.stData,// nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro130"], xOutStopper1 => "MB3013", stInOutHMI := "DB_Interface_HMI".stTRO.TRO130); END_REGION REGION TRO 131 (Vario) // Loaded to AMR #TRO131.stInSeparator1.Settings.nSeparatorNo := "cSep131.1"; #TRO131.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO131.stInSeparator1.Settings.tHandlingTime := T#400ms; #TRO131.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO131.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO131.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO131.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO131.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO131.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3073"]; #TRO131.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO131.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO131.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3075"]; //Finger in Pos #TRO131.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3070"]; // Conveyor full #TRO131.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3074"]; // MT in Pos #TRO131.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3071"]; // Jam detector #TRO131.stInVario.Settings.xContinousEmptying := FALSE; #TRO131.stInVario.Settings.tWaitForJog := T#350ms;//T#400ms; #TRO131.stInVario.Settings.tConvEmpty := T#60000ms; #TRO131.stInVario.Settings.nCountCarrier := 1; #TRO131.stInVario.Settings.tWaitForStop := t#3s; #TRO131.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO131.stInVario.Settings.tJamSenDelay := T#2s; #TRO131.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO131.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO131.stInVario.Settings.tTimeOutCarrierInPos := t#5s; #TRO131.stInVario.Settings.xLongSlope := TRUE; #TRO131.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #stJamDataLeaveControl.Config.nCapacitySet := 1; #TRO131(nInMainTroNo := "cMainTro131", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124", xInReset := "cTodoFalse", xInErrorQuit := "SF0125", xInMotorProtection := "FC0143", xInRelease := "DB_TRO_TEST".TRO131, arInOutJamEntr := "DB_JamArea4403".stJam4403_1.arCarrier, stInOutJamEntr := "DB_JamArea4403".stJam4403_1.stData, arInOutJamFinger := #arStCarrierLeaveControl, //Übergang zu UH04 stInOutJamFinger := #stJamDataLeaveControl, //Übergang zu UH04 stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO131, xOutStopper => "MB3073", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro131"], xOutVarioMotor => "MA0143"); END_REGION // REGION TRO 132 (1Sep) // #TRO132.stInSeparator1.Settings.nSeparatorNo := "cSep132.1"; // #TRO132.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; // #TRO132.stInSeparator1.Settings.tJam := "TimeForSepJam"; // #TRO132.stInSeparator1.Settings.tTrailingTime := t#500ms; // #TRO132.stInSeparator1.Settings.tHandlingTime := t#200ms; // #TRO132.stInSeparator1.Settings.xPluggedJam := TRUE; // #TRO132.stInSeparator1.Settings.xPluggedPart := FALSE; // #TRO132.stInSeparator1.Settings.xPluggedScanner := FALSE; // #TRO132.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3076"]; // #TRO132.stInSenJam2 := "DB_Inputs".Sensors["cInBG3077"]; // #TRO132.stInSeparator1.Settings.tSenFree := T#1500ms; // #TRO132.stInSeparator1.Settings.tSenWait := T#3500ms; // #TRO132.stInPriorityManager.xReleaseOk := TRUE; //Brandschutztor... // #stJamDataLeaveControl.Config.nCapacitySet := 1; // #TRO132(nInMainTroNo := "cMainTro132", // xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMain.Q, // xInAllRdyToStart := TRUE, // xInCancel := "cTodoFalse", // xInRelease := "DB_TRO_TEST".TRO132, // xInCarouselRun := "cTodoTRUE", // stInOutMachineState := #stInOutControlUnitCabinet, // stInOutCognexInterface := #stCognexInterfaceDummy, // arInOutJamEntr1 := "DB_JamArea4403".stJam4403_2.arCarrier, // stInOutJamEntr1 := "DB_JamArea4403".stJam4403_2.stData, // arInOutJamExit2 := #arStCarrierLeaveControl,//Übergabe zu UH04 // stInOutJamExit2 := #stJamDataLeaveControl, //Übergabe zu UH04 // nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro132"], // xOutStopper1 => "MB3076", // stInOutHMI := "DB_Interface_HMI".stTRO.TRO132); // END_REGION REGION TRO 133 (Vario) #TRO133.stInSeparator1.Settings.nSeparatorNo := "cSep133.1"; #TRO133.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO133.stInSeparator1.Settings.tHandlingTime := T#200ms; #TRO133.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO133.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO133.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO133.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO133.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO133.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3130"]; #TRO133.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO133.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO133.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3132"]; //Finger in Pos #TRO133.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3127"]; // Conveyor full #TRO133.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3131"]; // MT in Pos #TRO133.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3126"]; // Jam detector #TRO133.stInVario.Settings.xContinousEmptying := FALSE; #TRO133.stInVario.Settings.tWaitForJog := T#50ms;//T#400ms; #TRO133.stInVario.Settings.tConvEmpty := T#30000ms; #TRO133.stInVario.Settings.nCountCarrier := 1; #TRO133.stInVario.Settings.tWaitForStop := t#3s; #TRO133.stInVario.Settings.xLongSlope := TRUE; #TRO133.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO133.stInVario.Settings.tJamSenDelay := T#2s; #TRO133.stInVario.Settings.tRasterHigh := t#2500ms; #TRO133.stInVario.Settings.tRasterLow := t#2500ms; #TRO133.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO133.stInVario.Settings.tCarrierInPosDelay := t#1300ms; #TRO133.stInSettings.xIsBorner := TRUE; #TRO133.stInSettings.nBornerDest := "cDestInboundLS"; //ales was von hier kommt, muss zu Ziel 10 = Ladeschleife #TRO133(nInMainTroNo := "cMainTro133", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124" AND "SF0126" AND "SF0130", xInReset := "cTodoFalse", xInErrorQuit := "SF0127" OR "SF0131", xInMotorProtection := "FC0150", xInRelease := "DB_TRO_TEST".TRO133, arInOutJamEntr := "DB_JamArea4302".stJam4302_1.arCarrier, stInOutJamEntr := "DB_JamArea4302".stJam4302_1.stData, arInOutJamFinger := "DB_JamArea4302".stJam4302_2.arCarrier, stInOutJamFinger := "DB_JamArea4302".stJam4302_2.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO133, xOutStopper => "MB3130", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro133"], xOutVarioMotor => "MA0150"); END_REGION REGION TRO 134 (Vario) #TRO134.stInSeparator1.Settings.nSeparatorNo := "cSep134.1"; #TRO134.stInSeparator1.Settings.tTrailingTime := T#500ms; #TRO134.stInSeparator1.Settings.tHandlingTime := T#400ms; #TRO134.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short"; #TRO134.stInSeparator1.Settings.tJam := "TimeForSepJam"; #TRO134.stInSeparator1.Settings.xPluggedJam := FALSE; #TRO134.stInSeparator1.Settings.xPluggedPart := FALSE; #TRO134.stInSeparator1.Settings.xPluggedScanner := FALSE; #TRO134.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3135"]; #TRO134.stInSeparator1.Settings.tSenFree := T#1500ms; #TRO134.stInSeparator1.Settings.tSenWait := T#4000ms; #TRO134.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3137"]; //Finger in Pos #TRO134.stInVario.stSenLastPos := "DB_Inputs".Sensors["cInBG3133"]; // Conveyor full #TRO134.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3136"]; // MT in Pos #TRO134.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3134"]; // Jam detector #TRO134.stInVario.Settings.xContinousEmptying := FALSE; #TRO134.stInVario.Settings.tWaitForJog := T#350ms;//T#400ms; #TRO134.stInVario.Settings.tConvEmpty := T#30000ms; #TRO134.stInVario.Settings.nCountCarrier := 1; #TRO134.stInVario.Settings.tWaitForStop := t#3s; #TRO134.stInVario.Settings.xJamSenDelayActive := TRUE; #TRO134.stInVario.Settings.tJamSenDelay := T#2s; #TRO134.stInVario.Settings.tCarrierInPosDelay := t#1200ms; #TRO134.stInVario.Settings.tCarrierInPosEdgeDelay := t#100ms; #TRO134.stInVario.Settings.tTimeOutCarrierInPos := t#5s; #TRO134.stInVario.Settings.xLongSlope := TRUE; #TRO134.stInPriorityManager.xReleaseOk := TRUE; //braucht keine Vorfahrtsregelung #TRO134.stInSettings.xIsBorner := TRUE; #TRO134(nInMainTroNo := "cMainTro134", xInSftyOk := "DB_InterfaceSafety".stFromSafety.EStopMainOF2.Q, xInAllRdyToStart := TRUE, xInAutomatic := #t_Automatik_OF2 AND "SF0120" AND "SF0124" AND "SF0126" AND "SF0130", xInReset := "cTodoFalse", xInErrorQuit := "SF0127" OR "SF0131", xInMotorProtection := "FC0151", xInRelease := "DB_TRO_TEST".TRO134, arInOutJamEntr := "DB_JamArea4402".stJam4402_1.arCarrier, stInOutJamEntr := "DB_JamArea4402".stJam4402_1.stData, arInOutJamFinger := "DB_JamArea4403".stJam4403_1.arCarrier, stInOutJamFinger := "DB_JamArea4403".stJam4403_1.stData, stInOutMachineState := #stInOutControlUnitCabinetOF2, stInOutCognexInterface := #stCognexInterfaceDummy, stInOutHMI := "DB_Interface_HMI".stTRO.TRO134, xOutStopper => "MB3135", nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro134"], xOutVarioMotor => "MA0151"); END_REGION END_REGION ; REGION IO_Device Bereichshalte "IO_Device_UH01_TO_UH03".xAreaStopUZ1105 := "SF0130"; END_REGION REGION Empty Carrier aus Storage anfordern - Simple Test //Einfache Zweitpunktregelung IF "DB_JamArea4302".stJam4302_2.stData.Status.nCount <= "DB_JamArea4302".stJam4302_2.stData.Config.nCapacitySet * 20 / 100 THEN //MIN "IO_Device_UH01_TO_UH03".xNEED_MORE_EMPTY := TRUE; ELSIF "DB_JamArea4302".stJam4302_2.stData.Status.nCount >= "DB_JamArea4302".stJam4302_2.stData.Config.nCapacitySet * 80 / 100 THEN //MAX "IO_Device_UH01_TO_UH03".xNEED_MORE_EMPTY := FALSE; END_IF; END_REGION ; END_FUNCTION_BLOCK