Home

 

Erfahrung

 

Referenzen

 

Sondermaschinen

 

MSR-Maschinen

 

SPS-Programmierung

 

Visualisierung HMI

 

Elektro CAD

 

Leistungsprofil

 

Personalia

 

SW-Development

 

Dokumentation

 

 

 

Impressum & DSGVO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FB32 SEQ1 P01 Sequencer 1

 

 

 

Netzwerk 1: SEQ1 Pre-Setting

 

#Interlock_PreSleeve_P1 :=

"HMI KEY".P01."30T1_Z".F12_Enable_WP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 1

AND NOT "A01 Y12 Vaccum 1 on" AND NOT "A01 Y13 Vaccum 2 on"

AND "DI OUT P01".MANUAL.GLB.Enbl_PreSleeveP1;

#Interlock_Sleeve_P2 :=

"HMI KEY".P01."30T1_Z".F12_Enable_WP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 2

AND "DI OUT P01".MANUAL.GLB.Enbl_SleeveP2;

#Interlock_PreWashers_P3 :=

"HMI KEY".P01."30T1_Z".F11_Enable_HP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 3

AND "DI OUT P01".MANUAL.GLB.Enbl_PreWashersP3;

#Interlock_Washers_P4 :=

"HMI KEY".P01."30T1_Z".F12_Enable_WP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 4

AND "DI OUT P01".MANUAL.GLB.Enbl_WashersP4;

#Interlock_HomePos_P5 :=

"HMI KEY".P01."30T1_Z".F11_Enable_HP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 5;

#Interlock_CoreTop_P6 :=

"HMI KEY".P01."30T1_Z".F12_Enable_WP

AND "DI OUT P01"."DSM IO".OUT.ProcessNumber = 6

AND "E01 Y13 Vaccum 1 ok" AND "E01 Y13 Vaccum 2 ok"

AND "DI OUT P01".MANUAL.GLB.Enbl_CoreTopP6;

// Set Greasing High Speed Countr value

"DI OUT P01"."HSC IO".InOut.SetCountValue := #SSM1.S.stepact = 2;

// Read Final Values

"DI OUT P01"."DSM IO".IN.Read_Final_Values := FALSE;

 

 

 

Netzwerk 2: Query bad part was inserted into NOK-box

 

IF #NOK_Part_1stDetection AND #NOK_Part_2edDetection AND "E01 S67 NIO-Box 2.ini" THEN

    "M01 SEQ1 WP1 DnNOK" := #NOK_Part_1stDetection:=#NOK_Part_2edDetection:=FALSE;

END_IF;

IF "M01 SEQ1 WP1 DnNOK" AND NOT "E01 S67 NIO-Box 2.ini" AND "E01 S66 NIO-Box 1.ini" THEN

    #NOK_Part_1stDetection := TRUE;

ELSIF #NOK_Part_1stDetection AND NOT "E01 S66 NIO-Box 1.ini" AND "E01 S67 NIO-Box 2.ini" THEN

    #NOK_Part_2edDetection := true;

END_IF;

 

 

 

Netzwerk 3: 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 := 18);

 

 

 

Netzwerk 4: Step jump distributor

 

