# Mengenerfassung



## willirt (16 Juni 2007)

Ich muss aus einer Tabelle mit Wertepaaren (Überfallhöhe in cm und Entlastungsmenge in liter/sec) die momentane Entlastungsmenge (Liter/sec) berechnen und zu einer Gesammtmenge seit dem Eintreten des Entlastungs-
ereignisses aufaddieren. Dieser Wert soll dann in eine DB mit dem Zeitpunkt
von Beginn und Ende der Entlassung eingetragen werden. Beginn heißt der Zeitpunkt ab dem Messwert >0.
Der Messwert liegt als normierter Wert (INT) vor und gibt den Wasserhöhenstand von 0-100 cm an (4-20 mA).
Ich bin momentan ziemlich ratlos wie ich diese Aufgabe lösen soll.
Derartige Aufgabenstellungen werden an der Anlage (Regenüberlaufbecken)
mit Endress+Hauser Geräten, die sich entsprechend parametrieren lassen,
gelöst.
Obrige Aufgabenstellung kam nun nachträglich hinzu und soll softwaremäßig
gelöst werden.
Bei der SPS handelt es sich um eine S7-314
Für Lösungsvorschläge wäre ich unendlich dankbar.


----------



## borromeus (16 Juni 2007)

Verstehe ich das richtig:

Du musst aus einer Kurve (x,y) interpolieren und den entsprechenden Wert aufintegrieren?

Einen linearinterpolations-FB gibt es, also brauchst Du nur alle zB 1 Minute den Istwert nehmen und nach Interpolation (hier eher linear) den Liter- Wert/sek x 60 sek. aufaddieren.


----------



## Ralle (17 Juni 2007)

Ich würde gleich die Formel für die Kurve hernehmen. In einem festen Intervall, z.Bsp. im Sekundentakt liest du dann die Überfallhöhe ein, berechnest nach der Formel die Entlastungsmenge und addierst das ganze in einem DB auf.

Das feste Intervall machst du entweder mit einem Timer oder du stellst den  OB35 auf 1000ms ein (Hardwarekonfig) und machst das dann darin.


----------



## borromeus (17 Juni 2007)

@Ralle: sehr sehr hübsch.

Da wir auch öfters was für Kläranlagen machen denke ich es gibt sogar eine "richtige" Formel für zB Regenüberlaufbecken um aus Höhe über Abflusskante (Breite muss auch bekannt sein) die Überlaufmenge zu berechnen.


----------



## Bitverbieger (17 Juni 2007)

JA, da gibt es eine Formel. Sie ist aber recht umfangreich.
Einige  Endress&Hauser Geräte  z.B. FMU861 haben diese Formel 
ob Board. Sollte man für die Höhenstandsmessung eine Echolotmessung
benutzten, hat man eine Messungenauigkeit von min. 1cm.
Dies hat bei dieser Anwendung eine riesige Messungenauigkeit zur Folge.
Da kann man besser schätzen.

Bitverbieger


----------



## IBN-Service (17 Juni 2007)

Hier zur Info die Überfallformeln:


```
//
//  Abhängig davon, ob der Wasserstand den Ablaufschlitz teilweise oder komplett bedeckt, 
//  werden folgende beide Formeln zur Ermittlung des Klärüberlaufs berücksichtigt:
//
//  Wenn unvollständiger Überlauf (Level H > Level V), dann wird phi <> 1.
//
//  I) Wasserstand füllt den Ablaufschlitz nicht komplett ([B]oder Überlaufschwelle[/B]):
//
//  Q = 2/3 * my * b * WURZEL(2g) * h2^1.5 * phi
//
//  my = 0,64   (Wasser über Schwelle)
//  b  = Schwellen/Schlitzlänge in [m]
//  g  = 9.80665 m/s^2
//  h2 = relative Höhe des Wasserstandes über der Schwelle in [m]
//  phi = 1 bei vollständigem Überlauf.
//   
//  II) Wasserstand füllt den Ablaufschlitz komplett:
//
//  Q = 2/3 * my * b * WURZEL(2g) * (h2^1.5 - h1^1.5) * phi
//
//  my = 0,64
//  b  = Schlitzlänge in [m]
//  g  = 9.80665 m/s^2
//  h2 = relative Höhe des Wasserstandes über Unterkannte Schlitz in [m]
//  h1 = relative Höhe des Wasserstandes über Oberkannte  Schlitz in [m]
//
//  Hinweis = h2 - h1 ergibt somit die Höhe der Schlitzblende (HoeheSli)
//  HoeheABS - RefHoehe - HoeheSli =  h1 
//  HoeheABS - RefHoehe            =  h2
//
//  
//                      XX
//      ________________XX  
//     W :       : h1   XX
//     W :     __:______XX
//     W :h2  
//     W :                  => QAbl
//     W :______________
//     W     RefHoehe   XX
//     W                XX
//     W                XX
//     W                XX      h2 - h1 = hSli
//
//
//  Beide Formeln liefern die Wasserüberlaufmenge in m^3/s
//
//
//
//  log.(3wrz(a)) = log.a / 3
//
```


