Home

 

Erfahrung

 

Referenzen

 

Sondermaschinen

 

MSR-Maschinen

 

SPS-Programmierung

 

Visualisierung HMI

 

Elektro CAD

 

Leistungsprofil

 

Personalia

 

SW-Development

 

Dokumentation

 

 

 

Impressum & DSGVO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FB32 SEQ1 P01: Pick and Place and Batching sequencer

 

[next page..]

 

Netzwerk 1: SEQ1 Pre-Setting

 

IF "DI MAIN GLB".Interface.FilterPicked_Conv1Ack THEN

    "DI MAIN GLB".Interface.FilterPicked_Conv1 := FALSE;

END_IF;

IF "DI MAIN GLB".Interface.FilterPicked_Conv2Ack THEN

    "DI MAIN GLB".Interface.FilterPicked_Conv2 := FALSE;

END_IF;

IF "DI MAIN GLB".Interface.FilterStack_Finished AND NOT "DI MAIN GLB".Interface.FilterStack_FinishedAck THEN

    #NextConveyor := #NextConveyor + 1;

    IF #NextConveyor > 2 THEN

        #NextConveyor := 1;

    END_IF;

    "DI MAIN GLB".Interface.FilterStack_FinishedAck := TRUE;

    #PickPlaceStarted:= FALSE;

    #LastActPos := #IndexPos := 0;

END_IF;

IF NOT "DI MAIN GLB".Interface.FilterStack_Finished THEN

    "DI MAIN GLB".Interface.FilterStack_FinishedAck := FALSE;

END_IF;

IF "DI MAIN GLB".Interface.FilterStack_TranspAck THEN

    "DI MAIN GLB".Interface.FilterStack_Finished := FALSE;

END_IF;

IF NOT "DI MAIN GLB".Interface.FilterStack_Request THEN

    "DI MAIN GLB".Interface.FilterPlaced_OutPutConv := FALSE;

END_IF;

// Write FilterStack_Request

"DI MAIN GLB".Interface.FilterStack_Request := NOT ("DI MAIN GLB".Interface.FilterStack_Finished OR "DI OUT P01".M03.DRV.LampWP);

"M01 RdyToStart" := "M01 HomPosIS" AND ("DI MAIN GLB".Interface.MinTraysPresent_Conv1 OR "DI MAIN GLB".Interface.MinTraysPresent_Conv2 OR #PickPlaceStarted);

 

 

 

Netzwerk 2: Execute SEQ1

 

#SSM1(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,

      MAX_STEP := 70);

 

 

 

Netzwerk 3: Step jump distributor

 

