Mit einem Signal zwei Geräte abwechselnd ansteuern

ThG

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einem Signal zwei Geräte abwechselnd ansteuern (gelöst)

Hallo

Als Newbie in der Programmierung und damit auch hier im Forum erlaube ich mir direkt mal eine Frage mitzubringen.
Vermutlich ist es mal wieder ganz einfach, aber ich komme einfach zu keiner sinnvollen Lösung.

Derzeit programmiere ich in ABB Freelance (mit FBS) eine kleine Überpumpstation. Sie ist mit zwei redundanten Pumpen ausgestattet. Die Steuersignale von zwei Levelsensoren sind binär und sagen nur "Pumpe ein" und "Pumpe aus". In der bisherigen Programmierung springt die zweite Pumpe (P_2) nur an wenn die erste (P_1) -aus welchen Gründen auch immer- nicht funktioniert. Damit steht sie im Optimalfall monatelang ungenutzt herum. Und steht sich so kaputt. Das ist doof.

Nun möchte ich gerne, dass bei jedem neuen Schalten zwischen den Pumpen hin- und hergeschaltet wird. Also: Einschaltsignal kommt -> P_1 schaltet ein -> P_1 pumpt -> Ausschaltsignal kommt -> P_1 schaltet ab -> Einschaltsignal kommt -> P_2 schaltet ein -> P_2 pumpt -> Ausschaltsignal kommt -> P_2 schaltet ab, dann wieder P_1 usw. usf.

Dafür habe ich auch eine theoretisch Lösung (professionell gezeichnet in MS Paint und hier angehängt). Nun finde ich leider keinen Baustein mit dem ich die Umschaltung hinbekomme und an schlauen Ideen wie ich es mit Basisbausteinen zusammenstricke hapert es auch.

Wenn jemandem etwas dazu einfällt bin ich auf jeden Fall äußerst dankbar.

Vielen Dank und schönen Gruß
ThorstenWechselschaltung_Pumpen.png
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ganz Simpel in "Pseudocode"

Wenn Flanke von Startsigal DANN Invertiere Startmerker

Wenn Du weißt wie man eine Flanke bildet und wie man ein Signal invertiert kommst Du damit klar.

Den Startmerker kannst Du dann ganz einfach verwenden:

Startmerker = FALSE -> Punke 1
Startkerker = TRUE -> Pumpe 2

Grüße

Marcel
 
Hallo

Danke erstmal für die schnellen Antworten.
Leider kann ich mit beiden nichts rechtes anfangen.
@ marlob:
Ist der Stromstoßschalter das was ich in diesem Fall brauche? Ich habe den Stromstpßschalter-Artikel nun dreimal gelesen und ihn dreimal nicht verstanden.
@ Marcel:
Bei Flanke bilden wird's schon dünn
Signal invertieren, dafür gibt's bestimmt einen fertigen Baustein. Den werde ich mal suchen.

Gruß
Thorsten
 
Zusammengefasst war das so gemeint:
Der Stromstossschalter oder T(oggle)-FlipFlop, ist ein 1-Bit-Speicher, der mit jedem Impuls (daher Flankenauswertung) am Eingang seinen Zustand ändert:
Anfangszustand : Ausgang = 0
1. Impuls : Ausgang = 1
2. Impuls : Ausgang = 0
3. Impuls : Ausgang = 1
usw.

Den Stromstossschalter/T(oggle)-FlipFlop kannst du anhand des Artikel programmieren. Evtl. gibts den in der Software als fertigen Baustein, ich kenne die ABB-SW nicht.

Also:
Signal "pump" wird 1. Mit der steigenden Flanke von "pump" ändert das T-FlipFlop seinen Zustand von 0 auf 1. UND-verknüpft mit "pump" wird damit Pumpe 1 eingeschaltet.
Wird "pump" wieder 0, bleibt der Zustand des T-FlipFlop erhalten, aber aufgrund des UND geht Pumpe 1 aus.

Signal "pump" wird wieder 1. Das T-FlipFlop ändert seinen Zustand von 1 auf 0. Dieses Signal invertiert und UND-verknüpft mit "pump" schaltet Pumpe 2 ein.
Wird "pump" wieder 0, bleibt der Zustand des T-FlipFlop erhalten, aber aufgrund des UND geht Pumpe 2 aus.

Signal "pump" wird wieder 1. Mit der steigenden Flanke von "pump" ändert das T-FlipFlop seinen Zustand von 0 auf 1. UND-verknüpft mit "pump" wird damit Pumpe 1 eingeschaltet.
Wird "pump" wieder 0, bleibt der Zustand des T-FlipFlop erhalten, aber aufgrund des UND geht Pumpe 1 aus.

