Betriebsart wechseln

woody

Level-1
Beiträge
68
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus allerseits. ...
Ich habe in winsps Programm für eine regenwassernützungsanlage erstellt.
Es ist kein reales Projekt .

Die Anlage besteht aus 3 Schwimmer Schalter im regen wassertank eine pumpe und ein Trinkwasser Ventil für den Fall das wenn im Tank zuwenig Wasser vorhanden ist immer brauchwssser zur Verfügung steht.

Ich hab jetzt einen FC für die pumpe und einen FC für das Ventil erstellt sowie den OB 1 für den Aufruf. ....

Mein Problem ist jetzt das ich umschalten muss zwischen regenwasser und Trinkwasser.

Wie lege ich jetzt diese Betriebsart fest?
Lege ich jetzt nochmal einen FC an oder macht man so etwas im OB1 ?

Grüße
 
Warum willst du eine Betriebsart wechseln? (unter Betriebsart versteht man normalerweise: Automatik, Hand, Einrichten, Test, . . .)

Bei dir soll ja im Automatikbetrieb beim unterschreiten des unteren Schwimmerschalters bis zum Mittleren aufgefüllt werden (oder hab ich das falsch verstanden?)

Kannst im OB1 beide FC aufrufen
Wenn der Pegel über dem unteren Schwimmerschalter ist passiert ja beim Trinkwasserventil nichts, da arbeitet ja die Pumpe.
Wenn die Pumpe kein Wasser fördert (wie erkennst du das eigentlich? nicht dass die zu lange trocken läuft) fällt der Pegel unter den unteren Schalter öffnet dein TW Ventil und wenn der mittlere Schwimmerschalter überschritten wird schließt du es wieder.

Sind eigentlich 2 getrennte Funktionen, die jeweils so ausprogrammiert sein sollten, dass nichts passiert.

Alternative wäre natürlich:
Du hast einen separaten FC der im OB1 immer aufgerufen wird der entscheidet: Pumpbetrieb oder Trinkwasserbetrieb.
Dann kannst du im OB1 abhängig von dieser Grundlage den entsprechenden FC aufrufen (und dann wären wir auch bei deinen "Betriebsarten" :) Würde das aber der Verwechslungsgefahr wegen dann eher "Zustand" oder ähnlich nennen.
 
Wenn der M0.0 gesetzt ist wird durch den Sprungsbefehl das "Ventil_Wasserzulauf" nicht mehr abschaltet, ist das so gewollt?
Wobei: auch wenn es gewollt sein sollte, schön ist das nicht.
 
Zuletzt bearbeitet:
ist dir klar das "Ventil Wasserzulauf" stehen bleibt wenn M0.0 True wird und Das Ventil grad offen ist? IMHO kannst du hier gut auf Sprünge verzichten, das macht die Sache einfacher nachvollziehbar. Ausserdem besteht weniger die Gefahr Verknüpfungsergebnisse zu verschleppen (Je nach Sprungbefehl).

edit: Jetzt war Hohlkörper schneller :)

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der M0.0 gesetzt ist wird durch den Sprungsbefehl das "Ventil_Wasserzulauf" nicht mehr abgeschaltet, ist das so gewollt?
Wobei: auch wenn es gewollt sein sollte, schön ist das nicht.

Auch, denn das Netzwerk 2 ist sowieso bedenklich, der A0.0 ist nur vom E0.1 abhängig- was der E0.2 macht ist egal.
Das sieht man auch am grünen Text daneben.... der macht nicht viel Sinn.
 
Zuletzt bearbeitet:
Hi Danke für das Feedback. ...
Werde das nachher noch mal überarbeiten!

Das M0.0 das Trinkwasser überspringt soll ja richtig sein.

Also ich Schilder nochmal den Ablauf. ...
Wenn der regenwasser Behälter voll ist wird durch den Taster das Trinkwasser übersprungen und die pumpe arbeitet in Abhängigkeit des füllstands um den druckspeicher zu füllen je nachdem wieviel brauchwssser entnommen wird.
Wenn dann der trockenlaufschutz aktiv wird signalisiere ich ja dass der Behälter leer ist. Da wird dann automatisch auf Trinkwasser umgestellt um den Behälter wieder zu füllen.
Wenn es wieder regnet kann man wieder manuell auf regenwasser umstellen.

Ich setze mich aber nochmal ran ......
 
Hallo also habe mir jetzt nochmals gedanken gemacht und hoffe es jetzt besser gemacht zu haben....


Netzwerk 1

U "Regenwasser" //Wenn der Taster gedrückt wird
S M 0.0 //wird der Merker gesetzt
UN "S4 Trockenlaufschutz EIN" //wenn umgeschaltet wird
R M 0.0 //wird der Merker zurückgesetzt
Netzwerk 2

