Datenbaustein auslesen

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe folgendes Problem:

In einem DB werden kontinuierlich Daten abgelegt (Ringspeicherprinzip).
Ich suche nun nach einer Möglichkeit den Durchschnittswert zu bestimmen.
Gibt es eine Möglichkeit dies einfach zu verwirklichen? Der FC102 macht
ja ähnliches nur das mir die mittlere Abweichung leider nicht weiterhilft.

Gruss Mathias
 
Falls es sich um INT-Werte handelt :?: , würde ich diese bereits beim Einlesen in einem DINT aufaddieren und durch die Anzahl der vorhandenen Einträge dividieren (/D). Wenn das Register voll ist, muss natürlich der herausfallende Wert vor der Divison von der Summe subtrahiert werden. Wenn der Ringspeicher bereits funktioniert, sollte diese Berechnung kein Problem sein.

Gruss, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
dieser baustein ermittelt anzahl, min, max, mittelwert, summe.

wenn du nicht alle werte brauchst kannst den ja anpassen.

awl-quelle
Code:
FUNCTION "DB-Bereich_Auswerten" : VOID
TITLE =
AUTHOR : Lischnew
FAMILY : ARCHIV
NAME : DB_Auswe
VERSION : 1.0


VAR_INPUT
  Datenbaustein : BLOCK_DB ;	//Datenbaustein der ausgewerten werden soll
  Datenanfang : INT ;	//erstes Datenwort
  Datenende : INT ;	//letztes Datenwort
END_VAR
VAR_OUTPUT
  Anzahl : INT ;	//Anzahl der Datenworte
  Min : INT ;	//Kleinster Wert aller Datenworte
  Max : INT ;	//Grösster Wert aller Datenworte
  Schnitt : INT ;	//Durchschnitt (Mittelwert) aller Datenworte
  Summe : DINT ;	//Summe aller Werte aller Datenworte
END_VAR
VAR_TEMP
  summe_temp : DINT ;	
  akt_dw : DINT ;	//aktuelles Datenwort
  akt_wert : INT ;	//Wert des akt_dw
END_VAR
BEGIN
NETWORK
TITLE =

      AUF   #Datenbaustein; 

      L     #Datenende; 
      L     #Datenanfang; 
      -I    ; 
      L     1; 
      +I    ; 
      T     #Anzahl; 

      NOP   0; 

      L     #Datenanfang; 
      T     #akt_dw; 

      L     #akt_dw; 
      SLD   3; 
      LAR1  ; 

      L     DBW [AR1,P#0.0]; 
      T     #Min; 
      T     #Max; 
      T     #Schnitt; 
      T     #Summe; 
      T     #summe_temp; 

anf:  NOP   0; //schleifenanfang

      L     #akt_dw; 
      L     2; 
      +D    ; //nächstes dw
      T     #akt_dw; 
      L     #Datenende; 
      >D    ; 
      SPB   ende; //Schleifenende erreicht

      L     #akt_dw; 
      SLD   3; 
      LAR1  ; 

      L     DBW [AR1,P#0.0]; 
      T     #akt_wert; 

// Auswertung kleinster Wert
      L     #Min; 
      L     #akt_wert; 
      <I    ; 
      SPB   min0; 
      L     #akt_wert; 
      T     #Min; 
min0: NOP   0; 

// Auswertung grösster Wert
      L     #Max; 
      L     #akt_wert; 
      >I    ; 
      SPB   max0; 
      L     #akt_wert; 
      T     #Max; 
max0: NOP   0; 

// Berechnen der Summe
      L     #summe_temp; 
      L     #akt_wert; 
      +D    ; 
      T     #summe_temp; 

      SPA   anf; //zum Schleifenanfang

ende: NOP   0; 

// Berechnen des Durchschnitt
      L     #summe_temp; 
      T     #Summe; 
      L     #Anzahl; 
      /D    ; 
      T     #Schnitt; 


END_FUNCTION
 
Zurück
Oben