Wasseruhr mit CPU 314C-2 DP

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo chefren_new,

wie kann ich 30 Tage speichern, wird das in DBs gemacht die ich mit Wincc Flex auslesen kann?
siehe meinen Programmentwurf in #18
Tagesverbräuche einen Monat lang speichern

DB mit den Tagesdurchsätzen und Hilfsvariablen anlegen
Die Tagesdurchsätze in Liter werden in einem DINT-Array in einem DB gespeichert.
Die Werte kannst Du in WinCC flexible anzeigen.


für eine Programmbeispiel wäre ich sehr dankbar, kann leider die Theorie noch nicht in ein Programm umsetzten, und das ich nur FUP lesen kann macht die Sache nicht einfacher.
Tja, alles was Du nur noch machen müßtest, wäre, den Pseudocode meines Programmentwurfs
in meinem Beitrag #18 in ein paar AWL-Zeilen zu übersetzen. (FUP ist dafür völlig ungeeignet)
Vielleicht findet sich jemand hier aus dem Forum, der das auf die Schnelle für Dich macht.

Ich könnte erst heute Abend das AWL-Programm hier reinstellen (komme jetzt nicht dazu).
Hast Du vielleicht eine Wunsch-Nummer für den DB? Welche Nummer soll der FC haben?
Auf welcher Adresse speicherst Du den Zählerstand - DB10.DBD0?
Sollen die Tagesdurchsätze in Liter oder m³ sein? REAL oder DINT? Wieviele Nachkommastellen?

Gruß
PN/DP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo PN/DP

Respekt vor deinen Programmierkentnissen (Ernsthaft!)
Aber glaubst du nicht das unser CHEFREN_NEW einen Einstieg braucht
der ein paar Level niedriger angesetzt ist als deine Version mit Arrays und Pointern

Sicher ist dein Lösungsweg profihaft gemacht aber ich glaube das Chefren dafür von
von seinen Kentnissen her noch nicht weit genug ist.

MfG
Paul
 
Zuletzt bearbeitet:
Hallo Chefren
Hast du die Hardware eigentlich schon zur Verfügung, so das du dich
Schritt für Schritt an die Sache ranarbeiten kannst.

Erstmal testen ob du wirklich die schnellen Eingänge brauchst
Mit einem normalen Eingang ist das für einen Anfänger viel simpler
Dann erstmal das zählen und addieren fertigmachen
Wenn das funzt an das Speichern für 30 Tage gehen

Wenn auf deiner CPU nicht viel anderes Programm läuft und die Zykluszeit
unter 15 mS liegt kommst du mit einem normalen Eingang hin
50L/min * 80 Imp = 4000 Imp/min --> 1 Imp = 15ms

MfG
Paul
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Wenn ich das richtig sehe hast du an deinem Zähler einen Reed Kontakt
d.h. ein potentialfreier Kontakt der durch einen Magnet geschaltet wird.
Wenn du 24V reinschickst kommen auch 24V wieder raus.

Wieviele Impulse liefert das Ding pro Liter????????
Wenn du deine Erfassung nur auf 1 Liter genau brauchst wäre es ein Blödsinn
einen Impulsgeber einzusetzen der 80 Imp/Liter ausgibt.

MfG
Paul
 
Anschaltung Sensor an SPS

Der Cyble Sensor kann 30V/100mA schalten. Der SPS-Eingang braucht 15..30V/9mA.

Beim Sensor mit 2 Adern kommt der weiße Draht an +24V und der braune Draht an
den SPS-Digitaleingang.

Beim Sensor mit 5 Adern muß der braune Draht an 0V und der weiße Draht an den
SPS-Digitaleingang. Zusätzlich muß vom SPS-Digitaleingang zu +24V ein
Widerstand 1,2 bis 1,5kOhm / 0,8 bis 1W gelegt werden.
Der Eingang hat dann in Ruhe etwa 18V und der Sensor schaltet ihn auf ca. 0,5V.

Gruß
PN/DP
 
ein paar Bemerkungen ...

Extrem kurze Impulslänge