----------



## willirt (19 Juni 2007)

*Fc103?*

Könnte ich die berechnung nicht auch mit CDT (fc103) durchführen.
Funktioniert es wenn ich die Tabelle in 80 Spalten aufteile (von Wert
1cm - Wert 80cm), obwohl die Werte nicht linear sind?


----------



## Dagobert (19 Juni 2007)

Der FC korrelierte Datentabellen ist genau richtig dafür.
Du legst aber nicht 80 Spalten sondern 80 Zeilen mit
entsprechenden x/y Wertepaaren an.
So kann man BELIEBIGE Funktionen hinterlegen,
natürlich auch nichtlineare.
Beim Aufruf des FC korr. Datentabelle ermittelt dieser
zu einem vorgegebenen X Wert das diesem Wert 
nächstgelegene X/Y Wertepaar.

Ich denke das von Dir beschriebene Problem kann
man so elegant lösen....

Gruß ans Forum


----------



## willirt (19 Juni 2007)

ich möchte mich für die prommte Antword bedanken.
Da ich jedoch nur ein ziehmlich grüner Anwenderprogrammierer bin
habe ich noch ein Problem mit dem anlegen der Datenbank.
Wie muss der Aufbau aussehen , wenn sich die Wertepaare in einer Datenbank
befinden sollen (cm , l/s).


----------



## Dagobert (19 Juni 2007)

Hallo Willirt,

ja macht doch Sinn die X Werte
in cm und die zugehörigen Y Werte
in l/sec zu skalieren.

Schau mal in der Bausteinbezogenen
Hilfe zum FC korrelierte Datentabelle
bei S7 rein. Da ist meines Wissens
auch der Aufbau der Daten recht gut
mit einem Beispiel erklärt...

Gruß


----------



## willirt (19 Juni 2007)

Genau an diesem Punkt komme ich nicht weiter.
Ich habe bisher nur die allgemeine Erklärung für FC103 gefunden.
Sowohl die Beschreibung des Bausteins alsauch F1 sind für mich 
diesbezüglich ein Buch mit 7 Siegeln.


----------



## Ralle (19 Juni 2007)

Na ja, wenn das mit dem FC zu aufwendig wird, dann nimm doch die Formel:

Y=-0,0063X^3+1,819^X2+42,521x-63,568

Das ist doch mit einer Simatic null Problem und du brauchst weder Tabelle noch Interpoaltion. Wo liegt denn da das Problem?


----------



## Kai (19 Juni 2007)

Ralle schrieb:


> Y=-0,0063X^3+1,819^X2+42,521x-63,568


 
Und hier findest Du ein Beispiel, wie Du eine solche Formel in ein SPS-Programm umsetzten kannst:

http://www.sps-forum.de/showthread.php?t=10337

http://www.sps-forum.de/showthread.php?t=13539

Gruß Kai


----------



## zotos (19 Juni 2007)

Kai schrieb:


> Und hier findest Du ein Beispiel, wie Du eine solche Formel in ein SPS-Programm umsetzten kannst:
> http://www.sps-forum.de/showthread.php?t=13539...



Was muss man den da umsetzen?


```
//Y=-0,0063X^3+1,819^X2+42,521x-63,568
Y := EXPT((-0.0063*X), 3) + EXPT(1.819, (X*2))+ (42.521 * X) -63.568;
```


PS: ich hoffe das ich jetzt keinen Fehler drin habe ;o)


----------



## Kai (19 Juni 2007)

zotos schrieb:


> Was muss man den da umsetzen?
> 
> 
> ```
> ...


 
Dein Programmcode ist in SCL, da wird die Rechnung natürlich einfacher. Wenn @willirt jedoch kein SCL zur Verfügung hat und in AWL programmieren muss, dann wird die Rechnung doch etwas komplizierter.

Gruß Kai


----------



## willirt (19 Juni 2007)

Ich habe nur AWL , FUB und KOP zur Verfügung


----------



## zotos (19 Juni 2007)

willirt schrieb:


> Ich habe nur AWL , FUB und KOP zur Verfügung



Das ist schade denn SCL würde das Problem stark vereinfachen.


----------



## willirt (19 Juni 2007)

*Fc103*

Hat jemand eine Beispieldatenbank mit Wertepaaren für FC103 CDT?


----------



## Kai (19 Juni 2007)

Ich kann mal ein Beispielprogramm für den FC103 schreiben und das Programm nachher ins Forum stellen.

Gruß Kai


----------



## willirt (19 Juni 2007)

Lieber Kai
Du machst mich zum glücklichsten Menschen auf dieser Welt.

Gruß Willi


----------



## Kai (19 Juni 2007)

So, hier ist nun mein Programm.  

Gruß Kai


----------



## Kai (19 Juni 2007)

Hier noch ein paar Anmerkungen zum FC103 und wieso mir der FC103 nicht so gut gefällt:

Der FC103 vergleicht einen Eingabewert mit vorhandenen Eingabewerten aus einer Tabelle und sucht den ersten Wert, der größer oder gleich dem Eingabewert ist. Der entsprechende Ausgabewert aus der Tabelle wird dann als Ausgabewert ausgegeben.

Das Problem ist nun, dass zwischen den einzelnen Tabellenwerte keine Interpolation stattfindet. Man bekommt also keine kontinuierliche Funktion mit Zwischenwerten, sondern eine Treppenkurve mit Sprüngen in den Werten.


```
Überfallhöhe [cm] =>  Entlastungsmenge [l/s]
 
              [B]15  =>  0915  (Tabellenwert)[/B]
              16  =>  1470
              17  =>  1470
              18  =>  1470
              19  =>  1470
              [B]20  =>  1470  (Tabellenwert)[/B]
              21  =>  2050
              22  =>  2050
              23  =>  2050
              24  =>  2050
              [B]25  =>  2050  (Tabellenwert)[/B]
              26  =>  2700
