Gleitendes Mittel AWL: Unterschied zwischen den Versionen
Aus Software Entwicklung Projekte
David (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== 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 …“) |
(kein Unterschied)
|
Aktuelle Version vom 26. Oktober 2013, 15:05 Uhr
Grundlage
Kopiert aus dem 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