Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: 3 mal Hupen

  1. #1
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard


    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.
    Geändert von Bambam (05.08.2010 um 15:43 Uhr)
    Zitieren Zitieren 3 mal Hupen  

  2. #2
    Registriert seit
    01.09.2008
    Ort
    Berlin
    Beiträge
    172
    Danke
    51
    Erhielt 51 Danke für 44 Beiträge

    Standard

    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

  3. #3
    Bambam ist offline Benutzer
    Themenstarter
    Registriert seit
    04.08.2010
    Beiträge
    60
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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?
    Geändert von Bambam (05.08.2010 um 17:07 Uhr)

  4. #4
    Registriert seit
    01.09.2008
    Ort
    Berlin
    Beiträge
    172
    Danke
    51
    Erhielt 51 Danke für 44 Beiträge

    Standard

    Ja, "=>" dient der Zuweisung von Variablen auf Ausgängen von Funktionsblöchen wärend des Aufrufs.

    Meinst du diese Stelle:

    Zitat Zitat von Bambam Beitrag anzeigen
    (*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.

  5. #5
    Registriert seit
    01.09.2008
    Ort
    Berlin
    Beiträge
    172
    Danke
    51
    Erhielt 51 Danke für 44 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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);

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •