FB30 MAIN P01 : Call main program P01

[hit  <- on your browser to return]

 

 

 

Network 1: P01 Initialisation

IF "M01 Init" OR NOT "M00 OB1 FirstCycle" THEN

    #STEP_BITS := 0;

    IF "M01 Init" THEN

        "M01 MD30" := "M01 MD34" := 0;

        "M01 HomPosRun" := TRUE;

        "DatOfMod".P01.CrntModule := 101;

    END_IF;

END_IF;

 

 

 

Network 2: P01 SET execute home position

IF "M01 HomPosRun" AND #SET.S.step0 THEN

    #SET.S.steps := TRUE;

ELSIF NOT "M01 HomPosRun" OR "HMI KEY".SYS.GLB.F8_Stop OR "HMI KEY".P01.GLB.F8_Stop THEN

    #SET.S.steps := "M01 HomPosRun" := FALSE;

END_IF;

#SET.S.steph := "M01 FLT ModuleStpSR";

#SET();

 

 

 

Network 3: P01 SEQ1 start, stop, hold

#SEQ1.S.steph := NOT "M00 AutoCmpltMa run" AND "M01 SEQ1 Start";

#SEQ1.S.steps := NOT "M01 HomPosRun" AND "M01 SEQ1 Start";

 

IF "M00 CmpltMaOFF Imp" THEN

    #SEQ1.S.stepin := FALSE;

END_IF;

#SEQ1();

 

 

 

Network 4: P01 FLT faults monitoring

#FLT(FLT_MODULE := "M01 FLT ModuleIS");

 

 

 

Network 5: P01 STEP.SEQ1_Start

IF "M00 CmpltMaRun Imp" AND ("M00 AutoCmpltMa run" XOR "M00 InchCmpltMa run") THEN

    #STEP.SEQ1_Start := TRUE;

    RETURN;

ELSIF #STEP.SEQ1_Start THEN

    IF NOT ("M01 HomPosRun" OR "M01 SEQ1 Active") THEN

        "M01 SEQ1 Start" := TRUE;

    ELSIF "M01 SEQ1 Active" THEN

        #MoDa.RunTimeCntr_seq1 := 0;

        #STEP_BITS := 0;

        #STEP.SEQ1_Running := TRUE;

    END_IF;

END_IF;

 

 

 

Network 6: P01 STEP.SEQ1_Running

IF #STEP.SEQ1_Running THEN

    IF "M01 SEQ1 Done" THEN

        "M01 SEQ1 Start" := FALSE;

        #STEP_BITS := 0;

        #STEP.SEQ1_Done := TRUE;

        RETURN;

    END_IF;

END_IF;

 

 

 

Network 7: P01 STEP.Done

IF #STEP.SEQ1_Done THEN

    "M01 SEQ1 Done" := FALSE;

    #STEP_BITS := 0;

    #STEP.SEQ1_Write := TRUE;

    // Save actual data

    "DatOfMod".P01.STS.RunTimeCntr_seq1 := #MoDA.RunTimeCntr_seq1;

    "DatOfMod".P01.STS.WPC_Ok := "M01 SEQ1 DoWP1" AND "M01 SEQ1 WP1 DnOK";

    "DatOfMod".P01.STS.Current_WP_Ok := "M01 SEQ1 WP1 DnOK" AND NOT "M01 SEQ1 WP1 DnNOK";

    "DatOfMod".P01.TrgtModule := 102;

    // If necessary, changing drive direction to module 103

    IF NOT "DatOfMod".P01.STS.Current_WP_Ok THEN

        "DatOfMod".P01.TrgtModule := 103;

    END_IF;

    "DatOfPLC".P01 := "DatOfMod".P01; // BLKMOV

END_IF;

 

 

 

Network 8: P01 STEP. Write

IF #STEP.SEQ1_Write THEN

    "M01 SEQ1 WP1 DnOK" := FALSE;

    "M01 TCP/IP Wrt start" := TRUE;

    IF "M01 TCP/IP Wrt done" THEN

        "M01 TCP/IP Wrt start" := "M01 TCP/IP Wrt done" := FALSE;

        #STEP_BITS := 0;

        RETURN;

    END_IF;

END_IF;

 

 

 

Network 9: P01 Run-Time

"M01 Enabled" := "M00 AutoCmpltMa run" AND NOT "M01 FLT ModuleStpSR";

IF #STEP.SEQ1_Running THEN

    IF "M00 Imp 10Hz" AND "M01 Enabled" THEN

        #MoDa.RunTimeCntr_seq1 := #MoDa.RunTimeCntr_seq1 + 1;

    END_IF;

ELSE

    IF NOT "M01 Active" AND "M00 AutoCmpltMa run" THEN

        #STEP.SEQ1_Start := TRUE;

    END_IF;

END_IF;

 

 

 

Network 10: P01 SEQ1 active

"M01 Active" :=

#STEP.SEQ1_Start AND "M01 SEQ1 Active"

OR #STEP.SEQ1_Running

OR #STEP.SEQ1_Done

OR #STEP.SEQ1_Write;

 

 

 

Network 11: P01 Assign signal  

IF "M01 FLT ModuleIS" THEN

    "M01 FLT ModuleStpSR" := true;

END_IF;

IF "M01 FLT ModuleStpSR" AND NOT "M01 FLT ModuleStpACK" THEN

    IF "M00 FLT CmpltMaACK Imp" THEN

        "M01 FLT ModuleStpACK" := true;

    END_IF;

ELSIF NOT "M01 FLT ModuleIS" AND "M01 FLT ModuleStpACK" THEN

    "M01 FLT ModuleStpSR" := "M01 FLT ModuleStpACK" := FALSE;

END_IF;

 

 

 

Network 12: P01 Assign Products counter

IF "DatOfMod".P01.STS.ProductCounter.Flag12 AND "DatOfMod".P01.STS.ProductCounter.Flag22 THEN

    "DatOfMod".P01.STS.ProductCounter.GoodParts := "DatOfMod".P01.STS.ProductCounter.GoodParts + 1;

    "DatOfMod".P01.STS.ProductCounter.Flag12 := "DatOfMod".P01.STS.ProductCounter.Flag22 := FALSE;

ELSIF "M01 SEQ1 Active" AND #SEQ1.SSM.S.stepact = 28 THEN

    "DatOfMod".P01.STS.ProductCounter.Flag12 := TRUE;

ELSIF "DatOfMod".P01.STS.ProductCounter.Flag12 AND #SEQ1.SSM.S.stepact = 29 THEN

    "DatOfMod".P01.STS.ProductCounter.Flag22 := TRUE;

END_IF;

// Good set / reset parts counter

"DatOfMod".P01.STS.ProductCounter.DlyOnReset(IN := "DatOfMod".P01.STS.ProductCounter.ResetGoodParts,

                                             PT := "DatOfMod".P01.STS.ProductCounter.DlyOnReset.PT);

IF "DatOfMod".P01.STS.ProductCounter.DlyOnReset.Q THEN

    "DatOfMod".P01.STS.ProductCounter.GoodParts := "DatOfMod".P01.STS.ProductCounter.SetCounter;

END_IF;