FB SAFE GLB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FB32 SEQ1 P01 : Sequencer 1 P01 |
|
|
|
Network 1: Step Switching Mechanism (SSM) #SSM(STEP_PLS := "HMI KEY".P01.GLB.F17_StepPls, STEP_MNS := "HMI KEY".P01.GLB.F18_StepMns, GOTO_STEP := "HMI KEY".P01.GLB.F19_GoToStep, GOTO_STEP_NO := "HMI KEY".P01.GLB.GoToStep, LAST_STEP := 42); |
|
|
|
Network 2: Pre-Setting IF "DI OUT P02".Support.ComCancel_TON.Q THEN #IndexPos1 := #IndexPos2 := 0; END_IF; "M01 RdyToStart" := "M01 HomPosIS" AND "DI MAIN GLB".P02_P01_Box.Request_ReadyToGo; |
|
|
|
Network 3: Sequencer case of securing plate on pump case placement CASE #SSM.S.stepact OF 0: // Waiting for SEQ to start "M01 SEQ1 Active" := FALSE; #MaxParts := "DI MAIN P01".Box_Data.PlaceOn_X * "DI MAIN P01".Box_Data.PlaceOn_Y * 2; #RefPos1.X := "DI MAIN P01".Box_Data.RefPos1_X; #RefPos1.Y := "DI MAIN P01".Box_Data.RefPos1_Y; #RefPos2.X := "DI MAIN P01".Box_Data.RefPos2_X; #RefPos2.Y := "DI MAIN P01".Box_Data.RefPos2_Y; "DI MAIN GLB".P01_P02_Box.Request_Done := FALSE; "DI MAIN GLB".P01_P02_Box.Request := TRUE; "DI MAIN P01".Box_Interface.Occupied_FrmNC := "DI MAIN GLB".P02_P01_Box.Request_ReadyToGo; #SSM.S.stepd := #SSM.S.steps AND "M01 RdyToStart";
1: // XYZGaxis MovAbso towards RefPos PickUp row 1 (Down) IF #SSM.S.stepfc THEN "M01 SEQ1 Active" := TRUE; #IndexPos1 := #IndexPos1 + 1; #ExecuteCoodinate(INDEX_POS := #IndexPos1, PLACES_ON_X := "DI MAIN P01".Box_Data.PlaceOn_X, PLACES_ON_Y := "DI MAIN P01".Box_Data.PlaceOn_Y, REF_POS := #RefPos1, GAP_FACTOR_X := - "DI MAIN P01".Box_Data.Gap_X, GAP_FACTOR_Y := "DI MAIN P01".Box_Data.Gap_Y, TARGET_POS := #TrgtPos); #TrgtPos.Z := "DI MAIN P01".Box_Data.RefPos1_Z; #TrgtPos.R := "DI MAIN P01".Box_Data.RefPos1_R; #TrgtPos.S := "DI MAIN P01".Box_Data.RefPos1_S; ELSE "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := #TrgtPos, VELO_Z := "DI OUT P01".MANUAL.EposVelo_medium, VELO_XYG := "DI OUT P01".MANUAL.EposVelo_fast, ENABLE_X := NOT "DI OUT P01".S120_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".S120_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".S120_Z.HALT_01 AND "DI OUT P01".S120_X.DRV.Support.InPos AND "DI OUT P02".C402.FB_WP, ENABLE_R := NOT "DI OUT P01".MD_R.HALT_01, ENABLE_S := NOT "DI OUT P01".MD_S.HALT_01, MOV_TO_POS_X => "DI OUT P01".S120_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".S120_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".S120_Z.DRV.Support.Cmd_MovAbso, MOV_TO_POS_R => "DI OUT P01".MD_R.DRV.Support.Cmd_MovAbso, MOV_TO_POS_S => "DI OUT P01".MD_S.DRV.Support.Cmd_MovAbso, PRECISION := 0.1, TARGET_REACHED => #SSM.S.c1.start); #SSM.S.stepd := #SSM.S.c1.done; END_IF;
2: // S120_X MovRela Push1_X at row 1 (down) IF #SSM.S.stepfc THEN "DI OUT P01".S120_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.EposVelo_slow; "DI OUT P01".S120_X.DRV.MC_MoveRelative.Distance := - "DI MAIN P01".Box_Data.Push1_X; ELSE "DI OUT P01".S120_X.DRV.Support.Cmd_MovRela := NOT "DI OUT P01".S120_X.HALT_01; #SSM.S.stepd := "DI OUT P01".S120_X.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
3: // Query pump case in box present, else Push2_X at row 1 (down) IF #SSM.S.stepfc THEN IF "E01 B200 PartPresent" THEN #SSM.S.stepd := TRUE; ELSE "DI OUT P01".S120_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.EposVelo_slow; "DI OUT P01".S120_X.DRV.MC_MoveRelative.Distance := - "DI MAIN P01".Box_Data.Push2_X; END_IF; ELSIF NOT "E01 B200 PartPresent" THEN "DI OUT P01".S120_X.DRV.Support.Cmd_MovRela := NOT "DI OUT P01".S120_X.HALT_01; #SSM.S.stepd := "DI OUT P01".S120_X.DRV.Support.InPos AND NOT #SSM.S.steplo; IF #SSM.S.stepd AND NOT #SSM.S.stepeg THEN #IndexPos1 := #IndexPos1 + 1; IF #IndexPos1 = "DI MAIN P01".Box_Data.PlaceOn_X THEN #SSM.S.stepnew := 29; ELSE #SSM.S.stepnew := 1; END_IF; END_IF; #SSM.S.stepeg := #SSM.S.stepd; END_IF;
4: // Y200 gripper vacuum WP at row 1 (down) "DI OUT P01".Y200.VLV_OC.CmdExe_HP := FALSE; "DI OUT P01".Y200.VLV_OC.CmdExe_WP := "HMI KEY".P01.Y200.F12_Enable_WP; #SSM.S.stepd := "DI OUT P01".Y200.FB_WP AND "E01 S201 VacuOk" AND "E01 B200 PartPresent";
5: // XYZGaxis MovAbso towards CentringPos 1 (up) #PosPointer := 1; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.EposVelo_medium, VELO_XYG := "DI OUT P01".MANUAL.EposVelo_fast, ENABLE_X := NOT "DI OUT P01".S120_X.HALT_01 AND "DI OUT P01".S120_Z.DRV.Support.InPos, ENABLE_Y := NOT "DI OUT P01".S120_Y.HALT_01 AND "DI OUT P01".S120_Z.DRV.Support.InPos, ENABLE_Z := NOT "DI OUT P01".S120_Z.HALT_01, ENABLE_R := NOT "DI OUT P01".MD_R.HALT_01 AND "DI OUT P01".S120_Z.DRV.Support.InPos, ENABLE_S := NOT "DI OUT P01".MD_S.HALT_01 AND "DI OUT P01".S120_Z.DRV.Support.InPos, MOV_TO_POS_X => "DI OUT P01".S120_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".S120_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".S120_Z.DRV.Support.Cmd_MovAbso, MOV_TO_POS_R => "DI OUT P01".MD_R.DRV.Support.Cmd_MovAbso, MOV_TO_POS_S => "DI OUT P01".MD_S.DRV.Support.Cmd_MovAbso, PRECISION := 0.1, TARGET_REACHED => #SSM.S.stepd);
6: // S120_Z MovAbso towards CentringPos (down) IF #SSM.S.stepfc THEN #PosPointer := 5; "DI OUT P01".S120_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.EposVelo_medium; "DI OUT P01".S120_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".S120_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".S120_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".S120_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
7: // Y200 vacuum gripper HP at CentringPos (down) "DI OUT P01".Y200.VLV_OC.CmdExe_WP := FALSE; "DI OUT P01".Y200.VLV_OC.CmdExe_HP := "HMI KEY".P01.Y200.F11_Enable_HP AND NOT #SSM.S.c1.done; #SSM.S.c1.start := "DI OUT P01".Y200.FB_HP AND NOT "E01 S201 VacuOk"; #SSM.S.c1.set := 9; #SSM.S.stepd := #SSM.S.c1.done;
8: // Query pump case lies at CentringOk, Y200 vacuum gripper WP #SSM.S.c1.set := 30; "M01 SEQ1 DoWP1" := "E01 B207 CentringOk"; "DI OUT P01".Y200.VLV_OC.CmdExe_HP := FALSE; #SSM.S.c1.start := "DI OUT P01".Y200.VLV_OC.CmdExe_WP := "HMI KEY".P01.Y200.F12_Enable_WP; #SSM.S.stepd := "DI OUT P01".Y200.FB_WP AND "E01 S201 VacuOk" AND "E01 B200 PartPresent" AND #SSM.S.c1.done;
9: // Zaxis MovRela PushUp_Z, IF CentringOk S20 (up) IF #SSM.S.stepfc THEN "DI OUT P01".S120_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.EposVelo_medium; "DI OUT P01".S120_Z.DRV.MC_MoveRelative.Distance := - "DI MAIN P01".Box_Data.PushUp_Z; IF "M01 SEQ1 DoWP1" THEN #SSM.S.stepnew := 20; END_IF; ELSE "DI OUT P01".S120_Z.DRV.Support.Cmd_MovRela := NOT "DI OUT P01".S120_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".S120_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
10: // XYZGaxis MovAbso towards Nok slide pos 4 (up) #PosPointer := 4; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.EposVelo_medium, VELO_XYG := "DI OUT P01".MANUAL.EposVelo_fast, ENABLE_X := NOT "DI OUT P01".S120_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".S120_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".S120_Z.HALT_01, ENABLE_R := NOT "DI OUT P01".MD_R.HALT_01, ENABLE_S := NOT "DI OUT P01".MD_S.HALT_01, MOV_TO_POS_X => "DI OUT P01".S120_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".S120_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".S120_Z.DRV.Support.Cmd_MovAbso, MOV_TO_POS_R => "DI OUT P01".MD_R.DRV.Support.Cmd_MovAbso, MOV_TO_POS_S => "DI OUT P01".MD_S.DRV.Support.Cmd_MovAbso, PRECISION := 10.0, TARGET_REACHED => #SSM.S.stepd);
11: // Zaxis MovAbso towards Nok slide Pos 6 (down) IF #SSM.S.stepfc THEN #PosPointer := 6; "DI OUT P01".S120_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.EposVelo_medium; "DI OUT P01".S120_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".S120_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".S120_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".S120_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
12: // Y200 Gripper vacuum HP, then S1 else S29 at Nok slide (down) IF #SSM.S.stepfc THEN "DatOfMod".P02.STS.ProductCounter.BadParts := "DatOfMod".P02.STS.ProductCounter.BadParts + 1; ELSE "DI OUT P01".Y200.VLV_OC.CmdExe_WP := FALSE; "DI OUT P01".Y200.VLV_OC.CmdExe_HP := "HMI KEY".P01.Y200.F11_Enable_HP; IF "DI OUT P01".Y200.FB_HP AND NOT "E01 S201 VacuOk" THEN #SSM.S.stepd := TRUE; IF #IndexPos1 >= "DI MAIN P01".Box_Data.PlaceOn_X THEN #SSM.S.stepnew := 29; ELSE #SSM.S.stepnew := 1; END_IF; END_IF; END_IF;
|
|
P01 SEQ1 automatic mode |
P01 Pick & Place P01 takes care of the box unloading. The box contains a certain number pump cases. When the box is done, P01 gives in S30 P02 enable signal which allow the lift to go down to position where the box is then transferred out. |