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

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

Thema: B&R Gas-Verbrauchsmessung mit Anzeige von m³/h (Gleitender Mittelwert)

  1. #1
    Registriert seit
    14.08.2014
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wunderschönen Guten Morgen!
    Ich bin neu hier und arbeite zu 99% mit dem Aprol-System von B&R.

    Ich habe eine Gasmessuhr, die 100Imp/m³ Gasdurchfluss ausgibt (die angehängte Maschine benötigt VIIIELLLL Gas).
    Nun möchte ich einen Baustein Programmieren, dem ich die Impulse eingebe, einen Reset-eingang und mehr nicht.
    Ausgeben möchte ich die daraus resultierenden Werte Verbrauch und Verbrauch pro Stunde. Der Verbrauch pro Stunde soll jede Sekunde nachgeführt werden.
    Also denke ich mal mit einem gleitenden Mittelwert.
    Wie messe ich die zeit zwischen 2 impulsen, sodass ich die (sagen wir mal 1,14 sek) jeweils auf die volle stunde hochrechnen kann?

    Ich bräuchte mal so einen denkanstoß

    Danke schonmal

    Micha
    Zitieren Zitieren B&R Gas-Verbrauchsmessung mit Anzeige von m³/h (Gleitender Mittelwert)  

  2. #2
    Registriert seit
    12.08.2014
    Ort
    Basel
    Beiträge
    208
    Danke
    23
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Da müsstest du wohl schon einen eigenen Baustein erstellen der als eine Art "Stoppuhr" agiert. Ich kenn jetzt da gerade keine andere möglichkeit. Ich weiss (inzwischen) dass man bei CoDeSys bei Strukturiertem Text eine Time-Funktion vom System aus hat. Damit kann man die Zeit auf 1ms gneau abfragen. Wenn es so eine Funktion bei dir auch gibt ist die Lösung relativ einfach.

    Bei einer steigenden Flanke am Impulseingang wird der Wert der Time-Funktion in eine Variable geschrieben. Beim zweiten Impuls wird die Zeit der Time-Funktion mit der Zeit der Variable verglichen (Zeit von Time - Zeit von Variable). Das Ergebnis wird abgespeichert. Danach wird die Zeit der Time-Funktion in die bereits verwendete Variable geschrieben, man macht sozusagen einen Reset. Und das wiederholt sich halt bei jeder positiven Flanke am Impuls-Eingang.

    Vielleicht kannst du damit was anfangen.

  3. #3
    APROLmicha ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2014
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja so eine Time-funktion habe ich auch. und genau an das habe ich eben noch gedacht.
    Dann würde ich um auf den Stundenwert zu kommen einfach so vorgehen:

    t := tnew - told; /*Zeit neu - Zeit alt*/
    f := 3600 / t; /*Wieviele Impulse würden in eine Stunde passen?*/
    VperHour := f * VperImp; /*Volumen pro Stunde ausrechnen*/

    Aber wo muss ich mit der mittelwertberechnung hin? oder brauche ich die nicht mehr da ich ja ein vorggebenes Volumen pro Impuls habe?

  4. #4
    Registriert seit
    12.08.2014
    Ort
    Basel
    Beiträge
    208
    Danke
    23
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Die Mittelwertberechnung wäre trotzdem noch nötig da du ja von deinem einen Wert hochrechnest. Kleine Änderungen in deinem Aktualwert wirken sich durch das hochrechnen viel stärker auf deinen Stundenwert aus. Deshalb würde ich dir empfehlen die Durchschnittsberechnung trotdem zu machen, nur damit du einen stabileren Wert erhälst.

    Ich werd mir jetzt wahrscheinlich noch n bisschen den Kopf darüber zerbrechen wie man diese Mittelwertberechnung denn am einfachsten macht...


    EDIT:
    Ok, hab ne Idee. Du definierst 10 Variablen. Diese 10 Variablen werden immer nacheinander zugewiesen. Und zwar hast du einen Counter der bei jeder Erfassung eines Aktualwertes um 1 hochzählt bis er 10 erreicht hat. Dann wird er wieder auf 0 gesetzt, wodurch er beim nächsten erhöhen des Counters ja wieder bei 1 anfängt. Dann nutzt du "CASE" um bei dem jeweiligen Zählerstand den Wert der richtigen Variable zuzuordnen. Nun rechnest du von all diesen Variablen den Durchschnitt aus, wobei ich dir empfehlen würde beim ersten Start der Anlage die Variablen auf den zu erwarteten Wert zu setzen. Nun hast du einen schön stabilen Wert. der sich wahrscheinlich nur im wenig ändern wird, je nach dem wie gut eure Durchflussregelung für die Gaszufuhr ist.
    Geändert von JanB1 (14.08.2014 um 11:54 Uhr)

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    für deine Messung gibt es 2 Varianten :
    1. du misst die Zeit zwischen 2 Impulsen - das kann aber bei sehr kleinen Zeitwerten und einer hohen SPS-Zykluszeit schnell zu unliebsamen Verfälschungen führen.
    2. du misst eine feste Zeit (z.B. 1 Sek.) und zählst die Impulse in der Zeit - das kann aber bei sehr kleinen Impulszahlen schnell zu unliebsamen Verfälschungen führen.

    Den Mittelwert kannst du dir auch so bilden :
    Code:
    oldWert := (10 * oldWert + Neuwert) / 11 ;
    - die Ringspeicher-Variante von Jan geht natürlich auch - ist nur etwas aufwändiger.

    Den Zähler würde ich bei hohen Impulszahlen (Verwendung einer Zählerkarte) nicht nach jeder Messung wieder löschen sondern lieber die Differenz LastCnt-aktCnt bilden.

    Gruß
    Larry

  6. #6
    Registriert seit
    12.08.2014
    Ort
    Basel
    Beiträge
    208
    Danke
    23
    Erhielt 20 Danke für 19 Beiträge

    Standard

    *FACEPALM*

    Larry, deine Lösung ist super. Warum bin ich nicht drauf gekommen. Ich bin eh meistens der der alles komplizierter macht als es eigentlich ist. xD

  7. #7
    APROLmicha ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2014
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So ich habe mal was Programmiert.
    Nur habe ich immo das Problem, das ich den Zeitwert noch nicht so berechnen kann wie ich will... Mit TIME oder DT will der noch net so recht...
    ST-Block.PNG

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    leider kann ich dir gerade nicht so ganz folgen - liegt vielleicht aber auch daran, dass an deinem Codeschnipsel noch ein bißchen was fehlt.
    Welche Variable ist was ? DateAndTime (also DT) und Time kann man nicht direkt verrechnen - du mußt dir aus der DT erstmal die TimeOfDay-(TOD)Komponente extrahieren. Wo passiert das wie ?

    Gruß
    Larry

  9. #9
    Registriert seit
    16.11.2007
    Beiträge
    179
    Danke
    11
    Erhielt 53 Danke für 39 Beiträge

    Standard

    Schau mal in der oscat.lib den Baustein FLOW_METER an, der macht sowas.
    Ist zwar für CoDeSys in ST geschrieben, aber eventuell kannst du das einfach
    für B & R portieren.

    An

  10. #10
    APROLmicha ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2014
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Danke erstmal für die anregungen!
    Ich habe es jetzt ein bisschen so probiert, aber es funktioniert nicht so wie ich will.

    code.PNG

    Ich kann aber auch nicht online gucken warum es nicht läuft. Dies unterstützt B&R im Aprol-System leider nicht in ST.
    Ich hoffe mal einfach das ich nicht nur zu dösig bin...

    Micha

Ähnliche Themen

  1. Step 7 Verbrauchsmessung mit 1Count
    Von nekron im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.04.2014, 15:49
  2. Antworten: 1
    Letzter Beitrag: 19.04.2013, 14:54
  3. Mittelwert von zehn Temperaturen bilden
    Von husox81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.11.2010, 15:03
  4. Antworten: 5
    Letzter Beitrag: 10.05.2009, 13:00
  5. Mittelwert bilden (von zb 5 SPS-Zyklen)
    Von Matthias O. im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.01.2007, 14:21

Lesezeichen

Berechtigungen

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