
FUNCTION_BLOCK FB21

VAR_TEMP
        
END_VAR
VAR
    step: ARRAY[0..6] OF BOOL;
    TR: ARRAY[0..7] OF BOOL;
    posOk: BOOL;
END_VAR

    //transition
    TR[0]:= step[0] AND ( "G7_AU_DB".Step[1] AND "G7_GEMA_DB".step[2] // passage en mode auto
                    OR "G7_AU_DB".Step[1] AND "G7_GEMA_DB".step[4] AND "HMI_DB".HMI_Z10_initPos // init depuis le mode maintenance
                    OR "G7_AU_DB".Step[1] AND "G7_GEMA_DB".step[3] AND "ModeManu_DB".step[0] AND "HMI_DB".HMI_Z10_initPos AND NOT "Global".UpperPosition // init depuis le mode Manu
                    OR "G7_AU_DB".Step[1] AND "TeachPos_DB".step[1]); // init depuis le teach // 0 vers 1
    TR[1]:= step[1] AND Y_rentre AND NOT Y_sorti AND NOT Y_avance; // 1 vers 2
    TR[2]:= step[2] AND X_Init_End AND Z_Init_End; // 2 vers 3
    TR[3]:= step[3] AND X_Homing_End; // 3 vers 4
    TR[4]:= step[4] AND Z_Homing_End AND posOk; // 4 vers 5
    TR[5]:= step[4] AND Z_Homing_End AND NOT posOk; // 4 vers 1
    TR[6]:= step[5] AND (X_Move_End AND Z_Move_End OR "TeachPos_DB".step[1]); // 5 vers 6
    TR[7]:= step[6] AND ("G7_GEMA_DB".step[4] OR "G7_GEMA_DB".step[3] OR "G7_GEMA_DB".step[6]); // 6 vers 0
    
    //etape
    IF TR[0] THEN //0 vers 1
        step[0]:= false;
        step[1]:= true;
    END_IF;
    IF TR[1] THEN // 1 vers 2
        step[1]:= false;
        step[2]:= true;
    END_IF;
    IF TR[2] THEN // 2 vers 3
        step[2]:= false;
        step[3]:= true;
    END_IF;
    IF TR[3] THEN // 3 vers 4
        step[3]:= false;
        step[4]:= true;
    END_IF;
    IF TR[4] THEN // 4 vers 5
        step[4]:= false;
        step[5]:= true;
    END_IF;
    IF TR[5] THEN // 4 vers 1
        step[4]:= false;
        step[1]:= true;
    END_IF;
    IF TR[6] THEN // 5 vers 6
        step[5]:= false;
        step[6]:= true;
    END_IF;
    IF TR[7] THEN // 6 vers 0
        step[6]:= false;
        step[0]:= true;
    END_IF;

    
    //prog
    IF step[5] AND "TeachPos_DB".step[0] THEN
        Place_X:= 8;
        Place_Z:= 8;
    END_IF;
    
    posOk:= "Global".Position_X < 10 AND "Global".Position_X > -10 AND "Global".Position_Z < 10 AND "Global".Position_Z > -10;
    
    //gestion front
    
END_FUNCTION_BLOCK
