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

Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 44

Thema: Rundungsfehler

  1. #21
    borromeus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habs mal mit roher Gewalt gelöst: Schleife zum verschieben, Schleife zum Addieren.
    Da es im PLCSIM läuft kann ich allerdings nichts über die Laufzeit, die es auf der 416er haben wird sagen.
    Ich werde das ausprobieren.

    @Onkel:
    Es geht nicht darum wie genau der Mittelwert ist, da reichen vermutlich 2%, weil genauer misst der Durchflussmesser ohnehin nicht, es ging um das wegdriften wenn man millionenmale nur Werte abzieht und dazuzählt.
    In einer ersten Schleife wird das Speicherfach mit den 2160 Werten gefüllt. Dabei könnte man ja schon mitaddieren. Und von da an weg nur mehr: ältester Wert subtrahieren, neuester Wert addieren.

    Deinen Gedanken mit: "den aktuellen Mittelwert anstatt des ältesten Wertes von der Summe zu subtrahieren." verstehe ich leider nicht.
    Das Ergebnis soll ein gleitender 6h Mittelwert sein.

  2. #22
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Ich habs mal mit roher Gewalt gelöst: Schleife zum verschieben, Schleife zum Addieren.
    Das Verschieben kannst Du Dir doch sparen, wenn Du das ganze als Ringpuffer anlegst.
    Gruß
    Erich

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

    borromeus (03.12.2015)

  4. #23
    borromeus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Zitat Zitat von LargoD Beitrag anzeigen
    Das Verschieben kannst Du Dir doch sparen, wenn Du das ganze als Ringpuffer anlegst.
    Gruß
    Erich
    Mann bin ich dämlich!
    Danke dass Du mich darauf hingewiesen hast.

  5. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Wenn Zeit für eine Verschiebe-Schleife war, dann ist auch Zeit, dabei gleich die Addition mit zu erledigen, wenn sowieso jedes Element angefasst wird.

    Also ich würde "vorsichtshalber" "regelmäßig" eine komplett-Addition der Werte machen, weil der Puffer nicht vor Zugriffen von außen geschützt ist. Es reicht, daß ein Wert im Puffer versehentlich/unbemerkt verändert wird - ab dann würde das Weiterrechnen mit nur In-Wert und Out-Wert einen bleibenden Fehler haben.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #25
    borromeus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Danke Harald, aber im PCS7 schreibt keiner auf die Instanz.


    So meine werten, ich habe Ergebnisse.
    Ich habe es schön auf Ringpuffer umgebaut und gleich mal einen Baustein der die REAL x 100.0 in DINT wandelt und laufen mitaddiert/subtrahiert.
    Es driftet auseinander.
    Warum weiss ich noch nicht, einen Programmierfehler schliesse ich fast aus, weil man ja kaum was falsch machen kann.

    Wen es interessiert, ein paar Screenshots.

    Man sieht auf Seite 6 des PDF's schön, dass die Werte exakt gleich sind, nur die Summen auseinandergehen.

    Zu den Zeiten: das ganze ist um den Faktor 100x schneller, also ein Umlauf im Puffer braucht 216 Sekunden (statt 6h).

    Hat wer eine Erklärung - aus der Entfernung?
    Angehängte Dateien Angehängte Dateien
    Geändert von borromeus (03.12.2015 um 18:36 Uhr)

  7. #26
    Registriert seit
    09.08.2006
    Beiträge
    3.628
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    verwendest Du die APL? da gibt's doch nen Baustein MEANTIME ...

    ansonsten bietet Wikipedia ja auch gute Nachhilfe
    https://de.wikipedia.org/wiki/Gleitender_Mittelwert



    Mittelwert = Mittelwert_alt + Istwert / Anzahl - Istwert_erster / Anzahl


    Mittelwert_alt = Mittelwert im letzten Zyklus
    Anzahl= Anzahl der zu mittelnden Werte
    Istwert_erster = erster Wert des Zeitraumes

    dafür spricht die einfachere Berechnung, dagegen ein evtl. auftretender Fehler... bzw. wie Wikipedia auch schreibt:

    Da es sich hierbei um eine rekursive Berechnung handelt, entspricht dies einem Filter mit unendlicher Impulsantwort. In der Praxis kann solch ein Filter nur mit Werten endlicher Genauigkeit implementiert werden, sodass durch Effekte wie Rundungsfehler oder Auslöschung das Filter instabil werden kann.
    aber ausprobieren würd ichs mal

    PS: der MEANTIME speichert intern nur 32 Werte:

    Der Baustein kann intern maximal 32 Vergangenheitswerte speichern. Bei einem längeren Zeitfenster wird eine Datenreduktion vorgenommen.
    also vermutlich nicht so das, was Du suchst.
    Geändert von ducati (03.12.2015 um 21:44 Uhr)

  8. #27
    Registriert seit
    01.09.2008
    Ort
    Berlin
    Beiträge
    172
    Danke
    51
    Erhielt 51 Danke für 44 Beiträge

    Standard

    Wie schon richtig gesagt wurde gilt:

    Zitat Zitat von Ralle Beitrag anzeigen
    PS: So viele Realzahlen aufzuaddieren, das macht, je nach Größe, ohnehin einen riesigen Fehler, weil zum Schluß eine große Zahl steht, die dann geteilt wird. Real kann ja nicht allzuviele Stellen (7?) darstellen.
    Daher: Wenn du bei der Summenbildung über Real-Werte bereits 7 Vorkommastellen erreicht hast, können die Nachkommastellen nicht mehr berücksichtigt werden. Sie fallen raus und führen zu Fehlern.

    Bei DINT sollte der korrekte Wert errechnet werden.

  9. #28
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    aber im PCS7 schreibt keiner auf die Instanz.
    Man soll nie "Nie" sagen...
    Du weißt nicht, welche anderen Programmierer sich noch in dem Firmennetzwerk tummeln und im Netzwerk 'rum-PUTen oder mit HMI 'rumspielen, bevor sie ihre S7-Kommunikation im Griff haben. Ich würde nicht wollen, daß meine Anlage von sowas bleibende Schäden davonträgt.

    Außerdem: Instanz! Ich würde den Puffer nicht in einem IDB unterbringen - da dürfte man ja nie mehr was am FB ändern bzw. den IDB in die SPS einspielen ohne die Aktualdaten und damit die letzten 6 Stunden zu verlieren. Wichtig: die Summe muß in dem selben DB liegen wie der Puffer, damit die wenigstens zusammen genullt werden, wenn der DB neu geladen wird.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #29
    Registriert seit
    09.08.2006
    Beiträge
    3.628
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen

    Hat wer eine Erklärung - aus der Entfernung?
    wie machst Du denn die Rundung vom REAL auf DINT ?

    Gruß

  11. #30
    borromeus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von ducati Beitrag anzeigen
    verwendest Du die APL? da gibt's doch nen Baustein MEANTIME ...

    ansonsten bietet Wikipedia ja auch gute Nachhilfe
    https://de.wikipedia.org/wiki/Gleitender_Mittelwert

    ohne diese ganzen Schleifen, Ringspeicher, sonstwas kommt folgende Formel aus:

    Mittelwert = Mittelwert_alt + Istwert / Anzahl - Istwert_alt / Anzahl


    _alt = Wert im letzten Zyklus
    Anzahl= Anzahl der zu mittelnden Werte

    dafür spricht natürlich die wirklich einfache Berechnung, dagegen ein evtl. auftretender Fehler... bzw. wie Wikipedia auch schreibt:



    aber ausprobieren würd ichs mal

    PS: der MEANTIME speichert intern nur 32 Werte:



    also vermutlich nicht so das, was Du suchst.
    Servus Ducati.
    Das Wiki nützt da nichts, weil ich einen 6h Mittelwert brauche (Behörde schreibt das vor).

Ähnliche Themen

  1. Rundungsfehler
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 14.10.2012, 17:17
  2. Rundungsfehler in SCL
    Von Bensen83 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 12.01.2011, 16:25
  3. Rundungsfehler bei Realzahlen
    Von GFI im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.01.2008, 16:56

Lesezeichen

Berechtigungen

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