Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
kann mir evtl mal jemand auf die sprünge helfen; denke ich habe grad ne blokade... :-/
ich möchte einen taster einlesen, der eine led schaltet. also ein tastendruck (ca. 500ms) soll eine led so lange schalten, bis ich diesen taster wieder drücke.
bislang versuche ich das ganze als funktionsblock (debounce) in ST zu lösen, leider ohne erfolg...
bin für jede anregung dankbar.
mfg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
AutoManual ist der taster um den es sich dreht und und SwitchState dann die ausgabe, also der "schalter" (TIMER_FLAGS._1000ms ist alle 1000ms genau einen durchlauf lang TRUE => timer)
für erweiterungen und verbesserungen wäre ich dankbar...
mfg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
danke für die private Nachricht. Das war mein erster Beitrag im Forum und ich hatte nur den falschen Button erwischt. Du kannst meinen Beitrag gern öffentlich in das Forum stellen, denn ich muss schon feststellen, dass viele Antworten im Forum die gestellten Fragen nicht beantworten (zum Teil auch falsch sind)
Tschüss Norbert
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich habe genau das gleich problem wie oben erwähnt! ich habe die Oscat.lib schon durchsucht und bin dort auch fündig geworden! jetzt stellt sich die frage ob es in den codesys libs nicht auch so einen switch_I Block gibt! ich kann leider keinen finden. es geht mir darum das mein programm auch für neuere versionen gültig bleibt und deswegen würde ich gerne nur die codesys libs verwenden!!
wäre für jede hilfe dankbar
mfg boris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die oscat.lib funktioniert ja nicht schlecht! das Problem dieser lib. (nicht der ganzen lib sondern nur dem switch_i) ist es falls mal einer 5 sekunden auf den taster drückt was ja vorkommen kann. bin ich drauf gekommen, dass das licht nicht eingeschalten wird.
irgendwie kann ich es nicht verstehen das codesys keine anzuverzögerung oder abfallsverzögerungsbausteine besitzt.
bzw. muss es doch eine einfach schrittschaltung geben die nur erkennt taster wurde gedrückt und beim nächsten druck wieder weiss taster wurde ausgeschalten!
mfg boris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Zitat:
bzw. muss es doch eine einfach schrittschaltung geben die nur erkennt taster wurde gedrückt und beim nächsten druck wieder weiss taster wurde ausgeschalten!
Werte doch mal einen Signalwechsel von low-high pegel aus.
Anschliessend bei diesem Wechsel toogelst du das Signal.
Teste das doch mal.
Solltest du hilfe benötigen, rühr dich nochmals.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
guten morgen,
kann mir evtl mal jemand auf die sprünge helfen; denke ich habe grad ne blokade... :-/
ich möchte einen taster einlesen, der eine led schaltet. also ein tastendruck (ca. 500ms) soll eine led so lange schalten, bis ich diesen taster wieder drücke.
bislang versuche ich das ganze als funktionsblock (debounce) in ST zu lösen, leider ohne erfolg...
bin für jede anregung dankbar.
mfg
bin schon weiter... hatte die falsche variable eingelesen :-/
der code "toggelt" die led quasi alle sekunde:
IF AutoManual = TRUE AND TIMER_FLAGS._1000ms THEN
END_IF;
AutoManual ist der taster um den es sich dreht und und SwitchState dann die ausgabe, also der "schalter" (TIMER_FLAGS._1000ms ist alle 1000ms genau einen durchlauf lang TRUE => timer)
für erweiterungen und verbesserungen wäre ich dankbar...
mfg
Hallo Marcus,
danke für die private Nachricht. Das war mein erster Beitrag im Forum und ich hatte nur den falschen Button erwischt. Du kannst meinen Beitrag gern öffentlich in das Forum stellen, denn ich muss schon feststellen, dass viele Antworten im Forum die gestellten Fragen nicht beantworten (zum Teil auch falsch sind)
Tschüss Norbert
Du kannst dein Programm wesentlich einkürzen.
Dein Programm Toggelt SwitchState bei jeden durchlauf.
IF OldState = TRUE THEN
SwitchState := FALSE;
OldState := FALSE;
ELSIF OldState = FALSE THEN
SwitchState := TRUE;
OldState := TRUE;
END_IF;
Den gleichen erfolg hättest du hirmit
SwitchState := NOT SwitchState ;
danke euch beiden für die hilfe und anregungen.
hier nun der code von Norbert, wie ich ihn implementiert habe.
funktioniert einwandfrei.
vielen dank dafür!
========================================
FUNCTION_BLOCK LP100_Button2Switch
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
========================================
( --- button can be used as a (debounced) latched switch --- )
TON1(IN := bInput, PT := T#50ms); ( debounce pressed button )
SR1(SET1 := TON1.Q AND NOT SR2.Q1, RESET := TON1.Q AND SR2.Q1); ( use two SR FlipFlops to toggle the switch state )
SR2(SET1 := NOT TON1.Q AND SR1.Q1, RESET := NOT TON1.Q AND NOT SR1.Q1);
bOutput := SR1.Q1; ( output debounced switch state )
========================================
hallo schau dir mal die freien bibliotheken von oscat (open source community for automation technology) an
http://www.oscat.de
lade die bibliothek 1.0 und du findest dort einen swith_i
der macht alles was du willst und noch vieles mehr
wow, danke dir!
wird bestimmt noch einmal hilfreich sein.
mfg, Marcus
PS: seit gestern gibt's die version 1.1
ja ich entwickle selber daran mit.
hoffentlich finden sich noch viele die testen und weiterentwickeln
auf w www.oscat.de w ist die neuste lib 1.2
die hat einen intelligenten schalter "switch_i"
dieser schalter configuriert sich selber auf (öffner, schliesser oder wechselschalter.
er kann mit ontime begrenzung und externen on off bedient werden.
sehr schön, danke
gleich mal durchschauen die neue bibliothek...
Hallo
ich habe genau das gleich problem wie oben erwähnt! ich habe die Oscat.lib schon durchsucht und bin dort auch fündig geworden! jetzt stellt sich die frage ob es in den codesys libs nicht auch so einen switch_I Block gibt! ich kann leider keinen finden. es geht mir darum das mein programm auch für neuere versionen gültig bleibt und deswegen würde ich gerne nur die codesys libs verwenden!!
wäre für jede hilfe dankbar
mfg boris
Hi
Ziehe dir den Code von der OSCAT einfach raus und ergänze/integriere
diese in deinem Programm.
Dieses ist erlaubt und in deinem Fall möglicherweise Sinnvoll.
P.S: OSCAT.lib ist Quelltextoffen und frei verwendbar.
Karl
Die oscat.lib funktioniert ja nicht schlecht! das Problem dieser lib. (nicht der ganzen lib sondern nur dem switch_i) ist es falls mal einer 5 sekunden auf den taster drückt was ja vorkommen kann. bin ich drauf gekommen, dass das licht nicht eingeschalten wird.
irgendwie kann ich es nicht verstehen das codesys keine anzuverzögerung oder abfallsverzögerungsbausteine besitzt.
bzw. muss es doch eine einfach schrittschaltung geben die nur erkennt taster wurde gedrückt und beim nächsten druck wieder weiss taster wurde ausgeschalten!
mfg boris
Hi
Du kannst ja den Code ändern.
Hi
Werte doch mal einen Signalwechsel von low-high pegel aus.
Anschliessend bei diesem Wechsel toogelst du das Signal.
Teste das doch mal.
Solltest du hilfe benötigen, rühr dich nochmals.
Hi
Ich würde da doch ganz einfach einen R_TRIG benutzen.
Bei jedem R_TRIG.Q den Ausgang toggeln.
Das müsste doch machbar sein.
Gruss Erik
Hi
@Erik Böhm
Ich denke, das müsste so funktionieren.
Möglicherweise wird vorher noch ein TON benötigt.
(Prellen/Flattern des Schalters bei schnellen Eingängen)
Test macht schlau
Um den Timer für's Entprellen kommt Du fast nicht drumrum. Der Funktionsbaustein kann dann so aussehen wie hier ganz unten beschrieben:
http://www.sps-foren.de/showthread.php?t=12637&page=2
und der Aufruf für einen Schalter dann so:
(Prell_L ist dann vom Typ "Entprellung", der Rest sollte klar sein, die Variable G_Prellzeit ist eine globale und für alle Schalter gleich))
Hi Oberchefe
Würde sagen:
100 % ACK
Hätte auch noch eine Variante zu bieten:
Statt IF ....
O_Licht_Kueche:= O_Licht_Kueche XOR Prell_L.Flanke;
Für irgendwas muss das XOR doch zu gebrauchen sein javascript:emoticon(':lol:')
Laughing
macht es natürlich nochmal etwas kürzer