Home

 

Erfahrung

 

Referenzen

 

Sondermaschinen

 

MSR-Maschinen

 

SPS-Programmierung

 

Visualisierung HMI

 

Elektro CAD

 

Leistungsprofil

 

Personalia

 

SW-Development

 

Dokumentation

 

 

 

Impressum & DSGVO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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;