usw.

Invertierung und Flankenauswertung sind einfache Operationen, die sind bestimmt in der ABB-SW drin.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Geht auch ohne Flanken und ohne Stromstossschalter. Einfach nur merken, welche Pumpe zuletzt an war:
Code:
                       zuletztMerker
              +---+      +------+
         Q_P1-| & |      |  SR  |
              |   |------|S    Q|-
  Startsignal-o   |      |      |
              +---+      |      |
                         |      |
              +---+      |      |
         Q_P2-| & |      |      |
              |   |------|R     |
  Startsignal-o   |      +------+
              +---+

              +---+       Q_P1
  Startsignal-| & |      +---+
              |   |------| = |
zuletztMerker-o   |      +---+
              +---+

              +---+       Q_P2
  Startsignal-| & |      +---+
              |   |------| = |
zuletztMerker-|   |      +---+
              +---+

Harald
 
Hallo Gleichstromer

Fast so habe ich es gemacht. Allerdings habe ich anstatt des T-FlipFlops einen Trigger für die ansteigende Flanke verwendet.
Funktioniert ganz prima, wenn -ja wenn- der blöde Trigger mal seinen Zustand am Ausgang beibehalten würde. Leider kann ich in der Parametrierung aber nur einstellen für wie viele Zyklen der Zustand beibehalten werden soll (und damit ist es dann ja eher ein Timer).
T-FlipFlop oder Toggle-FlipFlop kennt mein Programm nicht. Ich werde mal googlen ob der noch nen anderen Namen hat.

Die Sache mit dem Merker klingt auch ganz interessant. Nur ist das Problem ein ähnliches: ich weiß nicht wie so ein Merker aussieht und im Handbuch taucht das Wort nur einmal auf 700 Seiten auf (leider in einem urst komplizierten Baustein)

Aber das krieg ich noch raus. Den Rest hab ich ja auch irgendwie zusammengemogelt.

Schönen Gruß
Thorsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Sache mit dem Merker klingt auch ganz interessant. Nur ist das Problem ein ähnliches: ich weiß nicht wie so ein Merker aussieht
Die Bezeichnung "Merker" muß man nicht so eng sehen, ist aber eine gute umgangssprachliche Bezeichnung für dessen Aufgabe. Gemeint ist ganz allgemein eine Variable, die einen Wert speichern (sich "merken") soll. Meistens einen boolschen Zustand. In meinem Programmbeispiel ist das eine Variable mit Datentyp BOOL. Und weil sich die Variable ihren Wert merken soll darf sie nicht in temporärem Speicher (z.B. Stack) liegen. Mein RS-Flipflop "zuletztMerker" funktioniert wie das RS-Flipflop "FF_Level" in Deinem Programm.


Flankenerkennung in Kombination mit einem XOR war der Trick (hier gefunden: http://www.sps-lehrgang.de/stromstossschalter/)
Da steht im Prinzip das gleiche wie in dem Artikel auf den marlob verlinkt, nur irgendwie verständlicher.
Für das XOR gibt es in der Tat viele Erklärungen, welche mehr oder weniger verständlich sind.
Hier eine weitere von mir: "Bei einem XOR mit zwei Eingängen bestimmt der eine Eingang, ob das Signal des anderen Eingangs direkt oder negiert durchgeschaltet wird."

Wenn der Ausgang des XOR auf den zweiten Eingang zurückgeführt wird, dann ist das quasi wie eine Selbsthaltung, solange der erste Eingang 0 ist. Wird der erste Eingang 1 dann wird der zurückgekoppelte Ausgang negiert an den Ausgang gegeben. Damit der Ausgang nur einmal negiert wird, darf das Signal am ersten Eingang nur genau 1 mal (1 Zyklus lang) 1 sein. Dafür sorgt üblicherweise eine Flankenerkennung mit z.B. R_TRIG. So wird aus der Kombination R_TRIG + XOR ein Stromstossschalter.


Anhang anzeigen 32379

Gibt's daran aus technischer Sicht irgend etwas ganz gravierendes auszusetzen?
Nein. Das kann man so machen, das ist korrekt so.

Harald
 
Die gleiche Frage wurde hier schon öfter diskutiert und in mehrereb Threads kam dann die Frage auf, ob das Sinn macht. Wenn beide Pumpen im Wechsel laufen, verschleißen beide etwa genauso schnell und sind beide etwa gleichzeitig an dem Punkt, an dem sie ausfallen. In diesem Fall hast Du unter Umständen keine Reserve mehr. Sinnvoller wäre eventuell, die eine Pumpe zu nutzen bis sie ausfällt und dann die andere bis sie ausfällt, dann wieder die erste.
 
Zurück
Oben