FB SAFE GLB

Textfeld:

 

Home

 

Erfahrung

 

Referenzen

 

Sondermaschinen

 

MSR-Maschinen

 

SPS-Programmierung

 

Visualisierung HMI

 

Elektro CAD

 

Leistungsprofil

 

Personalia

 

SW-Development

 

Dokumentation

 

 

 

Impressum & DSGVO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FB32 SEQ1 P01 Sequencer 1 P01

 

[to following page..]

 

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;

 

[to following page..]  

 

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.