Hallo Stefan,
SPS programmieren ist eine "exakte Wissenschaft". Bitte bemühe Dich um exakte und vollständige Antworten.
Von Dir fehlt immer noch die Angabe, welche SPS Ihr benutzt. Diese Angabe ist wichtig, damit wir einschätzen können, ob diese SPS die Aufgabe erfüllen kann und welche Programmiersprache benutzt wird.
Deine Erwähnung von Moeller easy und
Codesys bringt mich auf die Idee, es könnte eine EC4P-2... sein? Damit kenne ich mich leider nicht aus, da kann ich nur allgemein helfen ...
19V angezeigt aufgrund des Widerstandes von ca. 2 Ohm
Daraus schließe ich, daß Ihr den Durchflussmesser mit dem nötigen Pullup-Widerstand von ca. 2 Kiloohm korrekt angeschlossen habt. Was anscheinend funktioniert.
Die Durchflussmenge / Minute beträgt ca. 1 - 2 Minuten.
Ich nehme mal an, Du meinst max 2 Liter pro Minute ...
Das würde bedeuten, Ihr müßt mit bis zu 5000 Impulse/Minute rechnen, gleich 83 Imp/Sekunde, gleich 12ms Periodendauer. Da bleibt für die Impulslänge höchstens noch 6 ms. Ich weiß nicht, warum die enorm wichtige Angabe der Pulslänge bei fast allen Zähler-Prospekten fehlt. Ich gehe davon aus, daß die Impulslänge bei höchstem Durchfluss wohl noch viel kürzer ist.
Falls Ihr eine EC4P habt - die kann aber an manchen Eingängen schnell genug zählen, ich weiß nur nicht, wie in Codesys die schnellen Zähler angesprochen werden müssen.
Wie schon thomass5 in Beitrag #3 schrieb, müßte Euer allgemeiner Abfüll-Ablauf so aussehen:
- Start der Abfüllung
- Zähler in SPS auf 0 setzen oder momentanen Zählerstand als Startzählerstand merken
- Berechnen: Zielzählerstand = Startzählerstand + Ganzzahl(gewünschte Abfüllmenge in ml * 2.5)
- Vergleichen des momentanen Zählerstandes mit dem Zielzählerstand, solange der kleiner ist --> das Dosierventil öffnen
- wenn der Zählerstand >= dem Zielzählerstand ist (oder die Abfüllung abgebrochen werden soll), dann ist die Abfüllung beendet (und das Dosierventil ist geschlossen)
Code:
Nur leider ist Wert = Real und Vorgabe = Word und er möchte das nicht konvertieren.
Der Eingabewert Vorgabe sollte INT sein, nicht WORD. Mit WORD kann man nicht rechnen.
Zum Konvertieren von Datentypen gibt es <typ>_TO_<typ> Konvertierungen, z.B. INT_TO_REAL, REAL_TO_INT oder TRUNC.
Harald