



|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FB42 SEQ1 P01 : Articulated Arm Robot |
|
|
|
|
|
Network 1: Pre-Setting "DI MAIN P02".M00.RdyToStart := "DI MAIN P02".M00.HomPos_SR AND "DI MAIN GLB".M00.AutoEntirePlant_run; |
|
|
|
|
|
Network 2: Define last step #SSM(LAST_STEP := 12); |
|
|
|
|
|
Network 3: Step Switching Mechanism (SSM) CASE #SSM.S.stepact OF 0: // Waiting for SEQ to start "DI MAIN P02".to_P01.Done := "DI MAIN P01".to_P02.EnabledToMove := "DI MAIN P02".M00.SEQ1_Busy := FALSE; "DI MAIN P02".to_P01.Request := "DI MAIN P02".M00.ReadyToStart; "DI MAIN P02".to_P01.EnabledToMove := "DI OUT P02".M202.DRV.CC.ReadyToGiveOver_ToNC AND #SSM.S.stepa; #SSM.S.stepd := #SSM.S.steps AND "DI MAIN P02".M00.ReadyToStart AND "DI MAIN P02".to_P01.EnabledToMove AND "DI OUT P01".CAMERA.Recording.CEA_code <> 16#CEA_0000;
1: // Waiting for PickUp enabled IF #SSM.S.stepfc THEN "HMI KEY".Plantinfo_P02.Product_Packaging_Done := FALSE; #Index_Pos += 1; #Coordinate_XY(MOD_Y := TRUE, INDEX_POS := #Index_Pos, GAP_FACTOR_X := "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Gap_X, GAP_FACTOR_Y := "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Gap_Y, PLACES_ON_X := "DI OUT P02".M201_Packaging_Pallet.Layer_Data.PlacesOn_X, PLACES_ON_Y := "DI OUT P02".M201_Packaging_Pallet.Layer_Data.PlacesOn_Y, REF_POS := "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Reference_Pos, TARGET_POS := #Calculated_Pos); IF #Index_Pos = "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Places THEN "HMI KEY".Plantinfo_P02.Packaging_Pallet.Distance_to_LayerTop -= "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Gap_Z; END_IF; ELSE #SSM.S.stepd := "DI MAIN P01".to_P02.EnabledToMove AND "E00 PickUp enabled"; END_IF;
2: // Articulated Arm MoveDirectAbsolute Pos[1] WCS PickUp UP IF #SSM.S.stepfc THEN "DI MAIN P02".M00.SEQ1_Busy := TRUE; #RunTimeCounter := 0; #No := 1; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.VelocityFactor := "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.VelocityFactor := "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.TransitionParameter[1] := "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.TransitionParameter[1] := -1.0; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.BufferMode := "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.BufferMode := 2; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.CoordSystem := 0; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.Position := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Absolute := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
3: // Articulated Arm MoveDirectRelative Pos[2] WCS PickUp DOUN IF #SSM.S.stepfc THEN "DI MAIN P02".M00.SEQ1_Busy := TRUE; #No := 2; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.Distance := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Relative := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
4: // Y200 Packaging Gripper WP "DI OUT P02".Y200.VLV_O.CmdExe_HP := FALSE; "DI OUT P02".Y200.VLV_O.CmdExe_WP := "HMI KEY".P01.Y100.F12_Enable_WP; #SSM.S.stepd := "DI OUT P02".Y200.FEEDBACK_WP;
5: // Articulated Arm MoveDirectRelative Pos[3] WCS PickUp UP IF #SSM.S.stepfc THEN #No := 3; #SSM.S.c1.start := TRUE; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.Distance := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.Active AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Relative := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa AND #SSM.S.c1.done; END_IF;
6: // Articulated MoveDirectAbsolute Pos[4] WCS Place UP *** IF #SSM.S.stepfc THEN #No := 4; #SSM.S.c1.start := TRUE; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectAbsolute.Position := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis := #Calculated_Pos; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.Active AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Absolute := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa AND #SSM.S.c1.done; END_IF;
7: // Articulated Arm MoveDirectRelative Pos[5] WCS Place DOUN IF #SSM.S.stepfc THEN #No := 5; "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis[3] := - "HMI KEY".Plantinfo_P02.Packaging_Pallet.Distance_to_LayerTop; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.Distance := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Relative := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
8: // Y200 Packaging Gripper HP "DI OUT P02".Y200.VLV_O.CmdExe_WP := FALSE; "DI OUT P02".Y200.VLV_O.CmdExe_HP := TRUE; #SSM.S.stepd := "DI OUT P02".Y200.FEEDBACK_HP;
9: // Articulated Arm MoveDirectRelative Pos[6] WCS Place UP IF #SSM.S.stepfc THEN #No := 6; "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis[3] := "HMI KEY".Plantinfo_P02.Packaging_Pallet.Distance_to_LayerTop; "DI OUT P02".ROBOT_ARM.DRV.MC_MoveDirectRelative.Distance := "HMI KEY".Plantinfo_P02.MoveDirect_WCS[#No].Axis; ELSE #SSM.S.stepd := "DI OUT P02".ROBOT_ARM.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P02".ROBOT_ARM.DRV.Support.Cmd_MoveDirect_Relative := "DI OUT P02".ROBOT_ARM.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
10: // Query Product_Packaging_Done IF #SSM.S.stepfc THEN #SSM.S.c1.set := 20; #SSM.S.c1.start := TRUE; "DI MAIN P02".M00.ProductCounter.GoodParts += 2; ELSIF #Index_Pos >= "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Places THEN #Index_Pos := 0; #Index_Layer += 1; IF "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Reference_Pos[4] = 90.0 THEN "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Reference_Pos[4] := 0.0; ELSIF "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Reference_Pos[4] = 0.0 THEN "DI OUT P02".M201_Packaging_Pallet.Layer_Data.Reference_Pos[4] := 90.0; END_IF; END_IF; IF #Index_Layer > "DI OUT P02".M201_Packaging_Pallet.Layer THEN #Index_Layer := 1; "DI MAIN P02".to_P01.Done := TRUE; ELSIF "DI MAIN P02".to_P01.Done AND "DI MAIN P01".to_P02.Done THEN #SSM.S.stepnew := 11; "DI MAIN P02".to_P01.EnabledToMove := FALSE; #SSM.S.stepd := TRUE; ELSIF #SSM.S.c1.done AND NOT "DI MAIN P02".to_P01.Done THEN #SSM.S.stepnew := 0; #SSM.S.stepd := TRUE; END_IF;
11: // Y201 Packaging stopper WP "DI OUT P02".Y201.VLV_O.CmdExe_WP := "HMI KEY".P02.Y201.F12_Enable_WP; "DI OUT P02".Y202.VLV_O.CmdExe_WP := "HMI KEY".P02.Y202.F12_Enable_WP; #SSM.S.stepd := "DI OUT P02".Y201.FEEDBACK_WP AND "DI OUT P02".Y202.FEEDBACK_WP AND NOT "E00 M202 LS";
12: // M201 & M202 Packaging Output Conveyor IF #SSM.S.steplo THEN "DI OUT P02".M201.DRV.CmdExe_WP := "HMI KEY".P02.M201.F12_Enable_WP; "DI OUT P02".M202.DRV.CmdExe_WP := "HMI KEY".P02.M202.F12_Enable_WP; ELSIF ("DI OUT P02".M201.DRV.LampWP AND "DI OUT P02".M202.DRV.LampWP AND "E00 M202 LS") OR NOT #SSM.S.stepa THEN "DI OUT P02".Y201.VLV_O.CmdExe_WP := "DI OUT P02".Y202.VLV_O.CmdExe_WP := "DI OUT P02".M201.DRV.CmdExe_WP := "DI OUT P02".M202.DRV.CmdExe_WP := FALSE; ELSE #SSM.S.stepd := "DI OUT P02".M201.DRV.LampHP AND "DI OUT P02".M202.DRV.LampHP AND "DI OUT P02".Y201.FEEDBACK_HP AND "DI OUT P02".Y201.FEEDBACK_HP; END_IF;
13: // Query Packaging operation mode done IF "HMI KEY".P00.GLB.F6_OM_RUN_DOWN_ON THEN "DI MAIN P01".M00.SEQ1_Done := "DI MAIN P02".M00.SEQ1_Done := "HMI KEY".Plantinfo_P02.Product_Packaging_Done := TRUE; "HMI KEY".P00.GLB.F6_OM_RUN_DOWN_ON := FALSE; "DI OUT P01".CAMERA.Recording.CEA_code := 16#CEA_0000; ELSE #SSM.S.stepd := NOT #SSM.S.steplo; END_IF; END_CASE; |
|