
FUNCTION_BLOCK FB40
VAR_TEMP
    // variables temporaires

END_VAR
VAR
    compteurS0, compteurS1, compteurS2, compteurS3, compteurS4, compteurS5: INT;
    flag_ASI10B1_presenceP0, flag_ASI20B1_presenceP0, flag_ASI30B1_presenceP0, flag_ASI40B1_presenceP0, flag_ASI50B1_presenceP0,flag_ASI60B1_presenceP0: bool;
    flag_lecteurBin_ASI10B4, flag_lecteurBin_ASI20B4, flag_lecteurBin_ASI30B4, flag_lecteurBin_ASI40B4, flag_lecteurBin_ASI50B4, flag_lecteurBin_ASI60B4: BOOL;
    flag_ASI10B5_bloqueur, flag_ASI20B5_bloqueur, flag_ASI30B5_bloqueur, flag_ASI40B5_bloqueur, flag_ASI50B5_bloqueur, flag_ASI60B5_bloqueur: BOOL;
    falg_Z7_chargementEnCours, flag_Z9_mouvementEnCours, flag_Z10_mouvementEnCours: BOOL;
END_VAR

//élimination du chariot "0"
"GestionChariotDB".chariot[1,0]:= -1;
//calcul pour nb de chariot par section
NbChariotSection();

//section 0
//gestion etat chariot
IF NOT Z7_chargementEnCours AND falg_Z7_chargementEnCours THEN
    ChariotChangeType(section:= 0, ChariotType:=2);
END_IF;
//gestion compteur
IF B_ASI20B4_lecteurBin AND NOT flag_lecteurBin_ASI20B4 THEN // incrémentation à chaque impulsion
    compteurS0:= compteurS0+1;
END_IF;
//correction des erreurs
IF B_ASI20B1_presenceP0 AND NOT flag_ASI20B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= compteurS0 ,section:=0, capteurRack:=B_ASI20B3_presenceRack);
END_IF; 
//gestion position chariot
IF Q_ASI20B5_bloqueur AND NOT flag_ASI20B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=0 ,chariotNumero:= compteurS0);
    compteurS0:=0;
END_IF;

//section1
//gestion comptreur
IF B_ASI30B4_lecteurBin AND NOT flag_lecteurBin_ASI30B4 THEN // incrémentation à chaque impulsion
    compteurS1:= compteurS1+1;
END_IF;
//correction des erreurs
IF B_ASI30B1_presenceP0 AND NOT flag_ASI30B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= compteurS1 ,section:=1, capteurRack:=B_ASI30B3_presenceRack);
END_IF;
//gestion position chariot
IF Q_ASI30B5_bloqueur AND NOT flag_ASI30B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=1 ,chariotNumero:= compteurS1);
    compteurS1 :=0;
END_IF;

//section 2
//gestion etat chariot
IF NOT Z10_mouvementEnCours AND flag_Z10_mouvementEnCours THEN
    IF B_ASI40B3_presenceRack THEN
        ChariotChangeType(section:= 2, ChariotType:=2);
    ELSE
        ChariotChangeType(section:= 2, ChariotType:=0);
    END_IF;
END_IF;
//gestion compteur
IF B_ASI40B4_lecteurBin AND NOT flag_lecteurBin_ASI40B4 THEN // incrémentation à chaque impulsion
    compteurS2:= compteurS2+1;
END_IF;
//correction des erreurs
IF B_ASI40B1_presenceP0 AND NOT flag_ASI40B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= compteurS2 ,section:=2, capteurRack:=B_ASI40B3_presenceRack);
END_IF;
//gestion position chariot
IF Q_ASI40B5_bloqueur AND NOT flag_ASI40B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=2 ,chariotNumero:= compteurS2);
    compteurS2:=0;
END_IF;

//section 3
//gestion compteur
IF B_ASI50B4_lecteurBin AND NOT flag_lecteurBin_ASI50B4 THEN // incrémentation à chaque impulsion
    compteurS3:= compteurS3+1;
