FP_AVERAGE_BUFFER_DEFINE

Pufferbereich für gleitende Mittelwerte und Summen definieren

Dieser FP-Befehl spezifiziert einen speziellen Puffer zum Berechnen von Mittelwert und Summe aller enthaltenen Werte. Die Startadresse wird durch d_Start und die Größe durch n_Words festgelegt. Der Puffer hat eine besondere Struktur, die im Programmierbeispiel dargestellt ist, wobei die Anzahl der Array-Elemente des letzten Elements iArrData der durch n_words definierten Größe entspricht. Mit dem Befehl FP_AVERAGE_BUFFER_WRITE schreiben Sie in den Puffer.

Parameter

Eingang

n_Words (WORD, INT, UINT)

Spezifiziert die Speichergröße des Puffers

Werte: 1–30000

Ausgang

d_Start (WORD, INT, UINT)

Anfangsadresse des Puffers

Verwenden Sie einen benutzerdefinierten SDT, wie im Programmierbeispiel dargestellt.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn ein für einen Parameter angegebener Wert außerhalb des zulässigen Bereichs liegt.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn ein für einen Parameter angegebener Wert außerhalb des zulässigen Bereichs liegt.

Beispiel:

SDT

Elemente des strukturierten Datentyps (Bezeichner):

uiBufferSize

Puffergröße

uiNumberOfStoredData

Anzahl der gespeicherten Daten

diTotalValueOfStoredData

Gesamtsumme der gespeicherten Daten

rMovingAverage

Gleitende Mittelwertbildung

uiWritePointer

Position des Schreibzeigers

iArrData

Enthält die Werte des Puffers. Die Anzahl der ganzzahligen Werte (in diesem Beispiel 10) muss gleich der Puffergröße sein, die mit iNumberOfIntegerValues definiert ist.

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

	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

POE-Rumpf

Wenn die Variable bDefine auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

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

ST-Rumpf

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;

Letzte Änderung am: 2022-11-11Feedback zu dieser SeitePanasonic Hotline