Ermittlung der Füllstandsmenge.

Bamby

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute...
habe folgendes Problem. es soll ein Behälter (Max und Min Füllstand sind bekannt)befüllt werden und später je nach Rezept entleert werden.Das Abfüllen läuft über ein Ventil. wie kann ich den Füllstand exakt zu einer bestimmten Zeit exakt ermitteln?
Ich habe mir gedacht ein Zeitglied, das z.B für jede Sekunde eine gewisse Menge zufliesst, die mit dem Max_Füllstand verglichen werden usw.. Ist sowas realisierbar?wie kann man es überhaupt am einfachsten machen?Welche Sprache eignet sich am bestens?(FUP oder AWL?)
für jede Hilfe bin ich dankbar.
 
Hallo Leute...
habe folgendes Problem. es soll ein Behälter (Max und Min Füllstand sind bekannt)befüllt werden und später je nach Rezept entleert werden.Das Abfüllen läuft über ein Ventil. wie kann ich den Füllstand exakt zu einer bestimmten Zeit exakt ermitteln?
Ich habe mir gedacht ein Zeitglied, das z.B für jede Sekunde eine gewisse Menge zufliesst, die mit dem Max_Füllstand verglichen werden usw.. Ist sowas realisierbar?wie kann man es überhaupt am einfachsten machen?Welche Sprache eignet sich am bestens?(FUP oder AWL?)
für jede Hilfe bin ich dankbar.

Kennst du den den genauen durchluss pro Minute?
Mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wenn es nicht so genau her geht würde ich schauen was dein Ventil für eine Durchlaufmenge pro Sekunde hat. Dann ein Vor- / Rückwärtszähler mit einem Taktmerker von einer Sekunde Beschalten und bei Zulauf hoch zählen und bei Ablauf runter. Das Ergebniss dann mal deinem Durchlauf pro sekunde und du hast deinen Füllstand. Das ganze dann noch bei Füllstand Min Rücksetzen. Ist aber nicht die genaueste Lösung und funktionier nur bei Ablauf gleich Zulauf.
Bei dieser Lösung ist egal ob FUP oder AWL.

Hoff es hat dir geholfen ist mein erster Antwort Post
:D

MFG
 
Wenn es um eine tatsächlich vorhandene Anlage geht .... vergiss es !! Bei häufigerem Füllen und entleeren wird dir der Füllstand entweder nach oben oder nach unten wegdriften. Dazu ist das viiiel zu ungenau. Das bedeutet irgendwann läuft der Tank über obwohl dein theoretischer max noch nicht erreicht ist ODER du entnimmst und der Tank wird leer obwohl nochwas drin sein müsste.
Denk doch mal nach, wenn der Tank fast voll ist und du öffnest unten ein Entnahmeventil ist der Druck durch die hohe Wassersäule und damit dein Durchfluss je sekunde sehr viel höher als bei einem fast leeren Tank.
Das kann man nicht in den Griff bekommen !
Das allermindeste was du brauchst wäre ein Impulsgeber der dir zB einen Impuls je Liter gibt.

Ich habe sowas schon öfter gemacht und selbst mit dem Impulsgeber sollte man einen min und max Sensor haben damit sich das Ganze von Zeit zu Zeit automatisch kalibrieren kann.

peter(R)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
>Danke für die Antwort. An einer solchen Lösung habe ich gedacht. Aber ich kann es noch nicht klären, ob diese Schritte in der selben FC implementiert werden oder nicht. Ich muss klar aufgeben, dass ich Neuling mit Simatic bin. Theoretisch brauche ich diese Werte bestimmt später.Muss ich unbedinf hier z.B. einen FB erstellen? und wie lasse ich die ermittelte Menge (bestimmt INT-Wert) anzeigen im PLCSIM?
ich danke dir
 