END_IF;
//correction des erreurs
IF B_ASI50B1_presenceP0 AND NOT flag_ASI50B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= compteurS3 ,section:=3, capteurRack:=B_ASI50B3_presenceRack);
END_IF;
//gestion position chariot
IF Q_ASI50B5_bloqueur AND NOT flag_ASI50B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=3 ,chariotNumero:= compteurS3);
    compteurS3:=0;
END_IF;

//section 4
//gestion etat chariot
IF NOT Z9_mouvementEnCours AND flag_Z9_mouvementEnCours THEN
    IF B_ASI60B3_presenceRack THEN
        ChariotChangeType(section:= 4, ChariotType:=1);
    ELSE
        ChariotChangeType(section:= 4, ChariotType:=0);
    END_IF;
END_IF;
//gestion compteur
IF B_ASI60B4_lecteurBin AND NOT flag_lecteurBin_ASI60B4 THEN // incrémentation à chaque impulsion
    CompteurS4:= CompteurS4+1;
END_IF;
//correction des erreurs
IF B_ASI60B1_presenceP0 AND NOT flag_ASI60B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= CompteurS4 ,section:=4, capteurRack:=B_ASI60B3_presenceRack);
END_IF;
//gestion position chariot
IF Q_ASI60B5_bloqueur AND NOT flag_ASI60B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=4 ,chariotNumero:= CompteurS4);
    CompteurS4:=0;
END_IF;


//section 5
//gestion compteur
IF B_ASI10B4_lecteurBin AND NOT flag_lecteurBin_ASI10B4 THEN // incrémentation à chaque impulsion
    CompteurS5:= CompteurS5+1;
END_IF;
//correction des erreurs
IF B_ASI10B1_presenceP0 AND NOT flag_ASI10B1_presenceP0 THEN 
    VerificationChariot(chariotNumero:= CompteurS5 ,section:=5, capteurRack:=B_ASI10B3_presenceRack);
END_IF;
//gestion position chariot
IF Q_ASI10B5_bloqueur AND NOT flag_ASI10B5_bloqueur THEN // change les chariot de place dans la DB
    TransfertChariot(section:=5 ,chariotNumero:= CompteurS5);
    CompteurS5:=0;
END_IF;



//gestion front
flag_ASI10B1_presenceP0:= B_ASI10B1_presenceP0;
flag_ASI20B1_presenceP0:= B_ASI20B1_presenceP0;
flag_ASI30B1_presenceP0:= B_ASI30B1_presenceP0;
flag_ASI40B1_presenceP0:= B_ASI40B1_presenceP0;
flag_ASI50B1_presenceP0:= B_ASI50B1_presenceP0;
flag_ASI60B1_presenceP0:= B_ASI60B1_presenceP0;

flag_lecteurBin_ASI10B4:= B_ASI10B4_lecteurBin;
flag_lecteurBin_ASI20B4:= B_ASI20B4_lecteurBin;
flag_lecteurBin_ASI30B4:= B_ASI30B4_lecteurBin;
flag_lecteurBin_ASI40B4:= B_ASI40B4_lecteurBin;
flag_lecteurBin_ASI50B4:= B_ASI50B4_lecteurBin;
flag_lecteurBin_ASI60B4:= B_ASI60B4_lecteurBin;

flag_ASI10B5_bloqueur:= Q_ASI10B5_bloqueur;
flag_ASI20B5_bloqueur:= Q_ASI20B5_bloqueur;
flag_ASI30B5_bloqueur:= Q_ASI30B5_bloqueur;
flag_ASI40B5_bloqueur:= Q_ASI40B5_bloqueur;
flag_ASI50B5_bloqueur:= Q_ASI50B5_bloqueur;
flag_ASI60B5_bloqueur:= Q_ASI60B5_bloqueur;

falg_Z7_chargementEnCours:= Z7_chargementEnCours;
flag_Z9_mouvementEnCours:= Z9_mouvementEnCours;
flag_Z10_mouvementEnCours:= Z10_mouvementEnCours;

END_FUNCTION_BLOCK
