Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Analogwert verzögert in mw speichern

  1. #1
    Registriert seit
    28.09.2007
    Beiträge
    17
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Erst mal hallo an alle!!!!

    Nun zu meiner Frage
    Ich suche nach einer Möglichkeit um Analogwerte verzögert einzulesen sodass ich aus ihnen einen Mittelwert bilden kann. Imoment wird der Wert permanent aktualisiert, ich suche aber nach einer lösung um diesen Wert z.b. alle 5s einmal einzulesen und ihn in einem mw zu speichern.
    danke im vorraus
    Zitieren Zitieren Analogwert verzögert in mw speichern  

  2. #2
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Stichwort: OB35
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  3. Folgender Benutzer sagt Danke zu OHGN für den nützlichen Beitrag:

    Kaih (12.10.2007)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    eine Mittelwert-Bildung läuft nur, wenn du mehrere Werte hast ...
    Du könntest z.B. im OB35 mit entsprechendem Intervall (z.B. 100 ms) deinen Analog-Eingang in ein FIFO einlesen und aus dem FIFO immer die ersten 50 Werte addieren und durch 50 teilen. Damit hast du einen gedämpften Mittelwert, der sich aus der Werte der letzten 5 s ergibt ...

    OHGN hat das Stichwort auch schon gegeben ...

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Kaih (12.10.2007)

  6. #4
    Kaih ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.09.2007
    Beiträge
    17
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    danke!!!!!

  7. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich hätte da was in SCL:

    Code:
    FUNCTION_BLOCK FB109
    
    VAR_INPUT
        Start: BOOL;
        Anzahl: INT;
        Messwert: INT;
    END_VAR
    
    VAR_OUTPUT
        Fertig: BOOL;
        Messwertmittel: INT;
    END_VAR
    
    VAR_TEMP
        // temporäre Variablen
        Messwertsumme: DINT;
    END_VAR
    VAR
        // statische Variablen
      Startflanke: BOOL;
      I, K: INT;
      Fertig_stat: BOOL;
      Messwertmittel_stat: INT;
      arMesswert: ARRAY[1..100] OF INT;
    END_VAR
    
        IF Anzahl > 100 THEN
            Anzahl := 100;
        END_IF;    
    
        // Startflanke
        IF Start AND NOT Startflanke THEN
            Messwertsumme := 0;
            Fertig_stat := False;
            Startflanke := True;
            I := 0;
        END_IF;
        
        IF Start AND Startflanke AND NOT Fertig_stat THEN
            I := I + 1; 
            arMesswert[I] := Messwert;            
        END_IF;
        
        IF I = Anzahl THEN
            Messwertsumme := 0;
            FOR K := 1 TO Anzahl DO
                Messwertsumme := Messwertsumme + arMesswert[K];
            END_FOR;           
            Messwertmittel_stat := DINT_TO_INT(Messwertsumme DIV Anzahl);
            Fertig_stat := True;
        END_IF; 
       
        IF NOT Start THEN
            StartFlanke := FALSE;
            Fertig_stat := False;
        END_IF;
        
        Messwertmittel := Messwertmittel_Stat;
        Fertig := Fertig_stat;       
        ;
    END_FUNCTION_BLOCK
    Bei Start wird die eingestellte Anzahl der Messwerte (max. 100) aufgenommen, bei Fertig wird der Messmittelwert ausgegeben.

    Aufruf des Bausteines wie folgt:

    Code:
          UN    "MS03 HM Fertig1 oben"
          =     "MS03 HM Start1 oben"
    
          CALL  "MITTELWERT" , "IDB_Mittelwert_o1"
           Start         :="MS03 HM Start1 oben"
           Anzahl        :=100
           Messwert      :="DATA_STATION_03".Norm_Out_oben
           Fertig        :="MS03 HM Fertig1 oben"
           Messwertmittel:="DATA_STATION_03".Norm_Out_oben_mw_anzeig
    Solltest du keine SCL haben, kann ich dir auch den übersetzten Baustein schicken.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Kaih (12.10.2007)

  9. #6
    Registriert seit
    20.04.2006
    Ort
    Falkenhagen
    Beiträge
    150
    Danke
    28
    Erhielt 26 Danke für 24 Beiträge

    Standard

    Mittelwert = MW(n-1) + ((Messwert - MW(n-1)) / n)

    wobei: MW(n-1) = Mittelwert aus letztem Durchlauf
    n = Anzahl Messungen

    Das könnte Speicherplatz sparen

  10. #7
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Wenn man ohnehin nur den Mittelwert braucht, kann man die Meßwerte n-mal zu einer Speichervariablen addieren und dann durch n teilen. Dann braucht man nur 2 Variablen.

    Etwa so


    U Trigger
    SPBN gnlh

    L Meßwertespeicher
    L Meßwerteingang
    +D
    T Meßwertespeicher

    gnlh: L n
    L Schleifenzähler
    >=D
    SPBN
    L Meßwertespeicher
    L n
    /D
    T Mittelwert

    ende: SET
    R Trigger
    Geändert von derwestermann (28.09.2007 um 14:47 Uhr) Grund: Ich kriege dieses Extrafeld mit quote oder so nicht hin

  11. #8
    Registriert seit
    20.04.2006
    Ort
    Falkenhagen
    Beiträge
    150
    Danke
    28
    Erhielt 26 Danke für 24 Beiträge

    Standard

    oder so...

    Code:
     MW = ((n * MW(n-1)) + Messwert) / n
    ohne Schleife

  12. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    @Frank:
    nur mal so am Rande ... aus welchen Werten bildest du denn den Mittelwert ? ... und worauf bezieht sich dieser ?

    Also ich fand das Beispiel von Ralle da schon sehr treffend ...

  13. #10
    Registriert seit
    02.02.2006
    Ort
    Hessen
    Beiträge
    429
    Danke
    16
    Erhielt 28 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    wenn nur ein Wert etwas geglättet werden soll: (gespeicherter Wert + gelesener Wert) / 2

    Alle frischen Änderungen werden pro Aufruf nur zur Hälfte übernommen. Manchmal reicht das.
    mfG Werner
    Hoch lebe die Suchfunktion!
    Zitieren Zitieren Glättung  

Ähnliche Themen

  1. Programme verzögert aufrufen
    Von gloeru im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 28.04.2011, 18:48
  2. Verzögert in DB schreiben
    Von bastler im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 06.09.2009, 17:41
  3. 3 Pumpen verzögert einschalten
    Von Poldi007 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 11.06.2009, 17:59
  4. Eingänge verzögert einlesen???
    Von Ollypse im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 20.01.2009, 22:44
  5. Impulsfolge speichern und verzögert ausgeben
    Von lefrog im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 31.01.2007, 23:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •