
FUNCTION_BLOCK FB25

VAR_TEMP
    // variables temporaires
    tempPos: BYTE;
END_VAR
VAR
    step: ARRAY[0..14] OF BOOL;
    TR: ARRAY[0..16] OF BOOL;
    travailEnCours: BOOL;
    tempo: BOOL;
    tOn: S5TIME;
    tOn_bin : WORD;
    flag_Z8_capteur_S3 : BOOL;

END_VAR

    //transition
    TR[0]:= step[0] AND Z8_RackPret AND Z8_presenceRack AND "GestionStock_DB".slotLibre ; // 0 vers 1
    TR[1]:= step[1] AND X_Move_End AND Z_Move_End; // 1 vers 2
    TR[2]:= step[2] AND "G7_PrendreDeposer_DB".step[5] ; // 2 vers 3
    TR[3]:= step[3] ; // 3 vers 4
    TR[4]:= step[4] AND X_Move_End AND Z_Move_End; // 4 vers 5
    TR[5]:= step[5] AND "G7_PrendreDeposer_DB".step[5]; // 5 vers 0
    TR[6]:= step[0] AND Z8_RackPret AND NOT Z8_presenceRack AND "GestionStock_DB".decantFini; // 0 vers 6
    TR[7]:= step[6]; // 6 vers 7
    TR[8]:= step[7] AND X_Move_End AND Z_Move_End; // 7 vers 8
    TR[9]:= step[8] AND "G7_PrendreDeposer_DB".step[5];// 8 vers 9
    TR[10]:= step[9] AND X_Move_End AND Z_Move_End; // 9 vers 10
    TR[11]:= step[10] AND "G7_PrendreDeposer_DB".step[5];// 10 vers 12
    TR[12]:= step[0] AND (Z8_RackPret AND Z8_presenceRack AND NOT "GestionStock_DB".slotLibre
                            OR Z8_RackPret AND NOT Z8_presenceRack AND NOT "GestionStock_DB".decantFini); // 0 vers 11
    TR[13]:= step[11] AND tempo; // 11 vers 12
    Tr[14]:= step[12] AND X_Move_End AND Z_Move_End; // 12 vers 13
    TR[15]:= step[13] AND NOT Z8_RackPret; // 13 vers 14
    TR[16]:= step[14] AND Z8_capteur_S3 AND NOT flag_Z8_capteur_S3; // 14 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 // 5 vers 0
        step[5]:= false;
        step[0]:= true;
    END_IF;
    IF TR[6] THEN // 0 vers 6
        step[0]:= false;
        step[6]:= true;
    END_IF;
    IF TR[7] THEN // 6 vers 7
        step[6]:= false;
        step[7]:= true;
    END_IF;
    IF TR[8] THEN // 7 vers 8
        step[7]:= false;
        step[8]:= true;
    END_IF;
    IF TR[9] THEN // 8 vers 9
        step[8]:= false;
        step[9]:= true;
    END_IF;
    IF TR[10] THEN // 9 vers 10
        step[9]:= false;
        step[10]:= true;
    END_IF;
    IF TR[11] THEN // 10 vers 12
        step[10]:= false;
        step[12]:= true;
    END_IF;
    IF TR[12] THEN // 0 vers 11
        step[0]:= false;
        step[11]:= true;
    END_IF;
    IF TR[13] THEN // 11 vers 12
        step[11]:= false;
        step[12]:= true;
    END_IF;
    IF TR[14] THEN // 12 vers 13
        step[12]:= false;
        step[13]:= true;
    END_IF;
    IF TR[15] THEN // 13 vers 14
        step[13]:= false;
        step[14]:= true;
    END_IF;
    IF TR[16] THEN // 14 vers 0
        step[14]:= false;
        step[0]:= true;
    END_IF;
        
// prog
IF Z8_RackPret THEN
    travailEnCours:= true;
END_IF;
IF step[1] THEN
    Place_X:=17;
    Place_Z:=17;
END_IF;
IF step[3] THEN
    tempPos:= INT_TO_BYTE("GestionStock_DB".slotLibreNum);
    Place_X:=tempPos;
    Place_Z:=tempPos;
    "GestionStock_DB".stock[BYTE_TO_INT(tempPos)]:= true;
    END_IF;
IF step[6] THEN
    tempPos:= INT_TO_BYTE("GestionStock_DB".plusVieux);
    Place_X:=tempPos;
    Place_Z:=tempPos;
    "GestionStock_DB".stock[BYTE_TO_INT(tempPos)]:= false;
END_IF;
IF step[9] THEN
    Place_X:=17;
    Place_Z:=17;
END_IF;
IF step[12] THEN
    Place_X:=8;
    Place_Z:=8;
END_IF;
IF step[13] THEN 
    travailEnCours:= false;
END_IF;


//tempo
tOn:= S_ODT(T_NO:= T3, S:=step[11], TV:=T#1s, R:=FALSE, BI:=tOn_bin,Q:=tempo);

//front
flag_Z8_capteur_S3:= Z8_capteur_S3;   
END_FUNCTION_BLOCK
