SWITCH_I nach CLICK_MODE

Begonnen von Homesps, 04. April 2012, 17:39:56

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Homesps

Hallo,

in meinem Projekt möchte ich einen Taster per CLICK_MODE dekodieren und dann damit einen SWITCH_I tasten. Dabei ist mir aufgefallen, dass das nicht funktioniert.

Meine Vermutung: SWITCH_I schaltet erst, wenn eine Flanke erkannt wurde UND das neue Signal länger als T_debounce (10ms) gehalten wird. CLICK_MODE schaltet seinen Ausgang aber nur für einen Zyklus auf TRUE und damit eventuell kürzer als 10ms. Somit reagiert SWITCH_I nicht. Dieses Verhalten wird im SWITCH_I als entprellen bezeichnet. Meiner Meinung nach sollte beim Entprellen aber die erste Flanke den Schaltvorgang auslösen und danach die Flankenerkennung eine Totzeit einlegen.

Ich habe mal versucht den SWITCH_I zu ändern, ohne das Funktionalität verlorengeht. Dabei habe ich meinen DBOUNCE-Baustein verwendet, den ich in einem anderen Thread vorgestellt habe.


(* read system time *)
tx := DWORD_TO_TIME(T_PLC_MS());
(* debounce input *)
deb(IN:= IN, TD := T_debounce);

(* asynchronous set and reset first *)
IF set AND NOT rst THEN
Q := TRUE;
T_on := tx;
ELSIF rst THEN
Q := FALSE;
(* check FOR input edge *)
ELSIF (deb.Q XOR edge) THEN
T_on := Tx;
(* react on rising or falling edge depending on r_edge *)
IF r_edge XOR deb.Q THEN Q := NOT Q; END_IF;
(* wait for T_reconfig and adjust r_edge *)
ELSIF Tx - t_reconfig >= T_on THEN
r_edge := deb.Q;
END_IF;
IF Q AND T_on_max > t#0ms AND Tx >= T_on + T_on_max THEN
Q := FALSE;
END_IF;
edge := deb.Q;


In meiner Simulation funktioniert der modifizierte SWITCH_I jetzt hinter CLICK_MODE und auch sonst scheint das Verhalten gleich geblieben zu sein.

Gruß
Klaus

mike_roh_soft

Beim Switch_l einfach die debounce_time auf 0s ändern... der switch_l braucht ja den Hardwaretaster nicht mehr zu entprellen, das macht ja schon dein click_mode!

Homesps

Die Idee hatte ich auch schon, aber ich habe auch Fälle, in denen vor einem SWITCH_I Taster mit und ohne CLICK_MODE hängen (siehe Bild). Die ohne CLICK_MODE müssen dann entprellt werden.

Ausserdem denke ich, dass die Art der Entprellung im aktuellen SWITCH_I grundsätzlich falsch ist. Das richtige Verhalten ist meiner Meinung nach, bei der ersten Flanke zu schalten und dann mittels Totzeit zu entprellen.

Meine Version kann das auch, einen Nachteil kann ich momentan nicht erkennen.

Gruß
Klaus

[gelöscht durch Administrator]

Majaestix

Hallo Klaus,

danke für die Verbesserung!
Das Problem kann ich bestätigen.
Besonders fällt es auf, wenn SWITCH_I sowohl von einem Taster als auch von einer Visualisierung angesteuert wird.
BTW:
In den DIMM Bausteinen scheint der gleiche Code Verwendung zu finden, die reagieren ähnlich.

Gruss

Majaestix

mike_roh_soft

Hardwaretaster sollten immer einen CLICK oder CLICK_MODE haben sonst kannst du niemals sauber die Signale in der SPS verarbeiten.
Wie gesagt die Bausteine CLICK oder CLICK_MODE entprellen dann den Taster und der Switch_l kann ohne debounce_time verwendet werden.
So klappt das bei mir!

mike_roh_soft

#5
Ich habe noch was ganz anderes beim CLICK_MODE bemerkt:

Angenommen ich taste einmal kurz dann hat das ein SINGLE-Impulse zur Folge.
Inter läuft der Timer mit der Zeit T_LONG weiter. Wenn ich diese z.B. auf 10s eingestellt habe und ich zufällig nach 10s nochmals kurz taste wird dieser kurze Tasten als TP_LONG Signal ausgegeben.

Nebenbei sei bemerkt, dass bei mir der SINGLE auch erst nach der abgelaufenen Zeit T_LONG raus kommt also erst nach meinen 10s.
Seit ihr sicher, dass das bei euch geht?
Kann das mal jemand testen indem er T_LONG von 500ms auf 10s ändert. Danke!
Bin weiter am testen....

mike_roh_soft

OK ok... das ist alles so richtig... der CLICK_MODE passt nur nicht zur meiner Anwendung.
Ich wollte einen Tastendruck von 10Sek dedektieren und gleichzeitig auch kurze Tastendrücke... aber natürlich nicht erst nach 10Sek. das Signal bekommen!
Muss ich anders lösen :)

Tim_Bukti

#7
Zitat von: mike_roh_soft in 05. April 2012, 20:14:10
... der switch_l braucht ja den Hardwaretaster nicht mehr zu entprellen, das macht ja schon dein click_mode!

Hallo,

wie entprellt der click_mode (V1.0) denn? Entprellen würde für mich hier bedeuten das er wenn er während einer Totzeit nach der ersten Flanke noch weitere am Eingang bekommt diese eben nicht als #double ausgibt oder liege ich da falsch?

Außerdem müsste diese "Debonce" Zeit ja irgendwo einstellen gehen.

Ihr sprecht bei SWITCH_I doch von der V1.2 oder?