Wie Paul im #24 schon ausgerechnet hat, kommt im worst case alle 15ms ein Impuls.
Das ist aber die Periodendauer und darf nicht mit der Impulslänge verwechselt werden.
Der Impuls ist nicht 15ms lang, sondern im Idealfall nur 7,5ms Impuls und 7,5ms Pause
(bei Tastverhältnis 1:1).
In der Realität ist die Impulslänge meist noch kürzer, z.B. ~ 5% (Reed-Kontakt-Äquivalent).
Das wären hier im Beispiel 0,75ms !!!
Der SPS-Eingang mit dem Zähler muß nicht nur Prozessalarm auslösen, sondern auch die
Eingangsverzögerung muß auf 0,1ms eingestellt werden. Wir sind nun hart an der Grenze dessen,
was die CPU 314-2 DP an Prozessalarmen verarbeiten kann (OB40 Verzögerung ~ 0,5ms)!
Eventuell müßte nun doch der kompliziertere Weg über den schnellen Zählkanal genommen werden.

Gut wäre es gewesen, wenn chefren_new gleich genauere Angaben gemacht hätte,
Aus 80 Impulsen/Minute im #1 sind nun 4000 Impulse/Minute in #17 geworden. Das ist für die
Realisierung ein erheblicher Unterschied! Die Problematik der sehr kurzen Impulslänge habe
ich in diesem Thread schon mehrmals erwähnt. Zuerst in #6
Nur hat das scheinbar nicht jeder gelesen.

Klarheit kann hier nur ein Blick in das Datenblatt des Wasserzählers schaffen (siehe unten).

Sollte man chefren_new hier mit fertigem "professionellen" Programmcode helfen?

Ich denke, daß diese spezielle Aufgabe NICHT geeignet ist, chefren_new das simple zählen
und addieren schonend beizubringen, wenn vorher schon klar ist, daß das Programm dann nicht
funktionieren wird. chefren_new bekommt vielleicht den richtigen Programmcode hin, wird dann
aber verzweifelt suchen, warum sein Programm zu wenige Impulse zählt und die Welt nicht mehr
verstehen. Übrigens findet man den FUP-Code zum einfachen zählen in #15.

Weil das exakte schnelle Zählen für die Aufgabe essentiell ist und nicht im OB1 möglich ist,
habe ich den eigentlich simplen, für Anfänger aber schwierigen Code des OB40 hier komplett
programmiert veröffentlicht. #16

Im Übrigen hat chefren_new hier nur geschrieben, daß er geradeso FUP LESEN kann. Was er
SCHREIBEN (programmieren) kann, hat er nicht erwähnt. Er hat auch nicht erwähnt, ob er
irgend etwas von den hier gebrachten Programmbeispielen übernommen und ausprobiert hat.

Ich glaube, daß chefren_new das gar nicht selbst programmieren will. Er will sich nicht
Schritt für Schritt zur Lösung ranarbeiten. Er will das fertige Programm.

Deshalb habe ich seine mehrfach geäußerte Frage nach der Speicherung der Tagesverbräuche
nur als Programmentwurf in Pseudocode beantwortet. Da stecken alle wichtigen Informationen
drin für jemanden, der das wirklich programmieren will. #18
Mit wahrscheinlich weniger Zeitaufwand hätte ich das Programm auch gleich in AWL programmieren
und hier reinstellen können. Den AWL-Code hätten aber viel weniger Leser verstanden.

Und in #20 zeigt chefren_new, daß er diesen detaillierten Programmentwurf nicht richtig
liest oder nicht versteht.

chefren_new möchte die 30-Tage-Durchflüsse in WCCflex anzeigen ...
Falls das eine Trendkurve mit Daten aus der SPS werden soll, so sind da noch bestimmte
Anforderungen seitens WCCflex an die Speicherreihenfolge der Daten zu beachten, d.h. die
Daten müssen historisch sortiert werden (ältester Wert zuerst).
Falls es eine einfache Auflistung der Daten sein soll, muß womöglich der eigentlich
überflüssige Datumsstempel mit im Array abgelegt werden. Ich schätze, chefren_new wird
die Datumsangabe nicht nachträglich in WCCflex errechnen können.


