TIA Tank nachfüllen

Zuviel Werbung?
-> Hier kostenlos registrieren
Dann irgendeine Berechnung die als Ergebnis das Ventil für Zeit x öffnet bis der Sollfüllstand erreicht ist
Da nur ein Zulaufventil geöffnet wird, wird der Durchfluß ja nicht gesteuert/geregelt, sondern ergibt sich "irgendwie" und könnte auch schwanken? Da musst Du in möglichst kleinen Zeitabständen die in der Zeit geflossene Menge aus dem Durchfluß pro Zeiteinheit berechnen und aufsummieren (integrieren), bis nach einer Weile die gewünschte Menge zusammengekommen ist. Dafür kannst Du aus der Bibliothek mit generellen Funktionen (LGF) den Baustein LGF_Integration verwenden. Die Anleitung zur Verwendung des Bausteins kannst Du bei Siemens downloaden (die PDF "Dokumentation LGF V5.0.0 (5,1 MB)"), die Quelle des Bausteins hänge ich hier an den Beitrag an.

Harald
 

Anhänge

  • LGF_Integration_V300.scl.txt
    5,7 KB · Aufrufe: 22
SCL-Quellcode ins TIA Projekt übernehmen:
1) die Datei LGF_Integration_V300.scl.txt aus Beitrag #21 downloaden
2) die Datei umbenennen zu LGF_Integration_V300.scl (das .txt entfernen)
3) im TIA (Test-)Projekt im Projektbaum unter der CPU > Externe Quellen > Neue externe Datei hinzufügen: die Datei LGF_Integration_V300.scl
4) auf den nun erschienenen Eintrag Externe Quellen > LGF_Integration_V300.scl > Rechtsmausklick > Bausteine aus Quelle generieren: das erzeugt unter "Programmbausteine" den FB LGF_Integration
5) der Eintrag LGF_Integration_V300.scl unter "Externe Quellen" kann danach gelöscht werden

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. in möglichst kleinen Zeitabständen die in der Zeit geflossene Menge aus dem Durchfluß pro Zeiteinheit berechnen und aufsummieren (integrieren) ..
Wobei man "möglichst klein" nicht wörtlich nehmen sollte. Je kleiner die Abtastzeit wird, um so öfter addiert man einen mehr oder weniger großen Messfehler. Eben so wird die Zeitmessung u.U. ungenauer. Man muss die Parameter von Fall zu Fall abwägen. Im simulierten Modell spielt das aber eher keine so große Rolle.
 
Jepp, die Abtastzeit muß man abwägen. Und sie sollte zur Analogeingang-Wandlungszeit passen. Schneller muß man nicht addieren. Je größer man die Abtastzeit für den Integrator wählt, desto schlechter werden Wert-Schwankungen berücksichtigt und der momentane Abtastwert repräsentiert dann nicht gut den Mittelwert der Periode. Ich würde den Integrator wohl so ca. alle 100 .. 500 ms aufrufen (und bei einem realen Durchfluß dann mal schauen, wie gut das Ergebnis hinkommt).

Harald
 
Puh alles klar. Ich werde mich da mal erneut dran setzen und versuchen das gescheit hinzubekommen. Ich danke euch erst mal für die Hilfe und Tipps. Mal sehen ob ich das hinbekomme
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beispiel

So in dieser Art könnte eine auf Füllstand basierende Steuerung aussehen:


Code:
[FONT=courier new]Fuellstand := FuellstandEW * FuellstandNormFaktor;

Sollmenge := 40;  // z.B. 40 Liter

R_TRIG_Start( clk := TasterStart);

if R_TRIG_Start.q 
   and not Fuellen
then
    FuellstandZiel := Fuellstand + Sollmenge;
    Fuellen := true;
end_if;

if Fuellstand > FuellstandZiel
    or TasterStop
then
    Fuellen := false;
end_if;

AusgangFuellen := Fuellen;

[/FONT]
 
Zuletzt bearbeitet:
So in dieser Art könnte eine auf Füllstand basierende Steuerung aussehen:


Code:
[FONT=courier new]Fuellstand := FuellstandEW * FuellstandNormFaktor;

