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

3101 lines
171 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FUNCTION_BLOCK "FB_Main"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_IN_OUT
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