CASE #SSM1.S.stepact OF

 

    0:  // Waiting for SEQ1 enable

        "M01 SEQ1 Active" := FALSE;

        "M01 RdyToStart" :=

        "E01 S36 Heating 1+2 on"

        AND "DI OUT P01"."DSM IO".OUT.PLCValuesWritten

        AND "E01 S64 GreasePressur OK"

        AND "E01 S34 Heating 1 alarm"

        AND "E01 S35 Heating 2 alarm"

        AND "E01 S11 Washer above"

        AND "E01 S10 Sleeve"

        AND "E01 S43 Washer below"

        AND "E01 S40 RubberCore"

        AND "E01 S16 RubberCoreOK"

        AND "E01 S41 Tray left"

        AND "E01 Y13 Vaccum 2 ok"

        AND "E01 S42 Tray right"

        AND "E01 Y13 Vaccum 1 ok"

        AND NOT "M01 SEQ1 WP1 DnNOK";

       

        #SSM1.S.stepd := "M01 RdyToStart" AND #SSM1.S.steps AND "E01 2A3 LightCurtain active" AND (#AUTO_ON OR "E00 1S1 Start");

 

    1:  // Assign SEQ1 active

        "M01 SEQ1 Active" := TRUE;

        IF #SSM1.S.stepfc THEN

            #Grease_dosing_count := 0;

            RETURN;

        END_IF;

        #SSM1.S.stepd := TRUE;

 

    2:  // Y30/Y31 Grease nozzle 1+2 WP  

        #SSM1.S.c1.start :=

        "DI OUT P01"."Y30 GreasNozzel 1".VLV.CmdExe_WP :=

        "DI OUT P01"."Y31 GreasNozzel 2".VLV.CmdExe_WP := TRUE;

        #SSM1.S.c1.set := 1;

        #SSM1.S.stepd := #SSM1.S.c1.done;

 

    3:  // Y30/Y31 Grease nozzle 1+2 WP   

        IF #SSM1.S.stepfc THEN

            "DI OUT P01"."Y30 GreasNozzel 1".VLV.CmdExe_WP :=

            "DI OUT P01"."Y31 GreasNozzel 2".VLV.CmdExe_WP := FALSE;

            #Grease_dosing_count := #Grease_dosing_count + 1;

        END_IF;

        // 30T1-Z Execute Prog.6 Core top

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 6;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_CoreTop_P6,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #tmp_save_llo);

        IF #Grease_dosing_count > "DI OUT P01".MaPa.DosingCycle THEN

            #SSM1.S.stepd := #tmp_save_llo;

            // Query grease volume too low

            #Grease_FLT := "DI OUT P01".MaPa.Last_GreasVolume <= "DI OUT P01".MaPa.Min_GreasVolume;

        ELSE

            #SSM1.S.stepnew := 2;

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

            #SSM1.S.c1.set := 1;

            #SSM1.S.stepd := #SSM1.S.c1.done;

        END_IF;

 

    4:  // C01-2 Tray above WP

        "DI OUT P01"."C01-2 Tray above".VLV.CmdExe_HP := FALSE;

        "DI OUT P01"."C01-2 Tray above".VLV.CmdExe_WP := "HMI KEY".P01."C01-2 Tray above".F12_Enable_WP;

        #SSM1.S.stepd := "DI OUT P01"."C01-2 Tray above".FB_WP;

 

    5:  // C03-4 Tray below WP  

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_HP := FALSE;

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_WP := "HMI KEY".P01."C03-4 Tray below".F12_Enable_WP;

        #SSM1.S.stepd := "DI OUT P01"."C03-4 Tray below".FB_WP;

 

    6:  // Query rubber core wrongly placed   

        IF #SSM1.S.stepfc THEN

            // Rubber core wrongly placed

            IF "DI OUT P01"."C03-4 Tray below".FB_WP AND NOT "E01 S16 RubberCoreOK" THEN

                #Core_FLT := TRUE;

            END_IF;

            RETURN;

        ELSE

            #SSM1.S.stepd := TRUE;

        END_IF;

 

    7:  // 30T1-Z DSM Execute Prog.1 PreSleeve   

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 1;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_PreSleeve_P1,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #SSM1.S.stepd);

 

    8:  // C01-2/C01-3 Washer above WP Washer below HP + C01-2/C03-4 Tray above HP Tray below WP   

        "DI OUT P01"."C01-2 Washer above".VLV.CmdExe_HP := FALSE;

        "DI OUT P01"."C01-2 Washer above".VLV.CmdExe_WP := "HMI KEY".P01."C01-2 Washer above".F12_Enable_WP;

       

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_WP := FALSE;

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_HP := "HMI KEY".P01."C01-3 Washer below".F11_Enable_HP;

       

        "DI OUT P01"."C01-2 Tray above".VLV.CmdExe_WP := FALSE;

        "DI OUT P01"."C01-2 Tray above".VLV.CmdExe_HP := "HMI KEY".P01."C01-2 Tray above".F11_Enable_HP;

       

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_HP := FALSE;

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_WP := "HMI KEY".P01."C03-4 Tray below".F12_Enable_WP;

        #SSM1.S.stepd :=

        "DI OUT P01"."C01-2 Washer above".FB_WP

        AND "DI OUT P01"."C01-3 Washer below".FB_HP

        AND "DI OUT P01"."C01-2 Tray above".FB_HP

        AND "DI OUT P01"."C03-4 Tray below".FB_WP;

 

    9:  // 30T1-Z DSM Execute Prog.1 Sleeve    

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 2;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_Sleeve_P2,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #SSM1.S.stepd);

 

    10:  // 30T1-Z DSM Execute Porg.3 PreWasher   

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 3;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_PreWashers_P3,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #SSM1.S.stepd);

 

    11:  // C03-4 Tray below HP   

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_WP := FALSE;

        "DI OUT P01"."C03-4 Tray below".VLV.CmdExe_HP := "HMI KEY".P01."C03-4 Tray below".F11_Enable_HP;

        #SSM1.S.stepd := "DI OUT P01"."C03-4 Tray below".FB_HP;

 

    12:  // C01-3 Washer below WP

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_HP := FALSE;

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_WP := "HMI KEY".P01."C01-3 Washer below".F12_Enable_WP;

        #SSM1.S.stepd := "DI OUT P01"."C01-3 Washer below".FB_WP;

 

    13:  // 30T1-Z DSM Execute Prog.4 Washers   

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 4;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_Washers_P4,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #SSM1.S.stepd);

 

    14:  // DSM copy final force  

        "DI OUT P01".MaPa.DSM_FinalForce := "DI OUT P01".FinalValues.Final.Force;

        "DI OUT P01".MaPa.DSM_FinalPosition := "DI OUT P01".FinalValues.Final.Position;

        // DSM query final force too high

        #ForceMax_FLT := "DI OUT P01".MaPa.DSM_FinalForce > "DI OUT P01".MaPa.Washer_MaxForce;

        // DSM query final force too low

        #ForceMin_FLT := "DI OUT P01".MaPa.DSM_FinalForce < "DI OUT P01".MaPa.Washer_MinForce;

        // DSM read_Final_Values

        #SSM1.S.stepd := "DI OUT P01"."DSM IO".IN.Read_Final_Values := TRUE;

 

    15:  // 30T1-Z Execute Prog.5 StartPos

        IF #SSM1.S.stepfc THEN

            #DSM_ActPos_now := "DI OUT P01"."30T1_Z".DRV.Support.ActPos - 10.0;

        END_IF;

        "DI OUT P01"."DSM IO".IN.ProcessNumber := 5;

        #"30T1_Z_DataSET"(START := #SSM1.S.stepnc AND #Interlock_HomePos_P5,

                          DATA_SET := "DI OUT P01".PLC_to_DSM["DI OUT P01"."DSM IO".IN.ProcessNumber],

                          JOG_TO_POS_HP := "M01 30T1_Z JogToPosHP",

                          JOG_TO_POS_WP := "M01 30T1_Z JogToPosWP",

                          MOVE_ABSO := "M01 30T1_Z GoToPosAbso",

                          MOVE_RELA := "M01 30T1_Z GoToPosRela",

                          TARGET_REACHED => #tmp_save_llo);

        // C01-3 Washer below HP

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_WP := FALSE;

        "DI OUT P01"."C01-3 Washer below".VLV.CmdExe_HP := "HMI KEY".P01."C01-3 Washer below".F11_Enable_HP AND "DI OUT P01"."30T1_Z".DRV.Support.ActPos < #DSM_ActPos_now;

        #SSM1.S.stepd := #Interlock_HomePos_P5 AND "DI OUT P01"."C01-3 Washer below".FB_HP AND #tmp_save_llo;

 

       

    16:  // C01-2 Washer above HP   

        "DI OUT P01"."C01-2 Washer above".VLV.CmdExe_WP := FALSE;

        "DI OUT P01"."C01-2 Washer above".VLV.CmdExe_HP := "HMI KEY".P01."C01-2 Washer above".F11_Enable_HP;

        #SSM1.S.stepd := "M01 HomPos";

 

    17:  // Query assembly NOK   

        IF #SSM1.S.stepfc THEN

            "DI OUT P01"."DSM IO".IN.ProcessNumber := 0;

            #FLT."3_FAULT_00_15".%X0 := #Core_FLT;

            #FLT."3_FAULT_00_15".%X1 := #Grease_FLT;

            #FLT."3_FAULT_00_15".%X2 := #ForceMax_FLT;

            #FLT."3_FAULT_00_15".%X3 := #ForceMin_FLT;

            // Assign WP1 done OK or NOK

            "M01 SEQ1 WP1 DnNOK" := #FLT."3_FAULT_00_15".%X0 OR #FLT."3_FAULT_00_15".%X1 OR #FLT."3_FAULT_00_15".%X2 OR #FLT."3_FAULT_00_15".%X3;

            IF "M01 SEQ1 WP1 DnNOK" THEN

                "DatOfMod".P01.STS.CounterBadParts := "DatOfMod".P01.STS.CounterBadParts + 1;

            ELSE

                "DatOfMod".P01.STS.CounterGoodParts := "DatOfMod".P01.STS.CounterGoodParts + 1;

                "M01 SEQ1 WP1 DnOK" := TRUE;

            END_IF;

            "DatOfMod".P01.STS.CounterTotalParts := "DatOfMod".P01.STS.CounterBadParts + "DatOfMod".P01.STS.CounterGoodParts;

        ELSE

            #SSM1.S.stepd := TRUE;

        END_IF;

 

    18:  // Pleas pick up final component

        "M01 SEQ1 Done" := NOT "E01 S40 RubberCore";

END_CASE;

 

To go to next HMI image use the touch buttons; some of them are interactive.