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

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

Thema: WinCC 6.0 Mittelwertbildung

  1. #1
    Registriert seit
    09.08.2005
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bin leider nicht so sattelfest in WinCC. Ich habe folgende Aufgabenstellung: Ich soll aus einer (Archiv)variablen die sekündlich
    erfasst wird laufend einen Mittelwert über 1h bilden und nach Buttonbetätigung an die Steuerung schicken. Soll so eine Art ermittelter Offset sein. Wichtig ist, das nach dem FIFO Prinzip die Mittelwertbildung laufend erfolgt, wer kann mir helfen???

    Vielen Dank im voraus!
    Zitieren Zitieren WinCC 6.0 Mittelwertbildung  

  2. #2
    Registriert seit
    27.08.2004
    Ort
    Bei Bremen
    Beiträge
    648
    Danke
    11
    Erhielt 12 Danke für 10 Beiträge

    Standard

    Hallo,
    nur als Ansatz,

    Lege ein Verdichtungsarchiv an, im dem Du als Zeitraum eine Stunde wählst und als "Methode" wählt Du Mittelwert.

    Wie beim normalen Archiv auch, müßtest 'Du den Archierten Wert auch in einer Variablen schreiben können.
    Gruß
    Heinz

  3. #3
    HarbichC ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.08.2005
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Heinz,

    vielen Dank für Deinen Tip, aber ich habe mich wohl nicht richtig ausgedrückt:
    Es soll eine Mittelwertberechnung nicht zu jeder Stunde erfolgen, sondern
    jede Sekunde über einen Zeitraum von 1h, das geht mit einem Verdichtungsarchiv doch auch nicht, oder doch??
    Zitieren Zitieren WinCC 6.0 Mittelwertbildung  

  4. #4
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    ausser einem fifo fällt mir im moment auch nichts besseres ein.

    kannst du den mittelwert nicht in der steuerung berechnen?

    fifo mit 3600 einträgen.
    um nicht jedesmal den kompletten db zu lesen:

    wenn gefüllt einmal summe aller werte bilden und in einer variablen ablegen.
    jede sekunde den neuen zu dieser summe dazuaddieren und den ältesten davon abziehen.
    dann durch 3600 teilen.

    auf meiner hp findest du einen fifo mit dem man das machen könnte.


    eine andere möglichkeit wäre ein archiv zu beschreiben und über ein script alle werte des archivs zu addieren und dann durch 3600 zu teilen.
    aber bei einem takt von 1 sekunde wird das nicht besonders resourceschonend sein.
    sowas hab ich mal für ein mp270 geschrieben. dort bilde ich die mittelwerte aber auch nur ein mal beim bildaufruf.
    das mp projekt findest du auch auf meiner hp unter protool.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  5. #5
    Registriert seit
    27.08.2004
    Ort
    Bei Bremen
    Beiträge
    648
    Danke
    11
    Erhielt 12 Danke für 10 Beiträge

    Standard

    Hallo HarbichC,
    hätte ja klappen können das laufend habe ich überlesen

    Nun wird es etwas schwieriger,

    Ansatz:
    Über VB oder C die letzten archivierten Werte holen und den Mittelwert berechnen.

    Den SQL Server mit einem SQL String wie " Select AVG(...) as Mittelwert where DAtum > now-1 h"

    In der Hilfe wird dazu sicherlich etwas stehen.
    Gruß
    Heinz

  6. #6
    Anonymous Gast

    Standard

    Leute Vielen Dank erstmal,

    habe festgestellt, das es wohl doch nicht so einfach ist, werde es wohl mal mit der FiFO Geschichte in der Steuerung probieren, allerdings ist meine CPU schon ziemlich am Ende bezüglich Speicher.
    Erschwerend muss ich dies für 30 Archivvariablen machen!
    Naja, werde versuchen, ob dem Kunden nicht die Variante mit der stündlichen Mittelwertbildung reicht.

    Trotzdem Klasse, das einem als "Neuer" gleich so geholfen wird!!!

    Schönen Abend

    mfG
    HarbichC

  7. #7
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    hier noch eine andere idee.

    du addierst in wincc jede sekunde den neuen wert zur variablen summe.
    gleichzeitig zählst du einen index hoch.
    mittelwert = summe / index.
    das ganze machst du solange bis du deinen neuen wert aus dem verdichtungsarchiv bekommst.
    diesen mittelwert dann nach summe transf. und das gleiche spielchen mit dem index von vorne beginnen.
    mittelwert = summe / (index + 3600).

    das ganze klappt natürlich nur, wenn die summe am ende nicht zu gross (2 147 483 647) wird.

    edit:
    mittelwert kann man auch so bilden.
    (Altwert * (Index-1) + Neuwert) / Index
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  8. #8
    HarbichC ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.08.2005
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Volker,

    jetzt macht Du mich fertig, ich verstehe ab der Berechung Mittelwert Archiv--> Transfer in Summe garnichts mehr!!

    Habe versucht es mit Beipielrechungen nach zu vollziehen, klappt auch nicht.

    Wäre nett, wenn Du ab dem Punkt noch ein paar zusätzliche Erklärungen
    machen könntest.

    Vielen Dank dafür

    mfG
    HarbichC

  9. #9
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    ok.

    summe ist die summe aller werte.
    also:
    summe.varchiv = mittelwert.varchiv * archivlänge (3600)
    summe = summe.varchiv + summe.archiv
    da ja die summe.varchiv 3600 werte enthält muss dies auch im teiler berücksichtigt werden.

    --------------------------------------------------------------------
    aber so gehts besser, da du nicht so schnell in den überlauf kommst.

    mal ein beispiel für 4 werte im archiv.
    10,12,14,16
    archivlänge = 4

    summe.archiv = 52 => mw.archiv = 52/4 = 15,5

    so nun ist das archiv gefüllt und du bekommst vom verd.archiv den wert 15,5. diesen wert merken in mw.varchiv.
    verd.archiv löschen und neu anlegen. index auf 0 setzen

    mittelwert = (mw.varchiv * archivlänge + summe.archiv) / (archivlänge + index)

    zahlenbeispiel:
    mw = (15,5 * 4 + 0) / 4 = 15,5

    jetzt kommt ein neuer wert ins archiv. wert = 10, index = 1
    summe.archiv = wert(1)
    mw = (15,5 * 4 + 10) / (4 + 1) = 62 / 5 = 12,4

    jetzt kommt ein neuer wert ins archiv. wert = 11, index = 2
    summe.archiv = wert(1) + wert(2)
    mw = (15,5 * 4 + 21) / (4 + 2) = 73 / 6 = 12,1666

    usw.
    -----------------------------------------------------------
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  10. #10
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    was mir nocheinfällt.

    so ganz richtig ist ergebnis oben nicht, denn:
    du bekommst ja den mw aus dem varchiv. das ist der mw der letzten stunde. nun füllst du das archiv, was ja auch wieder 1 stunde dauert.
    im endefekt hast du also immer einen mw zwischen 1 und 2 stunden.

    aber ganz oben schreibst du, das der wert erst bei tastendruck übertragen werden soll.

    ich denke ich würde so vorgehen.
    die reihenfolge der daten ist in deinem fall ja egal. (neuste muss nicht oben und älteste unten sein, oder so)

    datenbank anlegen mit einem index von 1-3600.
    zähler, welcher dem index entspricht, hochzählen und den eintrag dort speichern. wenn 3600 ereicht wieder bei 1 anfangen.
    so hast du immer die letzte stunde in der db.
    wenn der wert übertragen werden soll, db auslesen, alle werte addieren und durch 3600 teilen.
    fertig!
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Mittelwertbildung aus integer
    Von daudel im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 14.11.2010, 14:56
  2. Mittelwertbildung
    Von pinolino im Forum Simatic
    Antworten: 45
    Letzter Beitrag: 26.01.2010, 20:06
  3. Gleitende Mittelwertbildung
    Von SPS_NEU im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 18.09.2009, 17:20
  4. Mittelwertbildung S5-95U
    Von demo im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.08.2007, 21:10
  5. Mittelwertbildung
    Von Servomaster im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.10.2005, 06:42

Lesezeichen

Berechtigungen

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