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

Ergebnis 1 bis 7 von 7

Thema: Median S7-1200

  1. #1
    Registriert seit
    28.11.2011
    Beiträge
    58
    Danke
    34
    Erhielt 4 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bin auf der Suche nach einem Median Baustein.

    Ich benötige diesen für eine Temperaturauswertung und einer für die Auswertung eines Lasersignales das Schwankungen hat. Die Mittelwertauswertung sehe ich nicht als geeignet an.

    Ich habe bereits eine Median Baustein aus der Oscat Bibliothek. Habe auch eine Version die Funktioniert aber leider nur für die 300er. Sobald ich diesen in 1200er Schiebe bekommen ich mehrer Fehlermeldungen. Ich habe mich schon ein wenig in SCL eingearbeitet um die Grundbegriffe zu verstehen. Leider komm ich hiermit aber nicht weiter.

    Kann mir jemand dabei weiterhelfen bzw hat schon jemand einen fertigen Baustein?

    Mit freundlichen Grüßen
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Median S7-1200  

  2. #2
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Hi, dein Codeschnippsel ist ja nicht so dolle kommentiert oder gibts da eine extra Doku dazu?

    Kerngedanke ist ja die Glättung(Anpassung) von Einzelwerten in einer Reihe, hauptsächlich um Ausreißer (Störungen) zu eliminieren.

    In deinem Code wird nun erstmal geprüft ob genug Werte vorhanden sind.
    In wikipedia findest du schnell die Funktionsweise:

    Code:
    To demonstrate, using a window size of three with one entry  immediately preceding and following each entry, a median filter will be  applied to the following simple 1D signal:
    
     x = [2 80 6 3]
     So, the median filtered output signal y will be:
    y[1] = Median[2 2 80] = 2
    y[2] = Median[2 80 6] = Median[2 6 80] = 6
    y[3] = Median[80 6 3] = Median[3 6 80] = 6
    y[4] = Median[6 3 3] = Median[3 3 6] = 3
     i.e. y = [2 6 6 3].
    Sollte nicht schwer sein dies für die 1200er umzusetzen.
    MfG MK
    and we all support the team (S.King - Die Arena)

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

    Michael J. (05.12.2012)

  4. #3
    Registriert seit
    28.11.2011
    Beiträge
    58
    Danke
    34
    Erhielt 4 Danke für 3 Beiträge

    Standard

    Wie kann ich das den umsetzen? Wie sage ich ihm den das er das sortieren soll? Bin da gerade noch ein wenig auf dem Holzweg. Wäre schön wenn du mir da ein paar Ansätze geben könntest.

    Gruß Michael

  5. #4
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Zitat Zitat von Michael J. Beitrag anzeigen
    Wie kann ich das den umsetzen? Wie sage ich ihm den das er das sortieren soll? Bin da gerade noch ein wenig auf dem Holzweg. Wäre schön wenn du mir da ein paar Ansätze geben könntest.

    Gruß Michael
    Ansatzmöglichkeiten:
    A) Wert direkt filtern
    B) Werte filtern wenn Messreihe voll

    Generell
    1)Index (Pointer) um eins erhöhen
    2) Median mit Werten bilden (immer ungerade Anzahl im array)
    3) Werte in Median-Breite ordnen
    Bei einem 3er Median sehr einfach mit IF Else
    Bei höheren Median sortieren (hier Stichwort: Bubble Sort)
    Ist ein Wert größer als der nächste, dann tausche die Werte, bis alle Werte aufsteigend richtig)

    Bedeutet zwei inneinander verschachtelte Schleifen.
    Beispiel Hochsprache
    Code:
            for (n=A.size; n>1; n=n-1)
               for (i=0; i<n-1; i=i+1)
                 if (A[i] > A[i+1])
                     A.swap(i, i+1)  
                // ende if 
              // ende innere for-Schleife 
            // ende äußere for-Schleife
    gibts sicher auch in der Oscat als fertigen Baustein.

    4) Wert = mittlerer Wert im geordneten Median

    MfG MK
    and we all support the team (S.King - Die Arena)

  6. Folgender Benutzer sagt Danke zu Sinix für den nützlichen Beitrag:

    Michael J. (05.12.2012)

  7. #5
    Registriert seit
    28.11.2011
    Beiträge
    58
    Danke
    34
    Erhielt 4 Danke für 3 Beiträge

    Standard

    Ich habe es hinbekommen. Funktioniert besser wie ich mir das jemals erträumt hätte.

    Ein Problem habe ich aber noch.

    Ich kann wie ich es jetzt gebaut habe kein 27 Arrays vorgeben weil dann die SPS in Zyklus Fehler geht. Liegt das noch an der verwendeten 2.2 anstatt einer 3.0? Oder einer einer eine Idee wie man das Optimieren kann.

    Wahrscheinlich liegt das an meiner Programmierung....

    Ich Prinzip ist der Median für die vorgesehenen Anwendungen ausreichend genug aber ich will den Baustein gerne ein wenig perfektionieren.

    Vielleicht hat ja noch einer eine Idee.

    Ein Dankeschön für die denjenigen die diesen Baustein verwenden möchten wäre seht nett. Der Baustein kann aufgrund seiner Progammierart auch für eine 300/400 verwendet werden.

    Gruß Michael
    Angehängte Dateien Angehängte Dateien

  8. #6
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Hi Michael,

    dann erhöht die Sortierung deine Zykluszeit zu viel.
    Abhilfe: den Wert immer direkt nach dem einlesen schon filtern (Vorraussetzung du hast mindestens 3 Werte).

    Zu deinem Programm:
    Du hast eine Variable "swap" deklariert. "Swap" ist aber schon eine Anweisung (findest du in der Bibliothek unter "Verschieben")
    Genau mit dieser Anweisung kannst du dir wiederum den Umweg über die Hilfsvariable "aux" sparen.

    Für den ersten und letzten Wert evtl. eine Sonderbehandlung überlegen, siehe Beitrag #2

    MfG MK
    and we all support the team (S.King - Die Arena)

  9. #7
    Registriert seit
    28.11.2011
    Beiträge
    58
    Danke
    34
    Erhielt 4 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So jetzt habe ich korrigiert. Jetzt läufst eindeutig schneller. Danke für deine Tipps.

    Die Swap Funktion macht nicht das was mein tauschen macht. Die dreht ja nur die Daten und tauscht diese nicht.

    Gruß Michael
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. Datenaustausch zwischen S7-1200 und S7-1200
    Von baschan im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 09.12.2011, 00:27
  2. S7 1200
    Von redscorpion im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.08.2011, 15:57
  3. S7 1200
    Von c.wehn im Forum E-CAD
    Antworten: 5
    Letzter Beitrag: 09.03.2011, 10:36
  4. S7 1200
    Von Rollilli im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.07.2010, 11:22
  5. s7-1200
    Von holschin im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 21.06.2010, 11:55

Lesezeichen

Berechtigungen

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