Taster auf einem Touchscreen programmieren, welchen man auch sperren kann

und gebt keine unnötigen Kommentare ab

Das gehört in diesem Forum zum guten Ton :)

Rück mal deinen Code für den Langen tastendruck raus, dann sehen wir was dort nicht funktioniert.
Mit der Visu kann ich nicht helfen, ich benutze diese nicht/kaum.

Ach, und willst du den Lichtschalter ein- und ausschalten im Sinne von ein- und ausblenden oder willst du das Licht mit diesem Taster ein- und ausschalten?

Gruß Flo
 
Beim langen Tastendruck... Soll bzw. Darf die Taste dann nochmal dein Licht schalten und dann gesperrt werden oder soll erst auf den langen Tastendruck geprüft wenn und wenn der FALSE ist soll geschaltet werden ? Ist deine Visu Taste ein Taster oder wird der Schalter getoggelt ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum ersten Teil Deines Programms: IF THEN ELSE ist die Stärke von ST, das heisst aber nicht, dass ein Programm umso besser wird, je mehr man davon einbaut. Warum nicht einfach
Code:
IF taster_flanke.Q
THEN
   schaltfkt:=not schaltfkt;
END_IF
Zum zweiten Teil: Du musst den Timer-FB auch aufrufen, das würde dann so aussehen:
Code:
timer(IN:=taster,
         PT:=t#3s);
taster_sperre:=timer.Q;
Ich bezweifle aber, dass die gewünschte Funktion so aussieht. Beschreib mal etwas genauer, wie die Tastensperre arbeiten soll.
 
Ich würde es dann so versuchen
Code:
IF taster THEN
timer(IN:=Taster AND NOT timer.Q, PT:=t#3s);
END_IF
IF timer.Q THEN
 taster_sperre:=NOT taster_sperre;
END_IF
Dann hast du die selbe struktur wie oben vorgeschlagen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Sperre soll also genauso funktionieren wie die Schaltfunktion, nur eben nicht sofort beim Druck auf den Taster, sondern erst nach 3 Sekunden. Wie sowas geht, hast Du ja schon im ersten Teil Deines Programms geschrieben. Dann brauchst Du doch nur den Ausgang des Timer-FB's auf einen weiteren Trigger-FB geben und mit dessen Ausgang die Sperre umschalten.

Etwas zu spät gepostet. Die All in one-Lösung von Dr. MirakulixX ist natürlich eleganter. Aber auf jeden Fall den Einwand von KingHelmer beachten. Das
Code:
timer(IN:=taster and not timer.Q,
muss aber schon so bleiben, damit timer.Q nur für einen Programmzyklus TRUE wird.
 
Zuletzt bearbeitet:
Lass das zweite if komplett weg und nimm "taster" als eingang des Timers.

Timer(
In:= taster
Pt:= t#:s
)

Taster_sperre := timer.q

Oder gibt es einen grund warum der timer bedingt aufgerufen wird?


Sent from my iPhone using Tapatalk
 
Das Problem bei Dr. MirakulixX Programmierung ist, dass wenn die Sperre einrastet man nur einmal kurz auf den taster drücken kann und die Sperre ist aufgehoben...

Außerdem geht die schaltfkt weiterhin auf TRUE was eigentlich nicht sein darf bei aktivierter tasten_sperre.

Außerdem toggelt die tasten_sperre ganze zeit zwischen TRUE und FALSE wenn ich einmal kurz den Taster betätige?!

Danke übrigens schonmal^^
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Allein der Name "tasten_sperre" für Deine Variable bewirkt recht wenig, Du musst sie schon beim Umschalten der Schaltfunktion abfragen.
Code:
IF taster_flanke.Q and not tasten_sperre
THEN
   schaltfkt:=not schaltfkt;
END_IF
Um dem Problem beim Umschalten der Tastensperre beizukommen, poste bitte mal Deinen aktuellen Code.
 
Code:
taster_flanke(CLK:=taster);
IF((taster_flanke.Q)AND(schaltfkt=0))THEN
    schaltfkt:=1;
ELSE IF ((taster_flanke.Q)AND(schaltfkt=1))THEN
    schaltfkt:=0;
END_IF
END_IF
(*IF taster_flanke.Q
THEN
   schaltfkt:=NOT schaltfkt;
END_IF*)

IF taster THEN
timer(IN:=Taster AND NOT timer.Q, PT:=t#3s);
END_IF
IF timer.Q THEN
 taster_sperre:=NOT taster_sperre;
END_IF
Code:
PROGRAM PLC_PRG
VAR
    taster:BOOL;
    schaltfkt:BOOL;
    taster_flanke:F_TRIG;
    taster_sperre:BOOL;
    timer:TON;
END_VAR

mir ist außerdem aufgefallen, dass der taster_sperren befehl sich immer verändert nachdem er ein paar mal richtig läuft... nur dann schaltet er sich mit einem einzelnen kurzen taster druck wieder um...
 
Zuletzt bearbeitet:
Ohne es im Detail geprüft zu haben, denke ich, dass der bedingte Aufruf des Timers den Ärger macht. Dafür ist der TON eben nicht gedacht. Ein Weglassen der "IF taster THEN"-Bedingung vor dem Timer-Aufruf würde aber ein anderes Problem bringen. Wenn der Taster dann für längere Zeit gedrückt bleibt, würde die Sperre immer nach jeweils 3 Sekunden umgeschaltet.
Dann wohl doch besser mein erster Vorschlag mit dem zweiten Trigger-FB.
Code:
timer(IN:=taster,
        PT:=t#3s);
timer_trig(Clk:=timer.Q);  (* Weiterer R_TRIG für den Timer-Ausgang *)
IF timer_trig.Q
THEN
   tasten_sperre:=not tasten_sperre;
END_IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mal bitte meinen Code umschreiben, wie du es nun meinst, weil ich gerade leicht konfus bin. Wäre super und danke für die schnelle Antwort :D
 
Also gut, noch mal im Zusammenhang, aber ungetestet:
Code:
PROGRAM PLC_PRG
VAR
    taster:BOOL;
    schaltfkt:BOOL;
    taster_flanke:R_TRIG;   (* Hier war vorher ein F_TRIG, aber Du willst doch die steigende Flanke, oder? *)
    taster_sperre:BOOL;
    timer:TON;
    timer_trig:R_TRIG;
END_VAR

(* Code *)
taster_flanke(CLK:=taster);
IF taster_flanke.Q and not tasten_sperre
THEN
   schaltfkt:=NOT schaltfkt;
END_IF

timer(IN:=taster,
        PT:=t#3s);
timer_trig(Clk:=timer.Q);  (* Weiterer R_TRIG für den Timer-Ausgang *)
IF timer_trig.Q
THEN
   tasten_sperre:=not tasten_sperre;
END_IF
 
Vielen Vielen Dank :)

und jetzt wo du gerade dabei bist ha(s)t du/jemand Ideen zu der 2. und 3. Möglichkeit?
Also ein Extramenü mit Abfrage ob man fortfahren will.

mfg lasse
 
Zuletzt bearbeitet:
Zurück
Oben