FUNCTION_BLOCK FB 37
TITLE =Mittelwertbildung nach vorgebaren Messzyklen
//Messwert in REAL
//Mit jeder Änderung des Messwertes wird dieser gespeichert und nach der
//vorgegebenen Anzahl der Mittelwert errechnet und ausgegeben.
VERSION : 0.1
VAR_INPUT
Messwert : REAL ;
Messcyc_Anz : INT ;
END_VAR
VAR_OUTPUT
Mittelwert : REAL ;
END_VAR
VAR
Messwert_ALT : REAL ;
Messunglaeuft : BOOL ;
Gespeichert : BOOL ;
T_Anzahl : INT ;
Speicheraddresse : DWORD ;
Anfangsaddresse : DWORD ;
Zwischenergebnis : ARRAY [1 .. 99 ] OF REAL ;
T_Mittelwert : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =
L #Messwert;
L #Messwert_ALT;
==R ;
SPB ENDE;
U #Messunglaeuft;
SPB strt;
SET ;
= #Messunglaeuft;
L L#26;
SLD 3;
T #Speicheraddresse;
T #Anfangsaddresse;
L #Messcyc_Anz;
L 1;
-I ;
L 99;
>I ;
SPBN anza;
T #T_Anzahl;
SPA ENDE;
anza: TAK ;
T #T_Anzahl;
SPA ENDE;
strt: L #Speicheraddresse;
LAR1 ;
Mess: NOP 0;
U #Gespeichert;
SPBN wetr;
CLR ;
= #Gespeichert;
SPA ENDE;
wetr: NOP 0;
L #Messwert;
L #Messwert_ALT;
+R ;
L 2.000000e+000;
/R ;
T DID [AR1,P#0.0];
SET ;
= #Gespeichert;
L #Speicheraddresse;
L P#4.0;
+D ;
T #Speicheraddresse;
L #T_Anzahl;
DEC 1;
T #T_Anzahl;
L 0;
==I ;
SPBN Mess;
L #Anfangsaddresse;
LAR1 ;
L DID [AR1,P#0.0];
L DID [AR1,P#4.0];
+R ;
L 2.000000e+000;
/R ;
T #T_Mittelwert;
L 0.000000e+000;
T DID [AR1,P#0.0];
T DID [AR1,P#4.0];
TAR1 ;
L P#8.0;
+D ;
LAR1 ;
L #T_Anzahl;
L 2;
-I ;
Mitt: T #T_Anzahl;
L #T_Mittelwert;
L DID [AR1,P#0.0];
+R ;
L 2.000000e+000;
/R ;
T #T_Mittelwert;
L 0.000000e+000;
T DID [AR1,P#0.0];
TAR1 ;
L P#4.0;
+D ;
LAR1 ;
L #T_Anzahl;
LOOP Mitt;
CLR ;
= #Messunglaeuft;
L #T_Mittelwert;
T #Mittelwert;
L 0.000000e+000;
T #T_Mittelwert;
ENDE: NOP 0;
L #Messwert;
T #Messwert_ALT;
END_FUNCTION_BLOCK