Impulse auswerten für Durchfluss-Berechnung

DrumJoeyDrum

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe an einer Wasseruhr einen Impulszähler, welcher mir 1 Impuls pro 100 Liter gibt.

Jetzt bin ich in meiner S7-300 hergegangen
und Zähle einfach mit, wie viele Impulse ich in 60 Sekunden (sprich pro Minute) erhalte.
Die erhaltenen Impulse/Minute multipliziere ich mit 100
und erhalte dann einen Durchfluss in Liter/Minute, welcher sich alle 60 Sekunden aktualisiert.

Das Problem ist jedoch jetzt das mein Durchfluss nur in 100er Sprüngen sich bewegt... das ist sehr ungenau.

Eine andere Wasseruhr, welche mir mehr Impulse ausgibt will ich eig. nicht verbauen.

Gibt es eine Möglichkeit in der SPS diese Bit-Eingabe von 1 Impuls pro 100 Liter schöner aufzuschlüsseln?


Danke im Voraus
 
Moin DrumJoeyDrum,

aber 100 Liter ist doch Dein LSB (1Bit == 100 Liter). Das kannst Du nicht feiner aufschlüsseln.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. Zähle einfach mit, wie viele Impulse ich in 60 Sekunden (sprich pro Minute) erhalte..
.. Gibt es eine Möglichkeit in der SPS diese Bit-Eingabe von 1 Impuls pro 100 Liter schöner aufzuschlüsseln? ..

Messe die Zeit zwischen den Impulsen und rechne diese auf l/min um. Zusätzlich könnte man das Ergebnis noch dämpfen.
 
Zeige den Zählerstand nicht in Liter sondern in Kubikmeter (oder Hektoliter) an: "123.4 m³" (oder "1234 hl") sieht "schöner" aus als "123400 l" ;)

Harald


das bringt mir aber nur eine schöner Zahl...
habe ja dann immer noch Sprünge im bereich 1m3 (was 1000 Liter sind) :(


Messe die Zeit zwischen den Impulsen und rechne diese auf l/min um. Zusätzlich könnte man das Ergebnis noch dämpfen.

kannst du mir das mal in ein AWL bzw. FUP-Programm packen? :)
 
das bringt mir aber nur eine schöner Zahl...
habe ja dann immer noch Sprünge im bereich 1m3 (was 1000 Liter sind) :(
Du schriebst, daß Du alle 100 Liter einen Impuls bekommst - also wird die m³-Anzeige "Sprünge" von 0.1 m³ machen, z.B. von 123.4 zu 123.5 m³. (Es sei denn, Du programmierst den Zähler ganz dämlich ;))
Du kannst "intern" die Impulse in einen Ganzzahl-DINT-Hektoliter-Zähler zählen und für die Anzeige in m³ den Wert in REAL wandeln und durch 10.0 teilen. (Oder in der Anzeige des DINT-Wertes einfach eine Stelle von hinten ein Dezimalkomma/-punkt einfügen)

PS: wie groß ist denn der Zeitabstand der 100l-Impulse? Wie groß ist die Durchflußgeschwindigkeit minimal und maximal?

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du schriebst, daß Du alle 100 Liter einen Impuls bekommst - also wird die m³-Anzeige "Sprünge" von 0.1 m³ machen, z.B. von 123.4 zu 123.5 m³.

Richtig. Schreibfehler von mir. Aber es bleibt sich dennoch egal ob mein Zähler (meine Anzeige) in 100 Liter oder in 0,1m3 Sprüngen arbeitet - die Wassermenge ist die selbe ;)


wie groß ist denn der Zeitabstand der 100l-Impulse? Wie groß ist die Durchflußgeschwindigkeit minimal und maximal?

Im Bereich von 300-500l/min - sprich 3-5 Impulse pro Minute
 
wie groß ist denn der Zeitabstand der 100l-Impulse? Wie groß ist die Durchflußgeschwindigkeit minimal und maximal?
Im Bereich von 300-500l/min - sprich 3-5 Impulse pro Minute
Bei so wenig Impulsen pro Minute ist es für die Auflösung des Messwertes in der Tat günstiger, den Zeitabstand zwischen den Impulsen zu messen (also die Periodendauer), so wie Onkel Dagobert schon empfohlen hat. Und wenn z.B. 1 Minute lang kein Impuls kam, dann setze den Anzeigwert auf 0 l/min. Netter Nebeneffekt: Du bekommst schon früher als nach 1 Minute einen neuen Meßwert. Falls Dir der Meßwert noch zu doll "springt", dann kannst Du den Wert noch glätten, z.B. den Meßwert alle 15 Sekunden abtasten und den Mittelwert der letzten 4 Abtastungen bilden.