UN M 0.0 //hat der Merker 1 Signal für Regenwasser
UN "S3 Twasser EIN/Trocken A" //wenn der Füllstand sinkt
S "Ventil Wasserzulauf" //öffnet das Ventil um den Behälter zu füllen
ON "S2 Trinkwasserzulauf AUS" //wenn der Behälter wieder voll ist
O M 0.0
R "Ventil Wasserzulauf" // Trinkwasser abschalten
Netzwerk 3

U "S1 Füllstand MAX" //Wenn der Druckspeicher Leer meldet
U "S3 Twasser EIN/Trocken A" //und der Trockenlaufschutz AUS ist
O
U "S1 Füllstand MAX" //oder wenn der Druckspeicher Leer meldet
U M 0.0 //und Regenwasser angewählt ist
S "Wasserpumpe" //wird die Pumpe Eingeschaltet
ON "S1 Füllstand MAX" //Wenn der druckspeicher voll ist
ON "S4 Trockenlaufschutz EIN" //oder der Trockenlaufschutz Aktiv wird
R "Wasserpumpe" // wird die Pumpe abgeschaltet


grüsse
 
[CODENetzwerk 1

U "Regenwasser"
S M 0.0
UN "S4 Trockenlaufschutz EIN"
R M 0.0
Netzwerk 2

UN M 0.0
UN "S3 Twasser EIN/Trocken A"
S "Ventil Wasserzulauf"
ON "S2 Trinkwasserzulauf AUS
O M 0.0
R "Ventil Wasserzulauf"
Netzwerk 3

U "S1 Füllstand MAX"
U "S3 Twasser EIN/Trocken A"
O
U "S1 Füllstand MAX"
U M 0.0
S "Wasserpumpe"
ON "S1 Füllstand MAX"
ON "S4 Trockenlaufschutz EIN"
R "Wasserpumpe"

][/CODE]

ohne kommentare kann man es vielleicht besser lesen....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nene mit Kommentaren in Code TAGs lässt es sich viel beser lesen. Wieso machst du um M0.0 kein Symbol?

Ich hab den Code nicht auf fehler geprüft. Aber besser ist es.
Aber als Tip. Sobald der Code grösser wird, macht es manchmal Sinn Perperie zuerst auf eine Datenstruktur zu mappen. Dann kann man Rückmeldungen z.B. direkt so invertieren dass S1 Füllstand MAX z.B. dann erreicht ist wenn das Signal TRUE ist. Jetzt musst du dich immer im Programmcode drum kümmern ob etwas NC oder NO angeschlossen ist. Sowas kann man einmal im Programm beim Mapping abhandeln und kümmert sich danach nicht mehr drum. Man braucht sein Hirn ja noch für genügend anderes.

mfG René
 
Also ich hab den S1 und S2 extra NC gewählt wegen der drahtbruchsicherheit für den Fall das er mir die pumpe und das Trinkwasser Ventil noch abschalten kann.

Zu deinem Tipp ich weiß was du meinst. ...das macht es bestimmt einfacher. ....ich hab da großes Interesse dran das umzusetzen. ...da ich bis jetzt immer so kompliziert vorgegangen bin weiß ich jetzt nicht wie. ....
Wäre cool wenn man mir das zeigen kann
 
Mach ganz am Anfang einen FC in dem du die Eingänge behandelst.
Darin gehst du Eingang für eingang nach zB.:
U E0.0 (wenn du einen Öffner hast dann halt UN E0.0)
= MX.Y (oder schöner das ganze in einen DB schreiben)

E0.0 . . . sollte natürlich Symbolisch benannt werden.
Ebenso im DB die Bits benennen

Falls ein Eingang entprellt werden soll kann das auch hier erledigt werden.

Im rest des Programms greifst du dann auf die M oder DB bits zu.

Wenn du nun deine Schwimmerschalter hast, dann kannst du nun, unabhängig ob Öffner oder Schließer, davon ausgehen, dass dein Signal wenn das Wasser unter dem Schalter ist 0 ist und wenn der Schalter betätigt ist 1.
 
Hab es mal versucht aber leider klappt da gar nix. ..[emoji30]

Das hilft nicht weiter. Was klappt nicht?

Der Vorschlag mit Peripheriebereich ummappen geht etwa so.
In SCL
Code:
"HW_IO"."S3 Twasser EIN/Trocken A" :=  "S3 Twasser EIN/Trocken A"; // Zuweisung für Eingänge"HW_IO"."S1 Füllstand MAX" := NOT "S1 Füllstand MAX"; // Invertiert  DB Variable TRUE wenn wirklich Maximal erreicht
"HW_IO"."S2 Trinkwasserzulauf AUS" := NOT "S2 Trinkwasserzulauf AUS"; 
"HW_IO"."S4 Trockenlaufschutz EIN" := NOT "S4 Trockenlaufschutz EIN"; // DB Variable TRUE wenn wirklich Trocken


