3 mal Hupen

Bambam

Level-1
Beiträge
60
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie man aus dem Titel bereits erahnen kann möchte ich es drei mal Hupen lassen. Und zwar ist in einer Tür ein Kontakt eingebaut. Dieser hat die Funktionsweise eines Tasters.
Bisher habe ich es nur geschafft es einmal Hupen zu lassen, aber drei mal gelingt mir einfach nicht. Ich weiß nicht was ich noch versuchen soll.
Ich denke, dass es dafür sicherlich ein recht einfache Lösung geben wird, jedoch komme ich nicht drauf.
Ich Programmiere mit WinCat und in der Sprache ST.

Hier lasse ich es einmal Hupen:
trigTasterS559(CLK:=bE08_TasterS559Klingel);
tpKlingel(IN:=trigTasterS559.Q, PT:=t#5s);

IF tpKlingel.Q THEN
bA08_KlingelSignal := TRUE;

IF tpKlingel.Q = FALSE THEN
bA08_KlingelSignal := FALSE;
END_IF
END_IF

Habt vielen Dank im Voraus.
 
Zuletzt bearbeitet:
Hallo,

es gibt immer verschiedene Lösungswege. Aber ich denke du brauchst zwei Timer, einen für die Pulszeit und einen Für die Pausenzeit.
Ich hab mir das mal so gedacht:

Code:
VAR
    bA08_KlingelSignal: BOOL;
    bE08_TasterS559Klingel: BOOL;
    trigTasterS559: R_TRIG;
    count: INT;
    tpKlingel1: TON;
    tpKlingel2: TON;
END_VAR

______________________________

trigTasterS559(CLK:= bE08_TasterS559Klingel);

IF trigTasterS559.Q THEN
    count := 3;
END_IF

tpKlingel1(IN:= (count > 0 AND NOT tpKlingel2.Q)  , PT:=t#2s , Q=>bA08_KlingelSignal );
tpKlingel2(IN:= tpKlingel1.Q  , PT:=t#2s );

IF tpKlingel2.Q THEN
    count := count - 1;
END_IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab vielen Dank für deine Hilfe. Es funktioniert ...

Eine Frage hätte ich da noch was bedeutet => in Q=>bA08_KlingelSignal?
Ist das eine Zuweisung?

Ein Problem gibt es dann doch noch und das Problem habe ich häufig.
Wenn ich das so schreibe wie folgt schreibe:

(*Klingel*)
trigTasterS559(CLK:=bE08_TasterS559Klingel);
tpKlingel_0(IN:=trigTasterS559.Q, PT:=t#2s);

IF tpKlingel_0.Q THEN
bA08_KlingelSignal := TRUE;
END_IF

IF tpKlingel_0.Q = FALSE THEN
bA08_KlingelSignal := FALSE;
END_IF

(*Tuerklingel - 3mal*)
trigTasterS560(CLK:= bE09_TasterS560Tuerkontakt);

IF trigTasterS560.Q THEN
count := 3;
END_IF

tonKlingel_1(IN:= (count > 0 AND NOT tonKlingel_2.Q) , PT:=t#2s , Q=>bA08_KlingelSignal );
tonKlingel_2(IN:= tonKlingel_1.Q , PT:=t#2s );

IF tonKlingel_2.Q THEN
count := count - 1;
END_IF

funktioniert es nicht mehr. Ich vermute es liegt daran, dass für die Variable gleichzeitig zwei Zustände sind (TRUE & FASLE). Wie kann man so etwas elegant lösen?
 
Zuletzt bearbeitet:
Ja, "=>" dient der Zuweisung von Variablen auf Ausgängen von Funktionsblöchen wärend des Aufrufs.

Meinst du diese Stelle:

(*Klingel*)
trigTasterS559(CLK:=bE08_TasterS559Klingel);
tpKlingel_0(IN:=trigTasterS559.Q, PT:=t#2s);

IF tpKlingel_0.Q THEN
bA08_KlingelSignal := TRUE;
END_IF

IF tpKlingel_0.Q = FALSE THEN
bA08_KlingelSignal := FALSE;
END_IF

Ich nehme mal an die Klingel soll 2s lang an sein? Dann würde ich das so umsetzen:

Code:
trigTasterS559(CLK:=bE08_TasterS559Klingel);
tofKlingel_o(IN:=trigTasterS559.Q , PT:=t#2s , Q=>bA08_KlingelSignal);
Also als Timer einen TOF verwenden.
 
Oder wenn der Timer ein TP sein soll (wie von dir erst verwendet):

Code:
tpKlingel_0(IN:=bE08_TasterS559Klingel, PT:=t#2s , Q=>bA08_KlingelSignal);
 
Zurück
Oben