```
 
Wenn man nun die Formel von @Ralle verwendet, bekommt man diese Probleme nicht. Mit der Formel hat man eine kontinuierliche Funktion mit einer beliebigen Anzahl von Zwischenwerten.



Ralle schrieb:


> Y=-0,0063X^3+1,819^X2+42,521x-63,568


 
Ich selber würde also die Funktion von @Ralle verwenden.

Gruß Kai


----------



## borromeus (21 Juni 2007)

Naja, ich will mich da ja nicht einmischen, aber die x/y Wertepaare in einen DB legen und dazwischen linear interpolieren kostet auch nicht mehr als 30min Programmierarbeit.

chchchch.......grins


----------



## willirt (30 Juli 2007)

Das Drama nimmt kein Ende!
Nachdem ich Dank Eurer Hilfe das Ganze auf einer 314-CPU zumlaufen
gebracht habe , möchte man nun auch ältere Anlagen 
(S7-214 CPU ) mit dieser Funktion nachrüsten.
Ich werde wohl nun die Formel von Ralle verwenden müssen , da  in Micro-Win
kein entsprechender Baustein existiert.
Ich habe wieder eine Tabelle mit Wertepaaren die nicht liniar ist.
Wie sieht die Umsetzung der Formel in  AWL aus  ?
Für ein Beispiel wäre ich Dankbar.


----------



## willirt (6 August 2007)

willirt schrieb:


> Das Drama nimmt kein Ende!
> Nachdem ich Dank Eurer Hilfe das Ganze auf einer 314-CPU zumlaufen
> gebracht habe , möchte man nun auch ältere Anlagen
> (S7-214 CPU ) mit dieser Funktion nachrüsten.
> ...


Wie man die Formel rechnet ist mir nunmehr klar.
Ich jedoch momentan mit der scalierung des Eingangswertes nicht klar.
Mein Endress und Hauser Ultraschallsensor liefert einen Strom von
4mA - 20mA bei einem Messwert von 0cm (0mA) - 124,5cm (20mA).
Wie muss ich den Eingangswert normien , wenn ich mit der Formel von
Ralle ( Trend2.zip) arbeiten will?


----------



## Ralle (6 August 2007)

Sag mal, bei 4-20mA sollte doch der Meßbreich erst bei 4 mA losgehen, oder?
0 mA dient ja gerade als Erkennung einer Störung.

Ansonsten sie mal hier:

http://www.sps-forum.de/showthread.php?t=2336&highlight=Scalierung

oder suche nach "Scalierung"


----------



## willirt (6 August 2007)

Entschuldigung
Messwert geht bei 4mA los


----------



## willirt (6 August 2007)

Ralle schrieb:


> Sag mal, bei 4-20mA sollte doch der Meßbreich erst bei 4 mA losgehen, oder?
> 0 mA dient ja gerade als Erkennung einer Störung.
> 
> Ansonsten sie mal hier:
> ...



Ich habe eine S7-224 CPU
Nach welcher Formel muss ich normieren und scalieren?


----------



## Ralle (6 August 2007)

Eine gute Grundlage ist das hier:

http://www.sps-forum.de/showpost.php?p=19969&postcount=10

Allerdings mußt du das für die 200-er umsetzen. Von der hab ich Null Ahnung.


----------



## willirt (7 August 2007)

Die erste Tabelle im Anhang habe ich vom Ing.-Büro erhalten. Sie stellt die 
Werte für die Überlaufmenge ab der Überlaufschwelle (ab 90,5cm)dar.
Bei dem Becken mit der 300 Cpu konnte ich mit FC103 und einer Wertetabelle
arbeiten , diese habe ich bei der Überfallschwelle beginnen lassen .
Bei der 200 Cpu habe ich diese Möglichkeit nicht.
Ich habe versucht den Endress und Hauser -Ultraschallsensor bei 90,5 cm
auf 0 zusetzten , jedoch keinen Erfolg gehabt . Er meldet mir kein auswertbares Signal. Die Werte in den Tabellen des Ing.-Büros sind immer
von 0 cm bis 80 cm berechnet , in der Praxis ist jedoch meistens bei 
40 - 50 cm Schluss (siehe Zeichnung im Anhang) . Bei der Lösung mit 
Tabellen ist dies auch kein Problem , Werte über 40 cm kommen dann 
einfach nicht vor.
Die Tabelle Nr.3 im Anhang stellt die Realität in der Rinne dar.
Alle Werte bis 90,5 cm sind 0 , die Berechnung beginnt bei 91,5 cm .
Ich habe die Formel getestet , es sind jedoch utopische Werte entstanden.
Wahrscheinlich liegt der Fehler in der Scalierung des Eingangs.


----------



## willirt (11 Oktober 2007)

Die Berechnung der Entlastungsmenge sowie die Aufaddierung zu Tages.-
und Wochenwerte unsoweiter funktioniert bei der S7-300 wunderbar.
Ich habe den OB35 auf 1 Sekunde gestellt und rufe damit das Berechnungs-
Unterprogramm auf.
Die Berechnung  bei der S7-200 funktioniert soweit ebenfalls, nur der Takt
macht noch Probleme .
Kann ich die Unterprogramme über den SM0.4 aufrufen oder muss ich das 
Ganze über einen Interrupt machen. Wie bekomme den Interrupt auf   
1 Sekunde gestellt   ?


----------



## andre (11 Oktober 2007)

Hallo,
such mal in MicroWin unter Interrupt (Operationsliste) nach ATCH, ENI, markiere diesen und drücke F1. Die Hilfe ist wirklich sehr ausführlich. Damit sollte es dann problemlos funktionieren.

Gruß Andre


----------



## willirt (11 Oktober 2007)

Danke für die schnelle Antwort.
Ich hatte dort schon nachgeschaut .
Es steht dort etwas von 255 ms.
Ich habe im Moment leider keine Hardware im Hause um zu testen ob
1 sec möglich ist.


----------



## andre (11 Oktober 2007)

Hallo,
versuch doch mal das "Interruptbeispiel 1 (Flanke E0.0)".
In der Hilfe findest du den Punkt: "Interrupts, Prioritäten und Ereignisnummern", hier findest du die Ereignisnummer, die bei EVNT einzutragen ist. Evtl. käme hier Ereignis 0 in Frage (steigende Flanke E0.0). Versuch doch mal, ob du mit SM 0.5 (1 Sek.-Takt) auf den E 0.0 schreiben kannst.
LD     SM0.5
=      E0.0
Vielleicht kannst du das Ereignis so auslösen.
Gruß Andre


----------



## willirt (11 Oktober 2007)

Kann ich mit dem SM0.5 (0.5 sec an , 05 sec aus ) mit positiver Flanke
nicht im Main direkt  die Berechnungsunterprogramme aufrufen ?


----------



## andre (11 Oktober 2007)

Hallo,
du kannst mit der pos. Flanke des SM 0.5 einen Merker setzen, mit diesem das Unterprogramm mit der Berechnung aufrufen und den Merker am Ende des Unterprogramms zurücksetzen. Dann bearbeitet das Programm die Berechnung alle 1 Sek. genau einmal.
Gruß Andre


----------



## edison (29 März 2008)

Ich häng mich mal hier mit ran, versuche mich auch gerade an der Tabelle von Ralle, bekomme aber keine realistischen Ergebnisse

// Edit
// bin im Chat von wwwAndy geholfen worden
// die Lösung meines Problems ist ein Polynom 4.Ordnung
// schaut dann so aus (bezogen auf meine xls):
// =9,97418*E29^4+0,34294*E29^3-1,6179*E29^2+3,11029*E29-1,13149
// Danke vielmals


----------