Ich finde nicht, daß mein Programmentwurf mit Array und Pointerzugriff besonders kompliziert
oder "profihaft" ist. Da kann man sich doch reindenken und alles dazu relevante in der Step7-
Onlinehilfe und hier im Forum nachlesen. Umständlicher wäre es, kein Array und keine Pointer
zu benutzen (z.B. 31 einzelne Tag-Vergleiche oder Sprungleiste). Der einzige "Trick" in dem
Programmentwurf: ich brauche keine Flanke (Flanken setze ich stets sparsam ein). ;)

Ich helfe gern, auch mit fertigen Programmbausteinen. Der Fragesteller muß aber genau
beschreiben was er braucht, damit ich die freiwillig kostenlose Arbeit nur 1x machen muß.

@chefren_new

Ich werde den AWL-Code zu meinem Programmentwurf noch nicht schreiben. Das ist noch zu früh.

Probiere erstmal aus, ob die Erfassung des Zählimpulses mit dem OB40 zuverlässig funktioniert.
Dann melde Dich wieder und erkläre, wie Du die Tagesdurchflüsse in WCCflex anzeigen willst.
Danach richtet sich dann, wie die Tagesdurchflüsse gespeichert werden. Und erst dann kann man
ein gutes Programm dafür schreiben.


Ich kann mit dem Datenblatt nicht nachvollziehen, wie Du mit dem in #25 genannten Wasserzähler
auf 80 Impulse/Liter kommen willst. Mit Bestellnummer 10424 für DN15...20 kommt man bestenfalls
auf 10 Impulse/Liter (0,1 Liter/Impuls). Das macht dann bei 50 Liter/Minute 500 Impulse/Minute
und die LF-Impulslänge läge bei etwa 6ms. Da wären wir wieder im technisch vernünftigen Bereich.

Warum kommst Du hier immer nur mit ungenauen Angaben, wo das wichtigste stets fehlt?
Mußt Du immer erst jemanden fragen der sich auskennt? Eventuell Deinen Instandhaltungstechniker?
Das ist doch keine Schande. Es wäre aber für uns, die Dir helfen wollen, eine riesige Hilfe,
wenn die Aufgabenstellung klarer wäre und wenn wir Dich und Deine Kenntnisse und Fähigkeiten
besser einschätzen könnten.

Das SPS-Forum mit so vielen idealistischen Mitgliedern ist eine feine Sache, allerdings
funktioniert das Helfen nur bei konstruktiver Mitarbeit der Fragesteller.

Sorry chefren_new, aber das mußte ich loswerden.

Ach ja: Danke dafür, daß Du den
post_thanks.gif
Button gefunden und benutzt hast.
Sehr viele Fragesteller, deren EP mit "Ich wäre für jede Hilfe dankbar" endet, finden den
Button komischerweise nicht.

"Ich habe fertig!"

Gruß
PN/DP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@PN/DP
Wie Paul im #24 schon ausgerechnet hat, kommt im worst case alle 15ms ein Impuls.
Das ist aber die Periodendauer und darf nicht mit der Impulslänge verwechselt werden.
Der Impuls ist nicht 15ms lang, sondern im Idealfall nur 7,5ms Impuls und 7,5ms Pause
(bei Tastverhältnis 1:1).


Du hast recht, sorry da habe ich nicht aufgepasst
 
Hallo PN/DP,
meiner Meinung nach leistest du hier im Forum eine sehr gute Arbeit,
deine Antworten sind sehr ausführlich und auf hohem Niveau.
Wenn es einmal Rückschläge vom Fragesteller gibt, mach trotzdem
weiter so.
Von mir bekommst du ein extra
post_thanks.gif
:D


Gruß Helmut
 
Hallo

ich weis eure Hilfe sehr zu schätzen, und bin echt für alles sehr dankbar.
in diesem Forum wurde mir schon des Öfteren weitergeholfen.

Gruß
 
Fragen-Liste

Hallo chefren_new,

hast Du den Wasserzähler schon an der SPS angeschlossen? Und den OB40 programmiert?
Nicht vergessen: In der Hardware-Konfig den Prozessalarm bei steigender Flanke aktivieren
und die Eingangsverzögerung auf 0,1ms einstellen. Die Konfig in die CPU laden.

Bitte probiere aus, ob der Zähler in der SPS (DB10.DBD0) mit Deinem Wasserzähler
synchron läuft, mindestens 1 Tag lang. Sieh mal zu, daß Du ein paar Minuten lang den
maximalen Durchfluss erreichst und beobachte den Zählerwert in DB10.DBD0.

