Einfache Tastersteuerung für eine LED über ST

marmi86

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem: Ich würde gerne mit ein und demselben Taster eine LED an und wieder ausschalten, das ganze soll in ST programmiert werden. Den Taster entprelle ich über eine TON Funktion.Wenn ich meinen Taster jedoch lange gedrückt halte geht das Programm für den gesamten Zeitraum immer wieder die If-Abfrage durch und es ist am Ende Zufall ob ich die Lampe an oder aus bekomme.
Hier mein Quelltext:

Code:
PROGRAM test
VAR
   Taster1 AT %I*: BOOL;
   Lampe1 AT %Q*: BOOL;
    
    time_Lampe1:TON;
    status_Lampe1: BOOL;
 
END_VAR



timer_Lampe1(IN:= Taster1 , PT:=T#0.5S , Q=>status_Lampe1 , ET=> );

IF  Taster1=TRUE  AND  status_Lampe1=TRUE   THEN

        IF Lampe1=TRUE THEN
            Lampe1:=FALSE;
            ELSE
            Lampe1:=TRUE;


        END_IF
END_IF
 
Warum nimmst du den Timer ? Hat das etwas mit Funktionen in der Zukunft zu tun ? Finde Tön ist hier nicht geeignet. Würde da eher nen Impuls nutzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ichwürde es (anlehnend an den schon vorgegebenen Code) so machen :
Code:
PROGRAM test
VAR
   Taster1 AT %I*: BOOL;
   Lampe1 AT %Q*: BOOL;
    
    timer_Lampe1:TON;
    hm_time: BOOL;
 
END_VAR



timer_Lampe1(IN:= Taster1 , PT:=T#0.5S);

IF  timer_Lampe1.Q and not hm_Time  THEN
     Lampe1 :=not Lampe1 ;
END_IF ;

hm_Time := timer_Lampe1.Q
Gruß
Larry
 
Moin
Ich würde das über die Flanke machen, also ein R_TRIG oder F_TRIG nehmen.
Je nachdem ob beim drücken oder beim loslassen geschaltet werden soll.
Gruß Erik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Erik:
eine wie von die beschriebene Flankenauswertung würde dir aber bei einem prellenden Schalter nichts nützen - da bräuchtest du da schon einen Timer (und dazu die Flanke, wie in meinem Beispiel).

Gruß
Larry
 
Zurück
Oben