Hallo Peter(R)
vielen dank für die antwort! Ich wollte schnell ausprobieren, was dein Vorgänger vorgeschlagen hast aber du warst noch schneller als ich.
Wenn es um eine tatsächlich vorhandene Anlage geht .... vergiss es !! Bei häufigerem Füllen und entleeren wird dir der Füllstand entweder nach oben oder nach unten wegdriften
.
Bei meiner Aufgabe handelt es sich um reine Simulation. Und es wird so ausgemacht, dass der Entleerventil nur geöffnet wird, wenn der Zuflussventil komplett zu ist.

Das allermindeste was du brauchst wäre ein Impulsgeber der dir zB einen Impuls je Liter gibt.

Ich habe sowas schon öfter gemacht und selbst mit dem Impulsgeber sollte man einen min und max Sensor haben damit sich das Ganze von Zeit zu Zeit automatisch kalibrieren kann.

peter(R)
und wie programmierst du das eigentlich?
danke für deine Tips
 
Was meinst Du damit ?? Wie ich das automatische kalibrieren programmieren würde ?? oder ob FUP oder AWL oder beides ??

peter(R)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo!
Was meinst Du damit ?? Wie ich das automatische kalibrieren programmieren würde ?? oder ob FUP oder AWL oder beides ??

peter(R)
genau... wie kann man das ganze programmieren und vor allem die Menge ermitteln?Welche Sprache eignet sich am besten?AWL oder FUP?. hier wird angenommen, dass die Durchflussmenge konstant bleibt!
Thanks
 
hallo!

genau... wie kann man das ganze programmieren und vor allem die Menge ermitteln?Welche Sprache eignet sich am besten?AWL oder FUP?. hier wird angenommen, dass die Durchflussmenge konstant bleibt!
Thanks

Das meiste Kannst e mit Kop bzw. Fup machen wenns größere Berechnungen werden eigent sich dann AWL ganz gut weil du nicht immer die zwischen Ergebnisse wo rein schreiben musst!Kannst ja machen wie du willst z.B.: NW1:Awl,NW2:Fup oder Kop usw.....
Wie du dir am leichtesten tust damit und wie es technisch geht!
Mfg
 