Bitte beantworte diese Fragen:
  • Welche CPU hast Du genau? 6ES7 314-.....-....
  • Wie hoch ist die Zykluszeit Deines jetzigen Programms ohne Zähler?
  • An welchem Eingang hast Du den Wasserzähler angeschlossen? E124.0?
  • Wieviele Impulse/Liter bringt der Wasserzähler tatsächlich?
  • Welche Version WinCC flexible hast Du?
  • Welches Panel hast Du? Genauer Typ, am besten Bestellnummer 6AV.........
  • Wie ist das Panel an die CPU angeschlossen? MPI oder Profibus?
  • Wie willst Du die 30 Tagesdurchflüsse anzeigen?
    Als Trendkurve? Als einfache Zahlen-Ausgabefelder? Bitte beschreiben.

Je mehr Fragen Du beantwortest, desto genauer können wir Dir dann helfen.
Du meldest Dich wieder wenn Du Ergebnisse hast, einverstanden?
(oder wenn was nicht funktioniert)

Gruß
PN/DP
 
Hallo

hab jetzt folgendes Ergebniss, meine Wasseruhr mach bei jedem Liter ein Impuls, denn ich einfach an einen Zaehler sende, und setze das Ganze um 23:59 zureuck.
Habe Stat Variablen Liter_1 bis Liter_30 angelegt die ich in einem DB habe und mit Wincc Flex einfach auslesen kann.

Mein Status
Ich kann jetzt die Lieter fuer einen Tag Zaehlen und in Wincc Flex anzeigen.
Wie kann ich variabel die Ergbniss in die Stat Variablen Liter_1 bis Liter_30 bekommen.

ich moechte mich nochmals fuer eure Geduld bedanken.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na also, das ist doch schon mal was!

Du hast also in der Deklarationstabelle deines FB´s dreißig Variablen angelegt,
für die 30 Tage und in einer (der ersten?) steht dein aktueller Wert. Richtig???
Du übergibst also der Wert des Zählers an den Instanz-DB. Richtig???
Du siehst den akutellen Zählwert nicht am Zähler sondern in einem Datenbaustein Richtig???


Bitte antworte bevor wir weitermachen
 
Impulse an einem Digitaleingang im normalen OB1-Zyklus zählen geht wegen der sehr kurzen Zählimpulse ja gerade nicht.


Du mußt in der Hardware-Konfig der CPU314C einen Zähler-Kanal auf Endlos-Zählen parametrieren.
Dann im Programm den Zählerstand des Kanals auslesen. Wenn er sich gegenüber dem Zählerstand
vom letzten OB1-Zyklus geändert hat, dann die Differenz zum vorherigen Zählerstand auf Deinen
eigentlichen Impulszähler aufaddieren. Aber nicht im 1.OB1-Zyklus bei STOP->RUN !

S7-300 CPU 31xC Technologische Funktionen (CPU 312C, CPU 313C, CPU 314C)
SIMATIC S7-300 CPU 31xC und CPU 31x: Technische Daten

Ich finde, daß die Variante mit dem Prozessalarm wesentlich einfacher und sicherer zu programmieren ist.
In der Hardware-Konfig der CPU einstellen, welcher Eingang bei welcher Flanke Prozessalarm auslösen soll.
Dann im OB40 Deinen Impulszähler incrementieren.
Allerdings wirst Du um AWL nicht herumkommen.

Sorry, für ein fertiges Programmbeispiel habe ich gerade keine Zeit.

Gruß
PN/DP




Ich finde diese Idee wohl auch am Sinnvollsten. Jedoch gibt es auch noch in FUB die Möglichkeit so etwas zu realisieren. Du solltest dich deshalb einwenig mit Gegentakt auskennen. Wenn dein Signal der Wasseruhr alle 1.3 Sec kommt bei max. Durchfluss und die Zyklenzeit <10ms ist. Kasst du dir einen Internen Taktgeber selbst machen, er sollte auf die Hälfte deines Taktes also deinen 1.3 Sek eingestellt sein. Das Ganze gliederst du mit einem UND Gleid vor deinen Zähler in deiner SPS. Dadurch das jetzt die Taktung vom Taktgeber kommt und mit deiner Zähluhr per UND Glied verknüpft ist, sollte dein Zähler nun jeden Takt deiner Uhr erkennen. Achte bitte darauf das dies alles in ein FC gehört, wegen der Geschwindigkeit des Zykluses
 