CASE #SSM1.S.stepact OF

    0: // Query M01 Conv.1 or M02 Conv.2

        "DI MAIN P01".SEQ1.PosIndex := 0;

        "M01 SEQ1 Active" := FALSE;

        IF #NextConveyor = 1

            AND NOT "DI MAIN GLB".Interface.MinTraysPresent_Conv1

            AND "DI MAIN GLB".Interface.MinTraysPresent_Conv2

            AND NOT #PickPlaceStarted THEN

            #NextConveyor := 2;

        ELSIF #NextConveyor = 2

            AND NOT "DI MAIN GLB".Interface.MinTraysPresent_Conv2

            AND "DI MAIN GLB".Interface.MinTraysPresent_Conv1

            AND NOT #PickPlaceStarted THEN

            #NextConveyor := 1;

        END_IF;

        IF #SSM1.S.steps AND "M01 RdyToStart" THEN

            #SSM1.S.stepd := #PickPlaceStarted := TRUE;

            #IndexPos := #LastActPos;

            #MaxPos := "DatOfMod".P01.STS.Rows_on_x_axis * "DatOfMod".P01.STS.Rows_on_y_axis * "DatOfMod".P01.STS.Layers_on_z_axis;

        END_IF;

       

    1: // M01 Conveyer 1 or M02 Conveyor or PrintTest

        IF "DI MAIN GLB".Interface.MinTraysPresent_Conv1

            AND #NextConveyor = 1

            AND "E01 M01 FltrAvailable"

            AND NOT "DI MAIN GLB".Interface.FilterPicked_Conv1 THEN

            #SSM1.S.stepnew := 10;

            #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;

        ELSIF "DI MAIN GLB".Interface.MinTraysPresent_Conv2

            AND #NextConveyor = 2

            AND "E01 M02 FltrAvailable"

            AND NOT "DI MAIN GLB".Interface.FilterPicked_Conv2 THEN

            #SSM1.S.stepnew := 20;

            #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;

        END_IF;

       

    10: // XYZRaxis MovAbso towards Pos.1 M01 conveyor 1 (down)

        "M01 SEQ1 Active" := TRUE;

        #PosIndex := 1;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3,

                             PRECISION := 0.5,

                             TARGET_REACHED => #SSM1.S.stepd);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on AND NOT "E01 C01 FltrAvailable";

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

    11: // C01 Gripper jaws WP

        "DI OUT P01".C01.VLV_OC.CmdExe_HP := FALSE;

        "DI OUT P01".C01.VLV_OC.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP;

        #SSM1.S.stepd := "DI MAIN GLB".Interface.FilterPicked_Conv1 := "E01 C01 FltrAvailable" AND "DI OUT P01".C01.FB_WP;

        IF #HMI_PrintTest THEN

            #SSM1.S.stepnew := 33;

        ELSE

            #SSM1.S.stepnew := 30;

        END_IF;

       

    20: // XYZRaxis MovAbso towards Pos.2 M01 conveyor 2 (down)

        "M01 SEQ1 Active" := TRUE;

        #PosIndex := 2;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3,

                             PRECISION := 0.5,

                             TARGET_REACHED => #SSM1.S.stepd);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on;

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

    21: // C01 Gripper jaws WP

        "DI OUT P01".C01.VLV_OC.CmdExe_HP := FALSE;

        "DI OUT P01".C01.VLV_OC.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP;

        #SSM1.S.stepd := "DI MAIN GLB".Interface.FilterPicked_Conv2 := "E01 C01 FltrAvailable" AND "DI OUT P01".C01.FB_WP;

        IF #HMI_PrintTest THEN

            #SSM1.S.stepnew := 33;

        ELSE

            #SSM1.S.stepnew := 30;

        END_IF;

       

    30: // XYZRaxis MovAbso towards Pos.3 TopView camera 1 (up)

        #PosIndex := 3;

        "DI MAIN GLB".Interface.FilterPicked_Conv1Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 1;

        "DI MAIN GLB".Interface.FilterPicked_Conv2Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 2;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_2,

                             POS_WINDOW := TRUE,

                             PRECISION := 9.0,

                             TARGET_REACHED => #SSM1.S.stepd);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01;

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

    31: // Start TopView camera 1

        IF #SSM1.S.stepfc THEN

            "DI OUT P01".TopViewCam.Support.Report.AuditResultOk := FALSE;

        ELSE

            "M01 Cam1TopViewTrigger" :=

            NOT ("DI OUT P01".TopViewCam.oxError OR "DI OUT P01".TopViewCam.Support.OUT.oxBusy)

            AND "DI OUT P01".TopViewCam.oiActAppNo > 0;

            #SSM1.S.stepd := "DI OUT P01".TopViewCam.Support.OUT.oxDone;

        END_IF;

       

    32: // Write TopView Camera 1 ok or Nok

        IF "DI OUT P01".TopViewCam.ARchSendBuf[10] = 'O' THEN

            "DI OUT P01".TopViewCam.Support.Report.AuditResultOk := TRUE;

        ELSE

            "DI OUT P01".TopViewCam.Support.Report.AuditResultNok := TRUE;

            "DI OUT P01".TopViewCam.Support.Report.SpecificErrorNo := 4101;

        END_IF;

        #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;

       

    33: // XYZRaxis MovAbso towards TrgtPos.4 Execute Scanner if inPos

        IF #SSM1.S.stepfc THEN

            "RCV_P2P_RS232".Scanned_Data[0] := "RCV_P2P_RS232".Scanned_Data[30] := 16#C;

            #SSM1.S.c2.set := 30;

            #PosIndex := 4;

        END_IF;

        "DI MAIN GLB".Interface.FilterPicked_Conv1Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 1;

        "DI MAIN GLB".Interface.FilterPicked_Conv2Ack := "E01 C01 FltrAvailable" AND #NextConveyor = 2;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_2,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3,

                             PRECISION := 9.0,

                             TARGET_REACHED => #tmp_llo);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01;

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01 AND "DI OUT P01".V90_Z.drv_nc_delay_on;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01 AND "DI OUT P01".V90_Z.drv_nc_delay_on;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

        IF "DI OUT P01".#Scanner_ET200SP.Support_AT.%X3 THEN

            #SSM1.S.c2.start := TRUE;

        END_IF;

        IF #tmp_llo AND #SSM1.S.c2.done THEN

            IF "RCV_P2P_RS232".Scanned_Data[0] = 16#C OR "RCV_P2P_RS232".Scanned_Data[30] = 16#C THEN

                #SSM1.S."1_FAULT_00_15".%X1 := "DI OUT P01".Scanner_ET200SP.Support_AT.%X3;

            ELSE

                #SSM1.S.stepd := TRUE;

            END_IF;

        END_IF;

       

    34: // Read ExpiereDate, Name, Type, ID, Lot number

        IF #SSM1.S.DlyStart.Q THEN

            Chars_TO_Strg(Chars := "RCV_P2P_RS232".Scanned_Data,

                          pChars := 1,

                          Cnt := 30,

                          Strg => #String_Cache."String[1]");

            Chars_TO_Strg(Chars := "RCV_P2P_RS232".Scanned_Data,

                          pChars := 31,

                          Cnt := 30,

                          Strg => #String_Cache."String[2]");

        ELSE

            #SSM1.S.stepd := TRUE;

        END_IF;

       

    35: // XYZRaxis MovAbso towards TrgtPos.5 Print Start

        #PosIndex := 5;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_2,

                             PRECISION := 9.0,

                             TARGET_REACHED => #SSM1.S.stepd);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01;

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

    36: // XYZRaxis MovJogHP towards Pos.10, and print (slow)

        IF #SSM1.S.stepfc THEN

            #PosIndex := 10;

            "DI OUT P01".V90_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZRaxisVelo_1;

            "DI OUT P01".HITACHI.DataToPrint."String[1]" := MID_STRING(IN := #String_Cache."String[1]", L := 28, P := 3);

            "DI OUT P01".HITACHI.DataToPrint."String[2]" := MID_STRING(IN := #String_Cache."String[2]", L := 28, P := 1);

        END_IF;

        "M01 Scan SendPrintData" := "DI OUT P01".HITACHI.READY;

       

        "M01 PRNT RunSignal" := "DI OUT P01".HITACHI.READY

        AND "DI OUT P01".V90_X.DRV.Support.ActPos < "DI OUT P01".MANUAL.XYZR_TrgtPos[5].X

        OR "DI OUT P01".V90_X.DRV.Support.ActPos > "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex].X;

       

        IF "DI OUT P01".HITACHI.PRINT_COMPLET THEN

            IF #HMI_PrintTest THEN

                #HMI_PrintTest := FALSE;

                #SSM1.S.stepnew := 40;

            END_IF;

            #SSM1.S.stepd := TRUE;

        END_IF;

        "M01 V90_X MovJogHP" := NOT ("DI OUT P01".V90_X.HALT_01 OR #SSM1.S.stepd) AND "DI OUT P01".HITACHI.PRINTING_01;

       

    37: // XYZRaxis MovAbso towards Pos.6 TextView camera 2 start

        IF #SSM1.S.stepfc THEN

            #PosIndex := 6;

            "DI OUT P01".V90_X.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZRaxisVelo_2;

            "DI OUT P01".V90_X.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex].X;

        ELSE

            "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

            #SSM1.S.stepd := "DI OUT P01".V90_X.DRV.Support.InPos;

        END_IF;

       

    38: // Camera 2 check print quality

        IF #SSM1.S.stepfc THEN

            "DI OUT P01".TextViewCam.Support.Report.AuditResultOk := FALSE;

        ELSE

            "M01 Cam2TextViewTrigger" :=

            NOT ("DI OUT P01".TextViewCam.oxError OR "DI OUT P01".TextViewCam.Support.OUT.oxBusy)

            AND "DI OUT P01".TextViewCam.oiActAppNo > 0;

        END_IF;

        IF "DI OUT P01".TextViewCam.ARchSendBuf[10] = 'O' THEN

            "DI OUT P01".TextViewCam.Support.Report.AuditResultOk := TRUE;

        ELSE

            "DI OUT P01".TextViewCam.Support.Report.AuditResultNok := TRUE;

            "DI OUT P01".TextViewCam.Support.Report.SpecificErrorNo := 4301;

        END_IF;

        #SSM1.S.stepd := "DI OUT P01".TextViewCam.Support.OUT.oxDone AND NOT #SSM1.S.DlyStart.Q;

       

    39: // Qery where to go to Batching/Nok/QS

        IF NOT #HMI_Start_QA AND ("DI OUT P01".TopViewCam.Support.Report.AuditResultNok

            OR "DI OUT P01".TextViewCam.Support.Report.AuditResultNok

            OR #HMI_PrintTest) THEN

            #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;

        ELSIF #HMI_Start_QA

            AND "DI OUT P01".TopViewCam.Support.Report.AuditResultOk

            AND "DI OUT P01".TextViewCam.Support.Report.AuditResultOk THEN

            #SSM1.S.stepnew := 60;

        ELSIF "DI OUT P01".TopViewCam.Support.Report.AuditResultOk

            AND "DI OUT P01".TextViewCam.Support.Report.AuditResultOk

            AND NOT #HMI_Start_QA THEN

            #SSM1.S.stepnew := 50;

        END_IF;

        #SSM1.S.stepd := NOT #SSM1.S.DlyStart.Q;

       

    40: // XYZRaxis MovAbso towards Pos.8 NokPusher

        #PosIndex := 8;

        "FC POS REACHED P01"(START := #SSM1.S.stepfc,

                             TARGET_POS := "DI OUT P01".MANUAL.XYZR_TrgtPos[#PosIndex],

                             SET_VELO_Z := "DI OUT P01".MANUAL.XYZRaxisVelo_1,

                             SET_VELO_XYR := "DI OUT P01".MANUAL.XYZRaxisVelo_3,

                             PRECISION := 0.5,

                             TARGET_REACHED => #SSM1.S.stepd);

        "M01 V90_Z MovAbso" := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.drv_nc_delay_on AND "DI OUT P01".V90_Y.drv_nc_delay_on;

        "M01 V90_X MovAbso" := NOT "DI OUT P01".V90_X.HALT_01;

        "M01 V90_Y MovAbso" := NOT "DI OUT P01".V90_Y.HALT_01;

        "M01 V90_R MovAbso" := NOT "DI OUT P01".V90_R.HALT_01;

       

    41: // C01 Filter gripper HP placing filter on C02 Nok pusher

        "DI MAIN P01".SEQ1.HMI_PrintTest := "DI OUT P01".C01.VLV_OC.CmdExe_WP := FALSE;

        "DI OUT P01".C01.VLV_OC.CmdExe_HP := "HMI KEY".P01.C01.F11_Enable_HP;

        IF "DI OUT P01".C01.FB_HP AND "E01 C02 FltrPlaced" THEN

            "DI MAIN GLB".Interface.FilterPlaced_NokPusher := #SSM1.S.stepd := TRUE;

            #SSM1.S.stepnew := 1;

        END_IF;

       

[next page..]