Also programmieren würde ich das nur in AWL. Wenn du einen min und einen max. Sensor hättest, dann müstest Du einmal von Hand berechnen wieviel Flüssigkeit bei dem jeweiligen Füllstand im Tank ist ( beim zylindrischen oder rechteckigen Tank kein Problem.
zB. Leersensor = 100 l und Vollsensor = 1000 l.

u Maxsensor
FP M100.0
= M100.1 Zykluswisch wenn voll errecht

un M100.1
spb n1
l 1000 liter bei voll
t db1.dbw 0 Füllstandswort
n1: nop 0


un Minsensor
FP M100.2
= M100.3 Zykluswisch wenn leerl errecht

un M100.3
spb n2
l 100 liter bei leer
t db1.dbw 0 Füllstandswort
n2: nop 0

somit wird immer wenn voll erreicht wird der Füllstand auf 1000 gesetzt und wenn leer verlassen wird der Füllstand auf 100 gesetzt

peter(R)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es sich wirklich nur um eine Simulation und um die Theroretische Funktionsweiße der Steuerung handelt ist Peter (R)'s ansatz ja schon mal was!
Und dann kannst ja einfach beim füllen deinen Litermenge pro Minute hinzu addieren und beim entleeren weg subtrahieren!

Könntest dir auch einen Funktionsbaustein schreiben der alles Managt!
Dann könntest du solange das Ventil für füllen offen ist die CPU Zykluszeit in [ms] mit deinem Faktor dividieren und dann zum Füllstand addieren umgekehrt beim entleeren!

Mfg
 
Befüllen:

Code:
un entleeren
u Befüllen
u m101.0
l s5t#1.5 s
se t 1
u t1
= m101.0       //Zykluswisch alle 1.5 sekunden wenn befüllt wird

un m101.0
spb n4
l 1           // wenn zB. alle 1,5 sec ein liter befüllt wird
l db1.dbw0     // Füllstand
+i
t db1.dbw0
n4: nop 0

entleeren genau umgekehrt mit -i

Gültig wenn alle 1,5 sec ein liter befüllt bzw. entleert wird. Evt. die Zeit (1,5 sec ) ändern um schnelleres oder langsameres befüllen zu simulieren.

peter(R)
 
Befüllen:

Code:
un entleeren
u Befüllen
[COLOR=#ff0000]u m101.0 > un m101.0
[/COLOR]l s5t#1.5 s
se t 1
u t1
= m101.0       //Zykluswisch alle 1.5 sekunden wenn befüllt wird

un m101.0
spb n4
l 1           // wenn zB. alle 1,5 sec ein liter befüllt wird
l db1.dbw0     // Füllstand
+i
t db1.dbw0
n4: nop 0
kleiner schreibfehler ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier eine andere Variante
Code:
//Preset Füllstand voll
U     E      0.0
      FP    #flanke[1]
      SPBNB _001
      L     1.000000e+003 //Füllstand auf 1000l setzen
      T     #FUELLSTAND_L
_001: NOP   0

//Preset Füllstand leer
  U     E      0.1
      FN    #flanke[2]
      SPBNB _002
      L     1.000000e+002 //Füllstand auf 100l setzen
      T     #FUELLSTAND_L
_002: NOP   0
//angenommen:1l pro sekunde =0,001l pro ms
//Ventil befüllen offen
   CLR   
      U     M    100.0                  //Befüllen
      SPBN  m001
      L     #OB1_CYCLE
      ITD   
      DTR   
      L     1.000000e-003               //Umrechnung auf Liter
      *R    
      L     #FUELLSTAND_L
      +R    
      T     #FUELLSTAND_L
m001: NOP   0
//angenommen:2,5l pro sekunde =0,0025l pro ms
//Ventil entleeren offen
      CLR   
      U     M    100.1                  //entleeren
      SPBN  m002
      L     #OB1_CYCLE
      ITD   
      DTR   
      L       2.500000e-003             //Umrechnung auf Liter
      *R    
      L     #FUELLSTAND_L
      -R    
      T     #FUELLSTAND_L
m002: NOP   0
Es sollte dann natürlich abhängig vom Füllstand entleert bzw. befüllt werden das ist jetzt nicht berücksichtigt!Soll heißen wenn Füllstand kleiner min oder Endschalter min nicht mehr belegt wird das Ventil für entleeren geschlossen.Beim füllen ist es wenn endschalter max belegt ist bzw. der füllstand größer max ist!
Mfg
 
Befüllen:

Code:
un entleeren
u Befüllen
u m101.0
l s5t#1.5 s
se t 1
u t1
= m101.0       //Zykluswisch alle 1.5 sekunden wenn befüllt wird

un m101.0
spb n4
l 1           // wenn zB. alle 1,5 sec ein liter befüllt wird
l db1.dbw0     // Füllstand
+i
t db1.dbw0
n4: nop 0

entleeren genau umgekehrt mit -i

Gültig wenn alle 1,5 sec ein liter befüllt bzw. entleert wird. Evt. die Zeit (1,5 sec ) ändern um schnelleres oder langsameres befüllen zu simulieren.

peter(R)

Deine Version passt auch nur schleicht sich hier mit der zeit ein fehler ein und zwar wenn nach 300ms das befüllen aufhört kommt kein Impuls wird dann wieder nur 300ms befüllt wird kommt wieder kein Impuls wird dann wieder nur 300ms befüllt kommt kein impuls!Jetzt haben wir eigentlich schon 1L befüllt aber keinen Impuls zum Hochzählen bekommen.Da müsste man den Takt schon auf 100ms oder so setzen!Kommt natürlich auch auf die Theroretische Becken größe an!
Mfg
 
Zuletzt bearbeitet:
???

Ich gehe in diesem Beispiel davon aus, dass es 1,5 sekunden dauert um einen Liter zu befüllen.
Also mache ich alle 1,5 sec einen Zykluswisch der die aktuelle Literzahl um eins erhöht.
In diesem idealisierten Bespiel muss man nur einmal ermitteln wie lange es dauert um einen Liter zu befüllen.
Sollte dies 3,75 sec dauern so muss man den timer auf diese Zeit stellen.

peter(R)
 
Zurück
Oben