@@@@@@@@
Ich finde diese Idee wohl auch am Sinnvollsten. Jedoch gibt es auch noch in FUB die Möglichkeit so etwas zu realisieren. Du solltest dich deshalb einwenig mit Gegentakt auskennen. Wenn dein Signal der Wasseruhr alle 1.3 Sec kommt bei max. Durchfluss und die Zyklenzeit <10ms ist. Kasst du dir einen Internen Taktgeber selbst machen, er sollte auf die Hälfte deines Taktes also deinen 1.3 Sek eingestellt sein. Das Ganze gliederst du mit einem UND Gleid vor deinen Zähler in deiner SPS. Dadurch das jetzt die Taktung vom Taktgeber kommt und mit deiner Zähluhr per UND Glied verknüpft ist, sollte dein Zähler nun jeden Takt deiner Uhr erkennen. Achte bitte darauf das dies alles in ein FC gehört, wegen der Geschwindigkeit des Zykluses

Hääää :confused::confused::confused::confused::confused::confused:

Sorry verstehe ich nicht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Modelbahn per SPS

Das würde bedeuten das der Zählimpuls von der Wasseruhr nur durchkommt
wenn auch dein interner Takt (Gegentakt) gerade <High> ist.
Imulse außerhalb des internen Taktes werden ignoriert.
Wenn der Wasserstrom nur zaghaft läuft und du nur alle 5sec einen Puls bekommst
ist es Zufall ob er erfasst wird oder nicht.

Gegentakt heißt wohl so weil er dagegen arbeitet :)

Oder habe ich etwas grundsätzlich nicht kapiert ?????
 
Zuletzt bearbeitet:
@ Modellbahn per SPS
Ich finde diese Idee wohl auch am Sinnvollsten.
Hääää ? :confused::confused::confused: Welche von den zwei?

Ist aber egal. chefren_new ist schon fast fertig (siehe #34). Das
Zählproblem ist gelöst, es geht nur noch um das geordnete Ablegen
der Tagesdurchflüsse in DB-Variablen.

Das Signal von der Wasseruhr kommt nicht alle "1.3 Sec", sondern
alle 1 Liter. Und das kann im ungünstigsten Fall alle 1,2 Sekunden
sein, es kann aber auch stundenlang gar kein Impuls kommen.
Lissajous-Figuren funktionieren aber nur bei relativ gleichbleibenden
Frequenzen. (falls ich Deinen "Gegentakt" richtig interpretiere)

@ Paul
Wenn Ihr dann bei der Tag-abhängigen Adressierung der Stat-Variablen
Liter_1 bis Liter_30 ankommt, da muß kein AR1 verwendet werden. Die
Indirekte Adressierung gibt es auch speicherindirekt (T DBD[LD0] oder
T DID[MD0]). Eine SPL mit "Tag" als Index würde sich auch anbieten,
allerdings nicht in FUP. Oder Du hast eine bessere Idee. :cool:
Ich klinke mich jetzt hier mal aus. chefren_new ist ja auf einem
erfolgversprechenden Weg.

@ chefren_new
Klasse, Du bist ja schon weit gekommen. Besser, als ich gedacht habe. :-D
Weiter so, Du schaffst das.
icon14.gif


Gruß
PN/DP
 
@PN/DP

Mir schwebt da eine wesentlich simplere Lösung vor.
Bei nur 30 Meßwerten ist das locker ohne Adressregister etc. machbar
sondern mit ein paar einfachen Lade- Transferbefehlen,
so das Chefren auch kapiert was er da macht.
Das Problem mit den schnellen Zähleingängen hat sich ja auch von selbst gelöst,
dadurch das er jetzt nur noch 1 Imp/Liter hat.

Ich hoffe nur das der Impuls nicht nur 1 ms lang ist :)

Erst mal abwarten wie er die Werte überhaupt dargestellt haben will.

bis später
Paul
 
Zuletzt bearbeitet:
Zurück
Oben