# Mit einem Signal zwei Geräte abwechselnd ansteuern



## ThG (7 April 2016)

*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ß
Thorsten


----------



## marlob (7 April 2016)

Du suchst warscheinlich einen Stromstossschalter:
Mit Standardbausteinen:
http://www.sps-forum.de/faq/34398-stromstossschalter.html

Solche Bausteine solltest du in ABB Freelance auch finden


----------



## Matze001 (7 April 2016)

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


----------



## ThG (7 April 2016)

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


----------



## Gleichstromer (7 April 2016)

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.


----------



## PN/DP (7 April 2016)

Geht auch ohne Flanken und ohne Stromstossschalter. Einfach nur merken, welche Pumpe zuletzt an war:

```
zuletztMerker
              +---+      +------+
         Q_P1-| & |      |  SR  |
              |   |------|S    Q|-
  Startsignal-o   |      |      |
              +---+      |      |
                         |      |
              +---+      |      |
         Q_P2-| & |      |      |
              |   |------|R     |
  Startsignal-o   |      +------+
              +---+

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

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

Harald


----------



## ThG (7 April 2016)

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


----------



## ThG (7 April 2016)

Ha geknackt!
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.




Gibt's daran aus technischer Sicht irgend etwas ganz gravierendes auszusetzen?

Schönen Gruß
Thorsten


----------



## PN/DP (8 April 2016)

ThG schrieb:


> 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.




ThG schrieb:


> 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.




ThG schrieb:


> 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


----------



## M-Ott (8 April 2016)

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.


----------

