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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 34

Thema: Werte glätten

  1. #11
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    626
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von drfunfrock Beitrag anzeigen
    Ich hatte ebenfalls vergessen, dass man natürlich nicht in eine Word-Var aufaddiert, weil es dann zu Überläufen kommt. Meine Var durchschnitt muss dann grösser als WORD sein. Nimm einfach UDINT.
    Da hat er recht. Das passiert mir des öfteren.
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.

  2. #12
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Ok.. Habe ich gemacht, der Ausgabewert ist realistisch.
    Aaaber: nun pendelt der Ausgabewert fast so schnell wie der Eingabewert, liegt wahrscheinlich daran, dass nur 10 Zyklen addiert werden und die Zykluszeit recht kurz ist (unter 15ms).
    Kann ich das irgendwie schöner machen? Zyklenanzahl erhöhren wird wohl auch nicht endlos gehen, da ich dann ja auch irgendwann einen Überlauf produziere, oder?

    Ausserdem habe ich in einem anderen Thread was davon gelesen, dass man die Werteveränderungen, die ein bestimmtes delta überschreiten, ausblenden kann.
    Das wäre superedel.

    Gruss

    McNugget
    Geändert von McNugget (29.09.2008 um 16:39 Uhr)

  3. #13
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    also langsamer wird deine wertänderung, wenn du nur zu bestimmten zeiten einen neuen wert in dein fifo schreibst.

    delta und grenzen sind ganz einfache grenzwertabragen, also

    IF wert < grenzwert_max AND wert > grenzwert_min
    THEN "wert verarbeiten"
    ELSE "wert ignorieren"
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #14
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Für einen schnellen Test bietet sich die Variante von repök an:

    Code:
    If messwert > LLim AND messwert < ULim THEN
       durchschnitt:=(durchschnitt*100+messwert)/101;
    END_IF
    LLim unteres Limit und ULim Oberes Limit. wenn der aktuelle Messwert ein "Ausreißer" ist wird mit dem alten Durchschnitt gearbeitet. Dies beinhaltet natürlich auch die Gefahr das man einen Sensor defekt nicht erkennt usw. das kann man dann aber auch mit einem Zähler abfangen.

    Code:
    If messwert > LLim AND messwert < ULim THEN
       durchschnitt:=(durchschnitt*100+messwert)/101;
       ErrorCount := 0;
    ELSE
       ErrorCount := ErrorCount + 1;
    END_IF
    
    IF ErrorCount > 20 THEN
       (* Mach was! der Sensor ist kaputt!*);
    END_IF
    If you open your Mind too much, your Brain will fall out.

  5. #15
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Du kannst die Schleife sehr wohl recht heftig erhöhen, wenn die CPU das mitmacht. Das kannst du ja im Systemmanager sehen, wieviel CPU-Zeit verbraucht wird. Ich denke, eine Schleife bis 100 funktioniert auf einem X86-prozessor recht gut.

  6. #16
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Daumen hoch

    Sehr nette Anregungen.
    Vielen Dank.

    @vierlagig: habe jetzt einen Taktgeber davorgesetzt, und das Array auf 100 erhöht: ein schöner ruhiger Wert.
    Zu der Grenzwertverletzung: Wäre das folgende sinnvoll?
    IF wert > grenzwert_max AND wert > grenzwert_min
    THEN "Return"
    ELSE "arbeite die Schleife ab"

    @Zotos: wenn der Sensor defekt ist, würde der Wert doch mit der Zeit gegen Null, bzw. gegen unendlich steigen, oder? (Gilt natürlich nur, wenn der Sensor definitiv einen Schluss oder einen Kabelbruch erlitten hat.)

    Ich habe es bereits bei defekten Transmittern erlebt, dass die von 0-20 mA hoch und runter schwingen. Dazwischen immer mal wieder ein annehmbarer Wert. So ein Fehler liesse sich mit einem solchen array wahrscheinlich auch nnicht herausfinden.

    Zudem hat Wago in seinen Klemmen im Datenwort zwei Statusbits, die auf Fühlerbruch hinweisen, aber dazu komme ich die Tage noch mal. Habe auch da noch dumme Fragen.

    Vielen Dank schon mal für die Vielzahl an Antworten und Tipps.

    Macht ja richtig Spass, so ein Feedback zu bekommen und so nett aufgenommen zu werden.

    McNugget

  7. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von McNugget Beitrag anzeigen
    Ich habe es bereits bei defekten Transmittern erlebt, dass die von 0-20 mA hoch und runter schwingen. Dazwischen immer mal wieder ein annehmbarer Wert. So ein Fehler liesse sich mit einem solchen array wahrscheinlich auch nnicht herausfinden.
    Ich denke doch.
    Du kannst doch in der Schleife genausogut wie du die Summenbildung für den Mittelwert machst auch nach groben Ausreissern gegenüber dem letzten erfassten Mittelwert suchen. Hast du solche erkannt, so kannst du z.B. daraus eine Fehlermeldung generieren oder/und sie bei der Mittelwertbildung ignorieren etc. - Im Prinzip ähnlich wie der Filter von Vierlagig.

    Zu deiner Abtastrate:
    Du könntest den FB auch zyklisch aufrufen und ihm als Parameter die OB1_Zykluszeit und ein gewünschtes Einlese-Intervall übergeben. Die Zykluszeit addierst du auf und führst den FB immer dann aus, wenn die aufaddierte Zeit > der Abtastrate ist.

    Gruß
    LL

  8. #18
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von McNugget Beitrag anzeigen
    @vierlagig: habe jetzt einen Taktgeber davorgesetzt, und das Array auf 100 erhöht: ein schöner ruhiger Wert.
    Zu der Grenzwertverletzung: Wäre das folgende sinnvoll?
    IF wert > grenzwert_max AND wert > grenzwert_min
    THEN "Return"
    ELSE "arbeite die Schleife ab"
    eher:

    IF wert > grenzwert_max OR wert < grenzwert_min
    THEN "Return"
    ELSE "arbeite die Schleife ab"
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #19
    Registriert seit
    29.08.2006
    Beiträge
    195
    Danke
    0
    Erhielt 35 Danke für 21 Beiträge

    Standard

    möchte nur darauf hinweisen das glätten normalerweise etwas anderes ist als durchschnitt.

    der durchschnitt ist je nach anzahl der punkte auch relativ aufwendig.

    besser geegnet sollte da eine tiefpassfunktion sein die den oberen frequenzbereich des signals abschneidet.

    aber beide funktionen durchschnitt sowie tiefpass findest du auch im source code in der open source library von oscat unter www.oscat.de

    der tiefpass heist dort FT_PT1
    OSCAT
    Open Source Community for Automation Technolgy
    www.oscat.de

  10. #20
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @hugo:

    die mittelwertbildung zur quasi-glättung ist ein erprobtes und gängiges mittel. mir ist bis jetzt noch kein erfahrener programmierer untergekommen, der davon abstand nehmen würde. vorallem ist es schnell und einfach umgesetzt und darüber hinaus, richtig implentiert sehr flexibel.

    sicher, es ist nicht die mathematisch korrekte variante, aber bei den meisten messwerten doch ausreichend.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. analoge Messwerte glätten
    Von xinix im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 15.03.2011, 11:09
  2. Antworten: 5
    Letzter Beitrag: 14.09.2010, 17:56
  3. Werte in DB schreiben
    Von SolSna im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 23.01.2008, 13:54
  4. CP 340 / 2 Werte vom PC in ein DB der SPS
    Von maxi im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 16.08.2006, 12:18
  5. Anlogwert glätten
    Von fbeine im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 31.03.2006, 12:00

Lesezeichen

Berechtigungen

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