Una libreria o un'applicazione basata su IEC-61131-3 è organizzata per tipi complessi come programmi, blocchi funzione, elenchi di variabili globali, metodi, azioni, funzioni, strutture e così via. Entro ciascuno di questi tipi, è possibile definire le variabili.
I blocchi funzione e le strutture dei tipi complessi possono essere istanziati più volte e posizionati come blocco all'interno della memoria.
Ogni definizione di tipo complesso (variabili e informazioni sul tipo), quando istanziata, richiede una quantità di memoria (impronta). Tale impronta consente di ottenere informazioni sulla dimensione richiesta nella memoria stessa. Informazioni sulla quantità di memoria da gestire ad esempio nelle situazioni di modifica in linea o se utilizzate come argomento di ingresso per i metodi (quindi utilizzate come dimensione dello stack). Può inoltre essere utilizzata per identificare grandi tipi complessi che possono provocare problemi se istanziati spesso, ad esempio in un array.
Per una struttura o un blocco funzione, le dimensioni delle variabili vengono sommate. Inoltre, il tipo blocco funzione richiede memoria (elenco di metodi, interfacce implementate e così via). In base all'architettura del controller sottostante, occorre considerare anche l'allineamento della memoria, basato su ordine e tipo di variabile.
Esempio
Esempio di calcolo di Memory Size (Data) per codice IEC-61131-3:
FUNCTION_BLOCK FB_XXX
VAR
xVar1: BOOL; // 1 bit
xVar2: BOOL; // 1 bit
xVar3: BOOL; // 1 bit
// 5 additional bits for alignment
iVar4: INT; // 4 byte (on 32-bit architectures)
xVar5: BOOL; // 1 bit
// 7 additional bits for alignment
fbComplex: FB_Test; // 20 byte
END_VAR
FUNCTION_BLOCK FB_YYY
VAREND_VAR
FUNCTION_BLOCK FB_ZZZ
VAR
iVar1: INT;
END_VAR
Risultati di Memory Size (Data)
Memory Size (Data) (FB_XXX) = 32
Memory Size (Data) (FB_YYY) = 4
Memory Size (Data) (FB_ZZZ) = 8