FP_LIFO_READ

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.

Paramètres

Entrée

s_Start (WORD, INT, UINT)

Zone de départ des données du tampon

Sortie

d (WORD, INT, UINT)

Zone de sauvegarde des données lues à partir du tampon LIFO

Remarques

  • 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.

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • 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.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • 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.

Exemple

En-tête du POU

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

Corps du POU

La fonction est exécutée lorsque la variable bDefineBuffer est sur TRUE.

Corps en LD

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

Corps en ST

if (bReadFromBuffer) then
    FP_LIFO_READ(s_Start := arrLifo[0],
                 d => arrResultReadLifo[0]);
    end_if;

Modifié le : 2022-10-05Commentaires sur cette pageAssistance téléphonique