
FUNCTION_BLOCK FB20
VAR_TEMP
    // variables temporaires

END_VAR
VAR
    step: ARRAY[0..8] OF BOOL;
    TR: ARRAY[0..13] OF BOOL;
    cdAutoStop, cdManuStop, cdMAintStop: BOOL;
    flag_HMI_Z10_marche: BOOL;
END_VAR

    //transition
    TR[0]:=step[0] AND ("HMI_DB".HMI_Z10_marche OR startGeneral) ; //0 vers 1
    TR[1]:=step[1] AND NOT ("PosListX".X[17]=0 AND "PosListZ".Z[17]=0); // 1 vers 2
    TR[2]:=step[1] AND "PosListX".X[17]=0 AND "PosListZ".Z[17]=0; // 1 vers 5
    TR[3]:=step[8] AND cdAutoStop AND NOT "HMI_DB".HMI_Z10_marche; // 8 vers 0
    TR[4]:=step[0] AND "HMI_DB".HMI_Z10_Manu AND NOT "HMI_DB".HMI_Z10_marche AND NOT "HMI_DB".HMI_Z10_maintenance; //0 vers 3
    TR[5]:=step[3] AND NOT "HMI_DB".HMI_Z10_Manu AND cdManuStop; //3 vers 0
    TR[6]:=step[0] AND "HMI_DB".HMI_Z10_maintenance AND NOT "HMI_DB".HMI_Z10_marche AND NOT "HMI_DB".HMI_Z10_Manu; //0 vers 4
    TR[7]:=step[4] AND NOT  "HMI_DB".HMI_Z10_maintenance and cdMaintStop; //4 vers 0
    TR[8]:=step[2] AND "G7_resetPos_DB".step[6];//2 vers 6
    TR[9]:=step[5] AND "TeachPos_DB".step[24];; // 5 vers 6
    TR[10]:=step[6]; // 6 vers 7
    TR[11]:= step[7] AND ("HMI_DB".HMI_Z10_arret OR stopGeneral); // 7 vers 8
    TR[12]:= step[8] AND ("HMI_DB".HMI_Z10_marche AND NOT flag_HMI_Z10_marche OR startGeneral); // 8 vers 7
    TR[13]:= step[8] AND cdAutoStop; // 8 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 // 1 vers 5
        step[1]:= false;
        step[5]:= true;
    END_IF;
    IF TR[3] THEN // 8 vers 0
        step[8]:= false;
        step[0]:= true;
    END_IF;
    IF TR[4] THEN // 0 vers 3
        step[0]:= false;
        step[3]:= true;
    END_IF;
    IF TR[5] THEN // 3 vers 0
        step[3]:= false;
        step[0]:= true;
    END_IF;
    IF TR[6] THEN // 0 vers 4
        step[0]:= false;
        step[4]:= true;
    END_IF;
    IF TR[7] THEN // 4 vers 0
        step[4]:= false;
        step[0]:= true;
    END_IF;
    IF TR[8] THEN //2 vers 6
        step[2]:= false;
        step[6]:= true;
    END_IF;
    IF TR[9] THEN // 5 vers 6
        step[5]:= false;
        step[6]:= true;
    END_IF;
    IF TR[10] THEN // 6 vers 7
        step[6]:= false;
        step[7]:= true;
    END_IF;
    IF TR[11] then // 7 vers 8
        step[7]:= false;
        step[8]:= true;
    END_IF;
    IF TR[12] then // 8 vers 7
        step[8]:= false;
        step[7]:= true;
    END_IF;
    IF TR[13] THEN // 8 vers 0
        step[8]:= false;
        step[0]:= true;
    END_IF;

    
    //gère le repos
    IF step[0] THEN
        LaisserPasserChariot();
        "HMI_DB".HMI_Z10_ModeAuto := false;
        "HMI_DB".HMI_Z10_Aide := false;
        "HMI_DB".HMI_Z10_optionsMaint := false;
    ELSE
        Z10_laissePasser:= false;
    END_IF;
    
    //gère le mode auto
    IF step[2] OR step[6] THEN
        G7_ResetPos.G7_ResetPos_DB();
    END_IF;
    IF step[5] OR step[6] THEN
        G7_ResetPos.G7_ResetPos_DB();
        TeachPos.TeachPos_DB();
    END_IF;
    IF step[7] OR step[8] THEN
        G7_ModeAuto.G7_ModeAuto_DB();
        GestionStock.GestionStock_DB();
        G7_PrendreDeposer.G7_PrendreDeposer_DB();
        "HMI_DB".HMI_Z10_ModeAuto := true;
    END_IF;
    
    //gère le mode manu
    IF TR[4] THEN
        "HMI_DB".HMI_Z10_PosManu:= BYTE_TO_INT(Place_X);
    END_IF;
    IF step[3] THEN
        ModeManu.ModeManu_DB();
        G7_ResetPos.G7_ResetPos_DB();
        TeachPos.TeachPos_DB();
        G7_PrendreDeposer.G7_PrendreDeposer_DB();
        GestionStock.GestionStock_DB();
    END_IF;
    
    //gère le mode maintenance
    IF step[4] THEN
        Maintenance.Maintenance_DB();
        G7_ResetPos.G7_ResetPos_DB();
        TeachPos.TeachPos_DB();
    END_IF;

    //cd sortie mode
    cdAutoStop:= "GestionStock_DB".vide;
    cdManuStop:= "ModeManu_DB".cdQuitter;
    cdMAintStop:= "Maintenance_DB".cdQuitter;
    
    //gestion front
    flag_HMI_Z10_marche:= "HMI_DB".HMI_Z10_marche;

    
END_FUNCTION_BLOCK
