FUNCTION FC50 : VOID
VAR_IN_OUT
    entreeAsiSys: ARRAY [0..3] OF BOOL;
    entreeAsiEsc: ARRAY [1..31,1..4] OF BOOL;
END_VAR
VAR_TEMP
    i,j,k,l,m: INT;
    tempDW : DWORD;
    temp AT tempDW: ARRAY[0..31] OF BOOL;
END_VAR
//transfert des donnée brut dans la table DB51
DB51.DBD0 := PID256;
DB51.DBD4 := PID260;
DB51.DBD8 := PID264;
DB51.DBD12 := PID268;

//transfert et fragmentation des donnée depuis la DB51 vers la DB50
FOR i:= 0 TO 3 DO 
    tempDW := DB51.DBD[i*4]; // copie entree ASI dans une variable temporaire
    m:= i*8;
    IF i=0 THEN  // ecriture des entrée dans la DB50 avec gestion des saut d'adressage
        FOR j:=0 TO 3 DO 
            IF j<1 THEN // bit système et premier esclave
                entreeAsiSys[0] := temp[4];
                entreeAsiSys[1] := temp[5];
                entreeAsiSys[2] := temp[6];
                entreeAsiSys[3] := temp[7];
                entreeAsiEsc[1,1] := temp[0];
                entreeAsiEsc[1,2] := temp[1];
                entreeAsiEsc[1,3] := temp[2]; 
                entreeAsiEsc[1,4] := temp[3];
            ELSE // esclave 2+ -> 7
                k:= j*2;
                l:= j*8;
                entreeAsiEsc[k,1] := temp[l+4];
                entreeAsiEsc[k,2] := temp[l+5];
                entreeAsiEsc[k,3] := temp[l+6];
                entreeAsiEsc[k,4] := temp[l+7];
                
                entreeAsiEsc[k+1,1] := temp[l];
                entreeAsiEsc[k+1,2] := temp[l+1];
                entreeAsiEsc[k+1,3] := temp[l+2];
                entreeAsiEsc[k+1,4] := temp[l+3];

            END_IF;           
        END_FOR;
    ELSE // esclave 8->31
        FOR j:=0 TO 3 DO // assignation dans la DB50 des entrée
            k:= (j*2)+m;
            l:= j*8;
            entreeAsiEsc[k,1] := temp[l+4];
            entreeAsiEsc[k,2] := temp[l+5];
            entreeAsiEsc[k,3] := temp[l+6];
            entreeAsiEsc[k,4] := temp[l+7];
            
            entreeAsiEsc[k+1,1] := temp[l];
            entreeAsiEsc[k+1,2] := temp[l+1];
            entreeAsiEsc[k+1,3] := temp[l+2];
            entreeAsiEsc[k+1,4] := temp[l+3];
        END_FOR;
    END_IF;
END_FOR;

END_FUNCTION