Lire à partir du tampon LIFO
Cette instruction FP lit les données de la zone de départ du tampon LIFO (Last-In-First-Out) spécifiée par s_Start et sauvegarde les données dans la zone indiquée par d.
Entrée
Zone de départ des données du tampon
Sortie
Zone de sauvegarde des données lues à partir du tampon LIFO
Les variables s_Start et d doivent être du même type de données.
Si cette instruction est exécutée lorsque le nombre des données sauvegardées est 0, une erreur apparaît.
Si cette instruction est exécutée lorsque le pointeur de lecture est égal au pointeur d’écriture, une erreur apparaît et la lecture n’est pas exécutée.
Si cette instruction est exécutée lorsque le pointeur de lecture indique l’adresse finale du tampon LIFO (n_Words défini par l’instruction FP_LIFO_DEFINE moins 1), le pointeur de lecture est défini sur 0.
Si la taille (n_Words) du tampon indiqué par d_Start est n_Words = 0 ou lorsque n_Words > 4096.
Si le nombre d’éléments de données du tampon sauvegardés = 0.
Si le nombre d’éléments de données du tampon sauvegardés > taille du tampon (n_Words).
Si le pointeur de lecture > taille du tampon (n_Words).
Si le pointeur de lecture indique 4096 (16#1000) ou une valeur supérieure après lecture des données.
Si la taille (n_Words) du tampon indiqué par d_Start est n_Words = 0 ou lorsque n_Words > 4096.
Si le nombre d’éléments de données du tampon sauvegardés = 0.
Si le nombre d’éléments de données du tampon sauvegardés > taille du tampon (n_Words).
Si le pointeur de lecture > taille du tampon (n_Words).
Si le pointeur de lecture indique 4096 (16#1000) ou une valeur supérieure après lecture des données.
Instructions F correspondantes : F116_FIFR
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU.Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR
bDefineBuffer: BOOL:=FALSE;
bReadFromBuffer: BOOL:=FALSE;
iWords: INT:=8;
arrLifo: ARRAY [0..11] OF INT:=[12(0)];
arrResultReadLifo: ARRAY [0..7] OF WORD:=[8(0)];
END_VAR
La fonction est exécutée lorsque la variable bDefineBuffer est sur TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,FP_FIFO_DEFINE!,,13,1,22,5,,?DEN?Dn_Words?AENO?Cd_Start);
B(B_VARIN,,iWords,11,3,13,5,);
B(B_VAROUT,,arrLifo[0],22,3,24,5,);
B(B_CONTACT,,bDefineBuffer,5,2,7,4,);
L(7,3,13,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,FP_FIFO_READ!,,13,1,21,5,,?DEN?Ds_Start?AENO?Cd);
B(B_VARIN,,arrLifo[0],11,3,13,5,);
B(B_VAROUT,,arrResultReadLifo[0],21,3,23,5,);
B(B_CONTACT,,bReadFromBuffer,5,2,7,4,);
L(7,3,13,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bReadFromBuffer) then
FP_LIFO_READ(s_Start := arrLifo[0],
d => arrResultReadLifo[0]);
end_if;