3.060 Byte hinzugefügt,
13:05, 26. Okt. 2013 == Grundlage ==
Kopiert aus dem [http://www.sps-forum.de SPS-Forum].
Speichern von 10 Messwerten in einem FIFO
FUNCTION FC 100 : VOID
TITLE =FIFO
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : FIFO
VERSION : 1.0
VAR_INPUT
DB_Werte : BLOCK_DB ;
Anzahl_Werte : INT ;
Wert : REAL ;
END_VAR
VAR_TEMP
DB_Register : WORD ;
AR1_Register : DWORD ;
Zwischenwert : REAL ;
Schleife : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
L DBNO; // DB-Register
T #DB_Register;
TAR1 ; // AR1-Register
T #AR1_Register;
NETWORK
TITLE =FIFO
AUF #DB_Werte; // DB-Werte
L #Wert; // Wert
T #Zwischenwert; // Zwischenwert
L P#0.0;
LAR1 ;
L #Anzahl_Werte; // Anzahl Werte
M01: T #Schleife;
L DBD [AR1,P#0.0]; // Wert
L #Zwischenwert; // Zwischenwert
T DBD [AR1,P#0.0]; // Zwischenwert -> Wert
TAK ;
T #Zwischenwert; // Wert -> Zwischenwert
L P#4.0;
+AR1 ;
L #Schleife;
LOOP M01;
NETWORK
TITLE =Register wiederherstellen
AUF DB [#DB_Register]; // DB-Register
L #AR1_Register; // AR1-Register
LAR1 ;
END_FUNCTION
Und die Berechnung des Mittelwertes
FUNCTION FC 110 : VOID
TITLE =Mittelwert
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : FIFO
VERSION : 1.0
VAR_INPUT
DB_Werte : BLOCK_DB ;
Anzahl_Werte : INT ;
END_VAR
VAR_OUTPUT
Mittelwert : REAL ;
END_VAR
VAR_TEMP
DB_Register : WORD ;
AR1_Register : DWORD ;
Zwischenwert : REAL ;
Zaehler : REAL ;
Schleife : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
L DBNO; // DB-Register
T #DB_Register;
TAR1 ; // AR1-Register
T #AR1_Register;
NETWORK
TITLE =Mittelwert
//Mittelwert
//
//M = LM + ((Z - LM) / N) = LM + Z / N - LM / N
//
//M = Mittelwert
//LM = Letzter Mittelwert
//Z = Wert
//N = Anzahl Werte
//
AUF #DB_Werte; // DB-Werte
L 0.000000e+000;
T #Zwischenwert; // M Mittelwert
L 1.000000e+000;
T #Zaehler; // N Anzahl Werte
L P#0.0;
LAR1 ;
L #Anzahl_Werte; // Anzahl Werte
M01: T #Schleife;
L DBD [AR1,P#0.0]; // Z Wert
L #Zwischenwert; // LM Letzter Mittelwert
-R ;
L #Zaehler; // N Anzahl Werte
/R ;
L #Zwischenwert; // LM Letzter Mittelwert
+R ;
T #Zwischenwert; // M Mittelwert
L #Zaehler; // N Anzahl Werte
L 1.000000e+000;
+R ;
T #Zaehler; // N Anzahl Werte
L P#4.0;
+AR1 ;
L #Schleife;
LOOP M01;
L #Zwischenwert; // M Mittelwert
T #Mittelwert; // Mittelwert
NETWORK
TITLE =Register wiederherstellen
AUF DB [#DB_Register]; // DB-Register
L #AR1_Register; // AR1-Register
LAR1 ;
END_FUNCTION