# 1 Taster -> 2 Ausgänge



## Kayle (23 September 2016)

Hallo zusammen,

ich stehe gerade auf dem Schlauch. Ich habe einen Taster und möchte in Codesys damit abewechselnd 2 Ausgänge schalten. Also Taster gedrückt = Ausgang 1 an. Wenn Taster nochmal gedrückt soll Ausgang 1 aus und Ausgang 2 an usw. Ich komme aber grad echt nicht dahinter wie ich das in CFC lösen kann. Kann mir jemand bitte kurz auf die Sprünge helfen ?

Danke
Gruß Kay


----------



## holgermaik (23 September 2016)

Stichwort Stromstoß Schalter


----------



## Kayle (23 September 2016)

holgermaik schrieb:


> Stichwort Stromstoß Schalter



Danke. Hilft aber nicht. Stromstoßschalter hat 1 Eingang, 1 Ausgang. Ich brauche 1 Eingang, 2 Ausgänge


----------



## PN/DP (23 September 2016)

Kayle schrieb:


> Stromstoßschalter hat 1 Eingang, 1 Ausgang. Ich brauche 1 Eingang, 2 Ausgänge


Wie wärs mit einem einfachen Konstrukt ala "Ausgang2 := NOT Ausgang1"?



Kayle schrieb:


> Also Taster gedrückt = Ausgang 1 an. Wenn Taster nochmal gedrückt soll Ausgang 1 aus und Ausgang 2 an usw.


Was soll nach dem "_usw._" kommen?

Auf unvollständige Fragen gibt es gewöhnlich unvollständige Antworten 

Harald


----------



## Senator42 (23 September 2016)

> Was soll nach dem "_usw._" kommen?

das Orakel sagt: Beide Ausgänge aus.
(diese Information ist von 1986, Delphi,Gr.)
*ROFL*


----------



## Kayle (23 September 2016)

Hi,

jawoll nach Ausgang 1 aus, Ausgang 2 an soll dann beide Ausgänge aus sein. Dann wieder von vorne.

Gruß Kay


----------



## PN/DP (23 September 2016)

Kennt CFC Zähler und Vergleicher? Dann mit einem Zähler 0-1-2-0-1-2-0-... "usw." zählen.

Harald


----------



## KLM (23 September 2016)

Viele Wege führen nach Rom. Zähler, State Machine oder Flankenerkennung. Für letzteres ein FB in ST.

FUNCTION_BLOCK TriggerOutputs
VAR_INPUTxIN: BOOL;​ END_VAR
VAR_OUTPUTxQ1: BOOL;
    xQ2: BOOL;​ END_VAR
VARfbRTIn: R_TRIG;
    fbFTQ2: F_TRIG;​ END_VAR
----------------------------------

fbRTIn(CLK:=xIN);
IF fbRTIn.Q THEN(* wechsel zwischen Ausgängen bei pos. Flanke des Eingangs *)
    xQ2 := xQ1 AND NOT xQ2;
    xQ1 := NOT xQ1 AND NOT xQ2;

    (* bei Ausgänge aus, wenn zuvor Q2 aktiv *)
    fbFTQ2(CLK:=xQ2);
    IF fbFTQ2.Q THEN​xQ1:=FALSE;​END_IF​ END_IF


----------



## Kayle (23 September 2016)

PN/DP schrieb:


> Wie wärs mit einem einfachen Konstrukt ala "Ausgang2 := NOT Ausgang1"?
> 
> 
> Was soll nach dem "_usw._" kommen?
> ...


Das klingt gut. Werde ich probieren. Danke


Gesendet von meinem Elephone P8000 mit Tapatalk


----------



## PN/DP (23 September 2016)

Kayle schrieb:


> nach Ausgang 1 aus, Ausgang 2 an soll dann beide Ausgänge aus sein.





Kayle schrieb:


> PN/DP schrieb:
> 
> 
> > Wie wärs mit einem einfachen Konstrukt ala "Ausgang2 := NOT Ausgang1"?
> ...


Das klingt nicht gut, brauchst Du garnicht erst probieren, weil in Deiner Aufgabenstellung zum Schluß "Ausgang1 = Ausgang2 = 0" sein soll. Also nix mit "Ausgang2 := NOT Ausgang1"

Harald


----------



## hucki (23 September 2016)

Den Code von KLM kann man noch vereinfachen:

```
[COLOR=#333333]FUNCTION_BLOCK TriggerOutputs
[/COLOR]
[COLOR=#333333]VAR_INPUT
[/COLOR][COLOR=#333333]  xIN: BOOL;[/COLOR]
[COLOR=#333333]END_VAR
[/COLOR]
[COLOR=#333333]VAR_OUTPUT
[/COLOR][COLOR=#333333]  xQ1: BOOL;
  xQ2: BOOL;[/COLOR]
[COLOR=#333333]END_VAR
[/COLOR]
[COLOR=#333333]VAR
[/COLOR][COLOR=#333333]  fbRTIn: R_TRIG;
[/COLOR][COLOR=#333333]END_VAR[/COLOR]


  [COLOR=#333333]fbRTIn(CLK:=xIN);
[/COLOR]  xQ1 := [COLOR=#3E3E3E]fbRTIn.Q AND NOT xQ2 XOR xQ1;[/COLOR]
  xQ2 := [COLOR=#3E3E3E]fbRTIn.Q AND NOT xQ1 XOR xQ2;
[/COLOR]

END_FUNCTION_BLOCK
```

PS: Wie man sieht, war da das Stichwort "Stromstoßschalter" von holgermaik nicht verkehrt. Sind einfach 2 Stück davon mit gegenseitiger Abfrage.


----------



## PN/DP (23 September 2016)

hucki schrieb:


> Den Code von KLM kann man noch vereinfachen


Ich würde es ebenfalls nicht so umständlich machen und hätte es mit ST spontan so formuliert:

```
FUNCTION_BLOCK TriggerOutputs
VAR_INPUT
  xIN: BOOL;
END_VAR
VAR_IN_OUT
  xQ1: BOOL;
  xQ2: BOOL;
END_VAR
VAR
  fbRTIn: R_TRIG;
  xM2 : BOOL;
END_VAR

  fbRTIn(CLK:=xIN);
  IF fbRTIn.Q THEN
    (* bei pos. Flanken des Eingangs eine 1 durch die Ausgänge schieben *)
    xM2 := xQ2;
    xQ2 := xQ1;
    xQ1 := NOT xQ1 AND NOT xM2;
  END_IF
END_FUNCTION_BLOCK
```

Der Code von hucki hat noch den Vorteil, daß er sich leicht in das eigentlich gewünschte CFC umformen läßt.

So ein Code wie der von KLM ist eigentlich typisch für die "Hochsprachenprogrammierung": ohne große Vorüberlegungen schnell lostippen und beim Test festgestellte Logik-Bugs einfach durch zusätzliche Spezial-Behandlungen korrigieren statt zu beseitigen. IF...THEN kosten ja (theoretisch) nichts.

Und Mehrfachzuweisungen an Ausgänge sowie Ausgänge rücklesen sind in Multitasking-Anwendungen nicht gerade "saubere" Lösungen. Da reicht schon, daß die Visu jederzeit auf Variablen zugreifen kann und schon werden die Visu-Anzeigen "unmotiviert" flackern.

Harald


----------



## egro (24 September 2016)

Im CFC geht's so...


----------



## Kayle (24 September 2016)

Guten Morgen und vielen Danke für Eure Hilfe. Mit dem Taster will ich einen Motor, besser gesagt die Relais davor umpolen. Ich werde Eure Vorschläge gleich ausprobieren.


----------



## oliver.tonn (24 September 2016)

Den Vorschlag von egro kann man noch etwas vereinfachen. Das Set und Reset kann weggelassen werden, denn sobald die Bedingung (z.B. EQ 1) nicht mehr erfüllt ist geht der Ausgang automatisch auf FALSE, somit kann das dritte EQ ganz wegfallen.

Von irgendwas mit Internetzugang gesendet.


----------



## egro (24 September 2016)

@Oliver.tonn:
Da hast du vollkommen recht.

...war aber auch schon spät!!!

PS: Unbedingt darauf achten, dass du eine Pause zwischen dem Umschalten einprogrammierst!
Einen Motor *direkt* von einer Drehrichtung auf die Andere umschalten kann in die Hose gehen...


----------



## Senator42 (24 September 2016)

das CFC
@Oliver.tonn  + Kayle 

auf welchem Wert (0..3) steht der Zähler nach Netz aus/ein ?  (remanez)
(ggf. einen Reset mit erstlauf-bit-nach-netzein)
Sonst geht viell. der Ausgang gleich an, nach netztein.


----------



## oliver.tonn (24 September 2016)

Auf 0, Remanenz gibt es bei Zählern meine ich nicht, nur bei Variablen.

Von irgendwas mit Internetzugang gesendet.


----------



## Kayle (25 September 2016)

Senator42 schrieb:


> das CFC
> @Oliver.tonn  + Kayle
> 
> auf welchem Wert (0..3) steht der Zähler nach Netz aus/ein ?  (remanez)
> ...


Moin,

wäre nicht dramatisch wenn nach Netz ein der Motor anläuft. Es handelt sich bei dem Motor um eine 8v Lüfterklappe. Aber ich werde das mal simulieren. Danke für den Hinweis.

Gruß Kay

Gesendet von meinem Elephone P8000 mit Tapatalk


----------