Für die Zeitmessung könntest Du günstig den SFB4 TON verwenden, den Du mit dem Impuls startest (TON mit IN = TRUE und PT = T#1S aufrufen). Wenn der nächste Impuls kommt, speicherst Du die abgelaufene Zeit ET für die Durchflußberechnung und startest den TON neu (1x mit IN = FALSE aufrufen und gleich danach nochmal mit IN = TRUE). Wenn der TON (1s) abläuft (Q = TRUE), dann den Meßwert auf 0 setzen.

Die Zeitmessung in Millisekunden kann man auch mit SFC64 TIME_TCK machen, oder #OB1_PREV_CYCLE aufsummieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei so wenig Impulsen pro Minute ist es für die Auflösung des Messwertes in der Tat günstiger, den Zeitabstand zwischen den Impulsen zu messen (also die Periodendauer), so wie Onkel Dagobert schon empfohlen hat. Und wenn z.B. 1 Minute lang kein Impuls kam, dann setze den Anzeigwert auf 0 l/min. Netter Nebeneffekt: Du bekommst schon früher als nach 1 Minute einen neuen Meßwert. Falls Dir der Meßwert noch zu doll "springt", dann kannst Du den Wert noch glätten, z.B. den Meßwert alle 15 Sekunden abtasten und den Mittelwert der letzten 4 Abtastungen bilden.

Für die Zeitmessung könntest Du günstig den SFB4 TON verwenden, den Du mit dem Impuls startest (TON mit IN = TRUE und PT = T#1S aufrufen). Wenn der nächste Impuls kommt, speicherst Du die abgelaufene Zeit ET für die Durchflußberechnung und startest den TON neu (1x mit IN = FALSE aufrufen und gleich danach nochmal mit IN = TRUE). Wenn der TON (1s) abläuft (Q = TRUE), dann den Meßwert auf 0 setzen.

Die Zeitmessung in Millisekunden kann man auch mit SFC64 TIME_TCK machen, oder #OB1_PREV_CYCLE aufsummieren.

Harald


Danke für die Erklärung, das habe ich hinbekommen :)

Ich weis nun wie viel Zeit zwischen zwei Impulsen vergeht.
Was mach ich nun mit der Zeit? :D :D :D
 
Der kehrwert der Zeit ist proportional zum Durchfluss.

1 Impuls per Sekunde sind dann 100L/s
1 Impuls alle 2s --> 1/2 Imp/s *100l/imp = 50 l/s

1 Impuls pro Minute --> 1/60 Imp/s * 100 l/imp = 1,66 l/s

Einfacher Dreisatz
 
Guten Tag Forum,

kann sich mir jemand erbarmen und mir bei meinem Code helfen.
Ich wollte die Zeit im MD145 (Format: Time) in eine Real Zahl umrechnen um eine Durchflussrate zu bestimmen.
Mit der Formel: [(1/0,111s)*60] *0,5 = 270 L/min
Ich habe mir euren Beitrag durchgelesen aber mir sind hierbei zwei Ungereimtheiten in meiner Anwendung aufgefallen.
1. Meine Durchflussrate passt nicht was ich auf meinen Umrechnungsfehler mit "DTR" vermute.
2. Das ist bei <10Hz schon ziemlich stark am springen mit dem TON im OB1 habt ihr das im OB40 programmiert?

U E 0.6
U "High_Merker"
= M 144.2
SPBNB _030
T MD 145
DTR
T #TimePulse_REAL
L 1.000000e+000
/R
T #TimePulse_REAL
L 6.000000e+001
*R
T #TimePulse_REAL
L 5.000000e-001
*R
T #TimePulse_REAL




_030: T #TimePulse_REAL


Also ich suche die AWL Funktion hiervon:
Da ich die FUP-Convert Bbausteine nicht finde.

Sorry wenn das an eine andere Stelle gehört.
 
Zuletzt bearbeitet:
Ein TIME ist im Prinzip ein DINT in Millisekunden. Also musst du den Wert nach dem wandeln in einen REAL mit 1000.0 Dividieren um auf Sekunden zu kommen.
Außerdem Rechnet dein AWL Code: [(0,111s/1)*60] *0,5 = 270 L/min
und nicht: [(1/0,111s)*60] *0,5 = 270 L/min
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein TIME ist im Prinzip ein DINT in Millisekunden. Also musst du den Wert nach dem wandeln in einen REAL mit 1000.0 Dividieren um auf Sekunden zu kommen.
Außerdem Rechnet dein AWL Code: [(0,111s/1)*60] *0,5 = 270 L/min
und nicht: [(1/0,111s)*60] *0,5 = 270 L/min
Ich habe mir den Code jetzt nicht angesehen, aber, wenn als Ergebnis 270 rauskommt, wird die untere Gleichung gerechnet.
Bei der oberen kommt 3,33 raus…
 
Ich habe es so verstanden, dass er eben nicht 270 raus bekommt (weil der Code falsch ist). Habs nicht nachgerechnet, nur Code mit der Formel verglichen.
 
Also ich finde der Code ist ziemlich merkwürdig ihr nicht?
Wieso "T MD 145"? Sollte das nicht "L MD 145" sein?
Wozu dieses ständige "T #TimePulse_REAL"?
Gibt es noch Code vor und nach dem hier gezeigten?
 
Zurück
Oben