Durchflussmengenzähler für Wasseraufbereitungsanlage

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen ähnlichen Fall wo mir kein Impuls zur Verfügung steht.
Kann ich das so machen?

Aufruf im OB35 alle 100ms

Code:
L #Skalierter Analogwert in REAL
L  3.600000e+004
/R    
L  #Zählwert_REAL
+R    
T #Zählwert_REAL
L  1.000000e+000
<R    
SPB   out1
L #Zählwert_REAL
L 1.000000e+000
-R    
T #Zählwert_REAL
L #Zähler_DINT
L 1
+D    
T #Zähler_DINT
out1: NOP   0

Gruß Klaus
 
Zuletzt bearbeitet:
Hallo,

hier ein Beispiel. Habe auf schnelle gemacht und kurz getestet, dennoch sind Fehler nicht auszuschließen.

Code:
FUNCTION "AnalWertSummZaehll" : VOID
TITLE =Summenzähler eines analoges Wertes.
//Zum Beispiel es sollte eine Gesamtvolumen eines durchgeflossenes Medium mit
//einem Wert von Duchflüssmesser berechnet werden. Der Wert wird aus einer
//analogen Karte gelesen. Wegen Umrechnungsfehler wird er zu erst in DI
//gezählt. Zeit wird nicht berücksichtigt, weil die Abfrage immer periodisch in
// abgefragt wird. Es wird ein Kaskaden-Zähler verwendet um die
//Rundungsfehler wehniger zu machen.
//Zur Info: wenn der Analogwer voller Aufschlag hat (mit Übersteuerungsbereich)=
//32511, die abfrage alle 100ms,wird der erste Summenzähler erst in 1 Woche voll.
//der Zweite Summenzähler erst in (2^32 Wochen) 41072091 Jahren
AUTHOR : Bart
VERSION : 0.1

VAR_INPUT
eZaehlReset : BOOL ; //Zählerstand auf null reseten
eUmrechnFakt : REAL ; //Umrechnungfaktor. Darf nicht 0 sein
eAnalWert : INT ; //Analogerwert direkt aus PEW
END_VAR
VAR_OUTPUT
Zaehlerstand : REAL ; //AktuellerZählerstand
END_VAR
VAR_IN_OUT
sSummenzhler1 : DINT ; //Erster Summenzähler
sSummenzhler2 : DINT ; //Zweiter Summenzähler
END_VAR
BEGIN
NETWORK
TITLE =Wert übernehmen
//Diesen Netzwerk alein in OB35 benutzen ist besser
L #eAnalWert;
ITD ;
L #sSummenzhler1;
+D ;
T #sSummenzhler1;
L L#2147451000;
>D ;
SPBN UBR1;
-D ;
T #sSummenzhler1;
L L#1;
L #sSummenzhler2;
+D ;
T #sSummenzhler2;
UBR1: NOP 0;
NETWORK
TITLE =Wert ausgeben
//Wert wird berechnet
L #sSummenzhler2;
DTR ;
L 2.147451e+009;
*R ;
L #sSummenzhler1;
DTR ;
+R ;
L #eUmrechnFakt;
/R ;
T #Zaehlerstand;
NETWORK
TITLE =Zähler reset
//Zaehlerstand auf 0 setzen
//
U #eZaehlReset;
SPBN Res1;
L L#0;
T #sSummenzhler1;
T #sSummenzhler2;
Res1: NOP 0;
END_FUNCTION

Guten Rutsch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Numerische Rechenfehler sollten immer beachtet werden. Diese Betrachtung nützt aber wenig, wenn der analoge Volumenstrommesswert viel ungenauer ist. Hierzu gibt es bislang keine Angabe. Wenn der Volumenstromwert bspw. nur +-10% Genauigkeit hat (der %-Wert bezieht sich dabei i.d.R. auf den Messbereichsendwert und ist demnach bei kleinen Volumenströmen schnell recht groß), dann summiert sich dieser Fehler mit jedem Iterationsschritt auf, sodass die Gesamtmenge (Volumen) schnell sehr ungenau wird!
 
Zuletzt bearbeitet:
..dann Summiert sich dieser Fehler mit jedem Interationsschritt auf, sodass die Gesamtmenge (Volumen) schnell sehr ungenau wird!
Genau. Daher sollte die Interationszeit so groß wie möglich gewählt werden. Wie groß diese Zeit sein kann, hängt davon ab wie konstant der Volumenstrom ist und wie lange er ansteht. 100ms ist etwas sehr klein. Zudem sollte man unbedingt eine Schleichmengenunterdrückung vorsehen, also erst zählen, wenn der Meßwert eine realistische Größe erreicht hat.

..Kann ich das so machen?..
Prinzipiell ja. So ähnlich habe ich es auch schon einmal (widerwillen) gemacht.


Guten Rutsch!
 
