FP_AVERAGE_BUFFER_DEFINE

Definisci area buffer per lo spostamento di valori medi e totali

Questa istruzione FP specifica un buffer speciale per calcolare il valore medio e il totale di tutti i valori contenuti. L'indirizzo iniziale è impostato da d_Start e la dimensione da n_Words. Il buffer ha una struttura particolare, indicata nell'esempio di programmazione, in cui il numero degli elementi di array dell'ultimo elemento iArrData corrisponde alla dimensione definita da n_words. Utilizzare l'istruzione FP_AVERAGE_BUFFER_WRITE per scrivere nel buffer.

Parametri

Ingresso

n_Words (WORD, INT, UINT)

Specifica la capacità di memoria del buffer

Valori: 1–30000

Uscita

d_Start (WORD, INT, UINT)

Area dati iniziale del buffer

Si consiglia di utilizzare una DUT definita dell'utente, come indicato nell'esempio di programmazione.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se un valore specificato per un parametro è fuori dall'intervallo utilizzabile.

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se un valore specificato per un parametro è fuori dall'intervallo utilizzabile.

Esempio

DUT

Elementi della DUT (identificatori):

uiBufferSize

Capacità del buffer

uiNumberOfStoredData

Numero di dati memorizzati

diTotalValueOfStoredData

Somma totale dei dati memorizzati

rMovingAverage

Media mobile

uiWritePointer

Posizione del puntatore di scrittura

iArrData

Contiene i valori del buffer. Il numero dei valori interi (10 in questo esempio) deve essere uguale alla dimensione del buffer definito con iNumberOfIntegerValues.

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU.La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	VAR
		bDefine: BOOL:=FALSE;
		bWrite: BOOL:=FALSE;
		iCounter: INT:=0;
	END_VAR
	VAR CONSTANT
		iNumberOfIntegerValues: INT:=10;
			(*number of integers values must be equal to average buffer size*)
	END_VAR
	VAR
		dutAverageBufferInt10: DUT_FP_AVERAGE_BUFFER_INT_10;
			(*Average Buffer for integer numbers of size 10*)
	END_VAR

Corpo del POU

Quando la variabile bDefine è impostata su TRUE, la funzione viene eseguita.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,FP_AVERAGE_BUFFER_DEFINE!,,13,2,28,6,,?DEN?Dn_Words?AENO?Cd_Start);
B(B_VARIN,,iNumberOfIntegerValues,11,4,13,6,);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,bDefine,4,1,6,3,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
L(1,2,4,2);
L(6,2,6,4);
L(6,4,13,4);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_CONTACT,,bWrite,2,1,4,3,);
B(B_CONTACT,,bDefine,6,1,8,3,N);
B(B_F,FP_AVERAGE_BUFFER_WRITE!,,14,2,28,6,,?DEN?D@'s'?AENO?Cd_Start);
B(B_VARIN,,sys_iRingCounter_2ms5,12,4,14,6,);
B(B_F,Adr_Of_Var_O!,,28,4,36,6,,?D?C);
B(B_VAROUT,,dutAverageBufferInt10,36,4,38,6,);
B(B_CONTACT,,sys_bPulse1s,11,1,13,3,R);
L(1,2,2,2);
L(4,2,6,2);
L(8,2,11,2);
L(13,2,13,4);
L(13,4,14,4);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF (bDefine) then
    FP_AVERAGE_BUFFER_DEFINE(n_Words := iNumberOfIntegerValues,
                             d_Start => Adr_Of_Var(dutAverageBufferInt10));
END_IF;

If (bWrite) AND NOT (bDefine) AND DF(sys_bPulse1s) then
    FP_AVERAGE_BUFFER_WRITE(s := sys_iRingCounter_2ms5,
                            d_Start => Adr_Of_Var(dutAverageBufferInt10));
End_if;

L'ultima revisione: 2022-11-14Feedback su questa paginaPanasonic hotline