Sollmenge := 40;  // z.B. 40 Liter

R_TRIG_Start( clk := TasterStart);

if R_TRIG_Start.q 
   and not Fuellen
then
    FuellstandZiel := Fuellstand + Sollmenge;
    Fuellen := true;
end_if;

if Fuellstand > FuellstandZiel
    or TasterStop
then
    Fuellen := false;
end_if;

AusgangFuellen := Fuellen;

[/FONT]

Grob ja, die Details geben aber Punktabzüge, u.a. Aufgabenstellung nicht eingehalten ;).
 
Da es ein weiteres Thema gibt das eigentlich hier hätte behandelt werden können und Du noch nicht wirklich weiter gekommen bist bzw. weil sich das alles im Kreis dreht nutz ich meine Pause mal anders:

Code:
FUNCTION_BLOCK "Auslitern"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      Start_aktiv : Bool;   // Startsignal zur Erfassung
      Sensor : Int;   // Sensoreingangswort 0-27648
      "Sensor min" : Real := 0.0;   // Bei 0..150l/min hier 0
      "Sensor max" : Real := 150.0;   // Bei 0..150l/min hier 150
   END_VAR


   VAR_OUTPUT 
      gemessene_Liter : Real;
   END_VAR


   VAR 
      RUNTIME_OUT : LReal;
      RUNTIME_MEM : LReal;
      Zykluszeit : Real;
      Durchfluss_ms : Real;
      FHM_1 : Bool;
      Rechenwert : Real;
   END_VAR




BEGIN
	// Anhand Durchflussmenge/l vom IFM-Sensor die tatsächlich geförderte Menge in Litern bestimmen
	// Einfache Variante, direkter Durchfluss des Sensors ohne Nachlauf
	// Der letzte Vorgang bleibt bis zum erneuten Start gespeichert, Wert ist direkt in HMI anzeigefähig,
	// bei kleinen Werten die Nachkommastellen evtl. mit anzeigen
	
	// Zykluszeit ermitteln
	#RUNTIME_OUT:=RUNTIME(#RUNTIME_MEM);
	#Zykluszeit := LREAL_TO_REAL(#RUNTIME_OUT)*1000;
	
	// Durchfluss/ms ermitteln um so genau wie möglich zu werden
	#Durchfluss_ms:=(SCALE_X(MIN:=#"Sensor min", VALUE:=(NORM_X(MIN:=0, VALUE:=#Sensor, MAX:=27648)), MAX:=#"Sensor max")/60000);
	
	// Beim Start löschen
	IF NOT #FHM_1 AND #Start_aktiv THEN
	    #gemessene_Liter := 0;
	    #Zykluszeit := 0;
	    #Rechenwert := 0;
	END_IF;
	#FHM_1 := #Start_aktiv;
	
	// Berechnung der Liter
	IF #Start_aktiv THEN // Zur Laufzeit berechnen
	    #Rechenwert := #Rechenwert + (#Durchfluss_ms * #Zykluszeit);
	    #gemessene_Liter := #Rechenwert;
	END_IF;
	
	
END_FUNCTION_BLOCK

Das ist ein Baustein der bei einer KD-Anlage vor einiger Zeit von mir in einer S7-1200 eingesetzt wurde. Er wird aber auch mit einer 1500er funktionieren
Ich hoffe Du bekommst es hin den Inhalt der Code-Tags in den Editor zu kopieren, die Datei als "Name.SCL" abzuspeichern und im TIA-Portal im linken Reiter "Externe Quellen" eine "Neue externe Datei hinzufügen" zu nutzen.

Vielleicht hilft Dir das bei Deinen Verständnisproblemen mit dieser Materie, genau so würde ich ihn aber nicht in der Arbeit abgeben, da die netten Lehrer auch hier nachsehen und fertige Lösungen erkennen.

Für alle anderen: Ja, der Baustein/Code ist nicht wirklich sauber, ist aber schon älter, und ja, Lösungen helfen nicht wirklich, allerdings sehe ich hier gerade keinen wirklichen anderen Weg als das "Beispiel" rauszurücken.
 
Zurück
Oben