Der OB35 ist auf 100ms voreingestellt und wird so benötigt.
Das kann ich noch anpassen.
Den Reset und die Schleichmengenunterdrückung habe ich. Das ist nur der Summierteil.
Mir passt das auch nicht, aber der Geber hat kein Impuls.

Gruß
Klaus
 
Hallo, ich muss das Thema "Durchflussmesser" noch einmal aufleben lassen ;)
Habe folgendes Problem, von meinem Durchflusssensor bekomme ich 92 Impulse/Liter. Benötige nun einen Baustein der mir die aktuellen L/min ausgibt. Ich weiß das ich die Zeit zwischen den Impulsen messen muss, aber irgendwie komme ich auf keinen Lösungsansatz :( Hat jemand so einen Baustein eventuell schon erstellt? In dem man einfach als Eingangsvariable den pulsierenden Eingang und einen Normierungswert (Umrechnungsfaktor um auf die physikalische Größe pro Zeiteinheit zu kommen) einlesen kann, dass ich als Ausgangsvariable Liter/min, Umdrehungen/sec, usw. auslesen kann.

Vieeelen Dank euch :)
 
Insteressant wäre erstmal zu wissen wie viel Liter da maximal fließen!
Wenn du z.B. max 100m³/h hättest entspräche das ja 100.000l / h => 27l / sec => 2555 Impulse / sekunde!
Selbst wenn nur 10m³/h wären lägst du ja immernoch bei 255 Impulse und damit wärs ja schon verdammt schwer alle Impulse definitiv mitzubekommen! (Es sei denn du hättest eine Zykluszeit von ca 1ms ^^")

Am einfachsten wäre es da, glaube ich, 200-300€ zu investieren und dir einen Impulsumformer zu besorgen der aus den Impulsen ein 0/4-20mA Signal macht!

Also klär erstmal über welchen maximalen Durchfluss wir reden.
Gegebenfalls könnte man auch über Countermodule nachdenken welche dann aber halt wieder ein paar Hundert € mehr kosten!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich muss das Thema "Durchflussmesser" noch einmal aufleben lassen ;)
Habe folgendes Problem, von meinem Durchflusssensor bekomme ich 92 Impulse/Liter. Benötige nun einen Baustein der mir die aktuellen L/min ausgibt. Ich weiß das ich die Zeit zwischen den Impulsen messen muss, aber irgendwie komme ich auf keinen Lösungsansatz :( Hat jemand so einen Baustein eventuell schon erstellt? In dem man einfach als Eingangsvariable den pulsierenden Eingang und einen Normierungswert (Umrechnungsfaktor um auf die physikalische Größe pro Zeiteinheit zu kommen) einlesen kann, dass ich als Ausgangsvariable Liter/min, Umdrehungen/sec, usw. auslesen kann.

Vieeelen Dank euch :)

Das ist lösbar.
Wie genau muss die Auswertung sein?
Wieviel Wasser fliesst pro Zeiteinheit?
Welches Aktualisierungsraster wird benötigt?

bike
 
Hallo,
du packst den Impulsgeber auf eine Zählerkarte, parametrierst die für Frequenzmessung und versiehst die ausgegebene Frequenz mit einem Faktor und schon hast du was du brauchst ...

Gruß
Larry
 
Ich nehme jetzt 10 Sekunden und zähle die Impulse und aktualisier meinen aktuellen Durchfluss dann immer nach 10s. Klappt super und ist sehr genau. Meine letzte Frage ist jetzt noch, der Durchflussmesser gibt mir 10 Impulse/Liter maximal 80Liter/Minute sind möglich. D.h. maximal 13Impulse/Sekunde, sollte kein Problem sein bei einer Zykluszeit von 10ms. Allerdings hat mir der Hersteller mitgeteilt, dass die Impulslänge 10ms konstand ist. Kann das Die SPS (CPU 315-DP 6ES7315-2AH14-0AB0) sicher verarbeiten?
 
Zuletzt bearbeitet:
Das hat erstmal nichts mit der CPU zu tun sondern nur mit deiner Zykluszeit.
Einen 10ms-Impuls bei ca. 10ms Zykluszeit sehe ich als problematisch (gelinde gesagt) an.
Du könntest hier aber in den OB35 ausweichen, den du mit einem Intervall von 5ms aufrufst. Du mußt dort dann nur das PEB auf das verwendete EB aktualisieren und kannst dann damit arbeiten.
 
Vielen Dank für die Antwort.
Da ich leider keine C-CPU verwende und nur 32DI Eingangskarten (1BL00) im Rack habe kann für mich ja leider kein Prozessalarm zum Einsatz kommen...
Bei maximal 13,333333Impulsen/Sekunde bekomme ich ja alle 75ms einen Impuls. Ich glaube somit wäre es am einfachsten ich frage beim Hersteller nach, ob es möglich ist die Impulslänge auf 30ms zu erhöhen. Dann habe ich eine Periodenlänge von 60ms. Wäre das dann unbedenklich um sicher zu zählen?
 
Zurück
Oben