"Ventil Wasserzulauf" := "HW_IO"."Ventil Wasserzulauf"; // Zuweisung für Ausgänge

In AWL
Code:
      U     "S3 Twasser EIN/Trocken A"
      =     "HW_IO"."S3 Twasser EIN/Trocken A"


      UN    "S1 Füllstand MAX"
      =     "HW_IO"."S1 Füllstand MAX"
      UN    "S2 Trinkwasserzulauf AUS"
      =     "HW_IO"."S2 Trinkwasserzulauf AUS"
      UN    "S4 Trockenlaufschutz EIN"
      =     "HW_IO"."S4 Trockenlaufschutz EIN"


// Zuweisung für Ausgänge
      UN    "HW_IO"."Ventil Wasserzulauf"
      =     "Ventil Wasserzulauf"

Arbeiten im Programm tust du dann nur noch mit z.B. "HW_IO"."Ventil Wasserzulauf" nicht mehr mit der direkten Peripherie

Dein Code Könnte dann etwa so aussehen.
Code:
      UN    "HW_IO"."S1 Füllstand MAX"// Wenn Max nicht erreicht
      U(
      O     "HW_IO"."S3 Twasser EIN/Trocken A"// und Arschtrocken
      O     "Clock_10Hz"         // wozu?
      )
      S     "HW_IO".Wasserpumpe


      O     "HW_IO"."S1 Füllstand MAX"// Maximal Sensor ausgelöst
      O     "HW_IO"."S4 Trockenlaufschutz EIN"// oder Trockenlauf ausgelöst
      R     "HW_IO".Wasserpumpe  // Wasserpumpe zurücksetzen
 
servus....
also heute habe ich mich nochmals mit dem mapping ausernander gesetzt.

Gestern hatte nichts funktioniert weil das eine neu umstellung war für mich war. Konnte mir das invertieren noch nicht so richtig einprägen .....wo dann in meinem FC 2 dann nur müll raus kam.


das ist jetz mein neuer versuch....
Code:
FC 1
//Allgemeine Eingangsabfrage
2 UN "S1 Sensor Öffner"
2 = "Füllstand Max"
2 UN "S2 Sensor Öffner"
2 = "Trinkwasserzulauf AUS"
2 U "S3 Sensor Schliesser"
2 = "Trinkwasserzulauf EIN"
2 UN "S3 Sensor Schliesser"
2 = "Trockenlaufschutz AUS"
2 U "S4 Sensor Öffner"
2 = "Trockenlaufschutz EIN"

FC 2
//Betrieb nur mit Regenwasser!
Netzwerk 1
2 U "Taster Regenwasser" //Wenn der Taster gedrückt wird 
2 S "Umschalten" //läuft nur Regenwasser in den Druckspeicher 
2 U "Trockenlaufschutz EIN" //Wenn Schutz Aktiv
2 R "Umschalten" //wird das Umschalten zurückgesetzt 


Netzwerk 2
//Trinkwasser wird nur Eingeschaltet wenn kein Regenwasser mehr vorhanden ist .....
NOT Umschaltung
2 UN "Umschalten" //Wenn Umschalten nicht Aktiv ist 
2 UN "Trinkwasserzulauf EIN" //und der Füllstand im Behälter sinkt
2 S "Ventil Wasserzulauf" //öffnet das Ventil um den Behälter zu füllen 
2 O "Trinkwasserzulauf AUS" //wenn der Behälter wieder voll ist 
2 O "Umschalten" //oder wenn umgeschaltet wird
2 R "Ventil Wasserzulauf" //wird das Trinkwasser zurückgesetzt 


@a@0 <Ueberschrift von Netzwerk>
//Pumpe Arbeitet mit Regenwasser
bei NOT Umschaltung mit Trinkwasser!
2 UN "Füllstand Max" //und der Druckspeicher Leer meldet 
2 U(
2 ON "Trockenlaufschutz AUS" //und der Trockenlaufschutz AUS ist 
2 O "Umschalten" //Wenn das Umschalten Aktiv ist
2 )
2 S "Wasserpumpe" //wird die Pumpe Eingeschaltet 
2 O "Füllstand Max" //Wenn der druckspeicher voll ist 
2 O "Trockenlaufschutz EIN" //oder der Trockenlaufschutz Aktiv wird 
2 R "Wasserpumpe" // wird die Pumpe zurückgesetzt
 
Zuletzt bearbeitet:
Kurze Frage zum genannten Thema noch. ..
Wenn ich im FC 1 meine Eingänge gemappt habe.... muss ich dann im FC 2 meine merker als IN deklarieren?
 
Nein. Wenn du auf Globale Speicher gemappt hast. Also Merker oder vorzugsweise DBs.
Das Mapping mach ich aber in einem FB. Da hast du dann noch Möglichkeiten Timer und dergleichen reinzuinstanzieren (Um z.B. Prellen zu unterdrücken).
 
Zurück
Oben