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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Werte beruhigen

  1. #1
    Registriert seit
    16.10.2012
    Beiträge
    742
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin zusammen.

    Ich möchte sehr gerne einen halb-analogen Wert beruhigen, der mir noch zu sehr schwankt bzw. teilweise auch richtig heftige Ausschläge zeigt, die nicht ins Messergebnis passen.
    Ich habe dabei entweden an einen gleitenden Mittelwertfilter gedacht, oder an einen Tiefpass (1.er Ordnung, 2.er Ordnung ?? N-ter Ordnung ?) Grundlage sind jeweils OSCAT-Bausteine.

    Die Werte werden je 150mS abgefragt also etwa 6 mal pro Sekunde eingelesen. Wie müsste ich jetzt sinnvollerweise die Glättungszeit und die Glättungskonstanten (K1, K2..) wählen ?
    Wie kommt man am schnellsten zu den optimalen Einstellungen ?


    Thanx im Voraus!
    Zitieren Zitieren Werte beruhigen  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Heftige Ausschläge sprechen IMHO gegen einen gleitenden Mittelwert. Wie wäre es mit einem FIFO und darauf aufgesetzen Median?


    mfG René

  3. #3
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    742
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Wie wäre es mit einem FIFO und darauf aufgesetzen Median?
    Habe ich auch schon überlegt. Würde denn aber ein Tiefpass tendenziell nicht genau solche einzelstehende Spitzen ausfiltern können ?
    ...P.S. Die Implementierung von FIFO im Verbund mit Median ist mir jetzt auch noch nicht so ganz geläufig

  4. #4
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Mal eine Strategie kurz angedeutet:

    Nimm jeweils die letzten n Werte, bilde den Mittelwert M1, werfe die Extrema (die x Werte, die am meisten vom Mittel M1 abweichen) fort, bilde über die verbleibenden Werte das Mittel M2. Das kannst Du auch rekursiv machen.

    M2 ist Dein beruhigter Wert. Die Anzahl der weggelassenen x Extremwerte kannst Du nur durch Ausprobieren optimieren. Das Ganze ist dann ein modifizierter Tiefpass, der durch die Anzahl n bestimmt wird.

    Natürlich ist diese Sache eine Beschönigung, man müsste zuerst einmal versuchen, zu ergründen, woher die Ausreisser stammen!

    Wenn die Quelle schon nichts taugt, dann wird die Auswertung nicht unbedingt besser.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  5. #5
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    742
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Wenn die Quelle schon nichts taugt, dann wird die Auswertung nicht unbedingt besser.
    Die Quelle taugt nichts, aber seitens des AG kam die Aufforderung diese zu implementieren. Von daher...
    Außerdem - naja was heißt heftige Ausreißer. Wir haben z.B. einen exacten Wert (nach der Linearisierung) der bei 380 liegt. Jetzt geht er teilweise runter auf 370 und hoch bis 390, aber nicht in einem Peak, sondern er "krabbelt" sich da so lustig hoch und runter und schwankt dabei immer um 2-3 Einheiten. Wenn man dieses feine Zittern wegnehmen würde, wäre ja möglicherweise schon etwas gewonnen.

  6. #6
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Gegen so einen Drift wird es schwer mit einem Filter anzugehen ohne die gewollte Signaländerungen zu sehr zu verzerren. Hochfrequente Schwankungen mit geringer Amplitude bekommst du aber idR schon über wenig Messwerte gut herausgemittelt. Manche Steuerungshersteller haben auch schon in den Analogeingangskarten Filter integriert, die man nach Bedarf aktivieren kann, vlt. gibt es das bei dir auch?
    Sänd from mei Kombjudder mitse Dastadurr.

  7. #7
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    742
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Zitat Zitat von MasterOhh Beitrag anzeigen
    Hochfrequente Schwankungen mit geringer Amplitude bekommst du aber idR schon über wenig Messwerte gut herausgemittelt. Manche Steuerungshersteller haben auch schon in den Analogeingangskarten Filter integriert, die man nach Bedarf aktivieren kann, vlt. gibt es das bei dir auch?
    Die Werte werden aber nicht über eine analoge Karte eingelesen sondern per RS-232 Interface. Die Sachlage ist da leider etwas komplexer. Steuerung is ne normale S7-416 mit abgesetzten I/O s sprich ET200S.
    Welche Werte des Filtes (und welchen Filters ? FILTER_I, FT_PT1, Gleitender Mittelwert ?) würdest Du zu Beginn veranschlagen um das hochfrequente Zittern zu unterdrücken ?

  8. #8
    Registriert seit
    25.10.2013
    Ort
    Castrop-Rauxel
    Beiträge
    177
    Danke
    36
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hier ist ein schöner EA-Filter:

    Code:
    FUNCTION_BLOCK "Filter_AA"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          IN : Real;
          V_IN : Real;
       END_VAR
    
       VAR_OUTPUT 
          OUT : Real;
       END_VAR
    
       VAR 
          V : Real;
       END_VAR
    
    
    BEGIN
        
        
        
        #V:=#V_IN;
          IF #IN = #OUT THEN
            #V:=0.0;
          ELSIF #IN<#OUT THEN
            #OUT:= LIMIT(MN:=0.0,IN:=#OUT-MIN(IN1:=#V,IN2:=#OUT-#IN),MX:=100.0);
          ELSIF #IN>#OUT THEN
            #OUT:= LIMIT(MN:=0.0,IN:=#OUT+MIN(IN1:=#V,IN2:=#IN-#OUT),MX:=100.0);
          END_IF;
          
        
        
    END_FUNCTION_BLOCK

  9. #9
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    742
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Hier ist ein schöner EA-Filter:
    Danke für den Code. Funktioniert auch anständig ? Hast Du selber geschrieben ? Mit welchen Arten von Signalen hast Du das schon getestet ?
    Was für Parameter sollen da rein ? Warum wird der max. Wert auf 100 begrenzt ?

  10. #10
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Draco Malfoy Beitrag anzeigen
    Habe ich auch schon überlegt. Würde denn aber ein Tiefpass tendenziell nicht genau solche einzelstehende Spitzen ausfiltern können ?
    ...P.S. Die Implementierung von FIFO im Verbund mit Median ist mir jetzt auch noch nicht so ganz geläufig
    Mir ist dafür der Tiefpass hier nicht so geläufig

    Ich habe so eine ähnliche Problemstellung so gelöst.
    Code:
    FUNCTION_Block WM_gleit_MedianTITLE = '_MEDIAN'
    (* Diese Funktion gibt den Median aus bis zu 200 aufgezeichneten Gleitpunktwerten aus 
       V1.0 Abgegebene Version
     *)
    
    
    VERSION : '1.0'
    AUTHOR  : VoR
    NAME    : Med_R
    FAMILY  : FunkB
    
    
    VAR_INPUT
     MW : REAL; // Windmesswert.
     Takt : BOOL; // Trigger um Messwert einzlesen. Reagiert auf steigende Flanke
     Anz : INT; // Anzahl Messwerte aus denen der Median gebildet wird.
    
    
    END_VAR
    VAR
     rwert : ARRAY[1..200] OF REAL; // Array für FIFO
     rwert_sort : ARRAY[1..200] OF REAL; // Array für Sortierung
     rMedian : REAL; 
     getauscht : BOOL;
     zw: REAL;
     i: INT;
     anzahl_save : INT;
     TAKT_ZM : BOOL;
        Onimp : BOOL;
        Onimpmem : BOOL;
    END_VAR
    VAR_OUTPUT
      median: REAL;
    END_VAR
    
    
    
    
    BEGIN
    IF Anz < 3 THEN // Sicherstellen das index für FOR Schleife mindestens eine drei enthält.
        anzahl_save := 3;
    ELSE
        anzahl_save := Anz;
    END_IF;
    
    
    Onimp :=  Takt AND NOT Onimpmem;
        Onimpmem := Takt;
    
    
    
    
    IF onimp THEN // nur beim Takt ausführen
        FOR i := anzahl_save TO 2 BY -1 DO
            rwert[i] := rwert[i - 1];
        END_FOR;
            rwert[1] := MW;
    END_IF;
    
    
        rwert_sort := rwert; // kopieren zum sortieren
    
    
    (* Bubblesort Algoritmus sortiert aufsteigend das Array rwert (geschwindigkeit)
       und kopiert die irtg (windrichtung) die dazugehören gleich mit *) 
    REPEAT
      getauscht := false; // tauschmerker
          FOR i := anzahl_save TO 2 BY -1 DO
              IF rwert_sort[i-1] > rwert_sort[i] THEN // tauschen
                zw := rwert_sort[i];
                rwert_sort[i] := rwert_sort[i-1];
                rwert_sort[i-1] := zw;
                getauscht := true;
              END_IF;
          END_FOR;
      UNTIL NOT getauscht
    END_REPEAT;
    
    
    
    
       
    // median auswählen    
    median := rwert_sort[anzahl_save/2]; // den wert aus der Mitte der Anzahl werte nehmen. Wurden sortiert
    
    
    END_FUNCTION_BLOCK
    Das ist der Ursprungsbaustein. Das sortierte Array muss also nicht im Stat bereich stehen. ausserdem werden noch nicht gefüllte Zellen nicht ausgefiltert. Aber die Grundsätzliche Funktion ist gegeben. Vielleicht hilft dir das schon weiter.

    mfG René
    Geändert von vollmi (03.11.2014 um 13:15 Uhr) Grund: rMedian als INT deklariert, sollte REAL sein.

  11. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    Draco Malfoy (03.11.2014)

Ähnliche Themen

  1. 3 Werte vergleichen
    Von chipset im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.04.2012, 21:19
  2. Werte Abspeichern
    Von mfg_mr.e im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 17.06.2011, 20:57
  3. Thermoelement AI beruhigen
    Von chefren_new im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 21.04.2010, 11:06
  4. Werte angleichen
    Von SaschaP im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 13.01.2009, 08:45
  5. Werte in DB schreiben
    Von SolSna im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 23.01.2008, 13:54

Lesezeichen

Berechtigungen

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