Codesys Input Detector

Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,


ich bin aktuell an der Implementierung eines Display-Dimmers dran. Hierbei möchte ich, dass das Display nach X Minuten gedimmt wird. Dies funktioniert auch soweit.
Die Umsetzung erfog über das linux subsystem, an welches ein befehl zum Dimmen gesendet wird.

Mein Problem liegt jedoch beim Zurücksetzen des Timers bei Eingabe.


D.h. ich möchte, dass bei jedem Klick/Touch der Timer zum Dimmen zurückgesetzt wird. Leider finde ich keine passende Lösung dafür.


Gibt es hierzu irgendwelche Möglichkeiten, die man nutzen kann?


 
Nimm doch eine Ausschaltverzögerung, am Eingang IN dann eine Variable, die dann TRUE wird, wenn eine Berührung stattgefunden hat. Die Dimmenfunktion aktivierst Du dann, wenn der Ausgang FALSE wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nimm doch eine Ausschaltverzögerung an dessen Eingang eine Variable setzen, die dann TRUE wird, wenn eine Berührung stattgefunden hat. Die Dimmenfunktion aktivierst Du dann, wenn der Ausgang FALSE wird.
Das Problem hierbei ist, dass ich eine Funktion suche, die einen Touch- oder Maus-Input erkennt, damit ich diesen zurücksetzen kann. Da die Visualisierung aus sehr vielen Feldern besteht, möchte ich nicht jedem Feld eine Rücksetzvariable hinzufügen. Ein Rechteck darüber zu setzen, geht ebenfalls nicht, da die Eingaben darunter dann nicht mehr möglich sind.
 
Bei TwinCAT würde das vermutlich sogar gehen, ein externes Programm schreiben das eine Berührung oder Mausbewegung erkennt und dann per ADS eine Variable in der SPS setzt. Aber bei Codesys direkt wüsste ich jetzt nicht, wie das gehen könnte.
 
Okay, ich habe eine Lösung gefunden:

https://content.helpme-codesys.com/en/CODESYS Examples/_ex_visu_event_handler.html

ich fange mir hier den Eventcounter vom MouseDown Counter ab und vergleiche ihn um einen Input festzustellen.
Leider habe ich keine andere Möglichkeit gefunden, direkt auf einen Bool zuzugreifen, der mir sagt das es betätigt wurde. Leider kann ich hier nur auf den Counter sowie die X & Y Werte zugreifen. Aber so funktioniert es auch, Danke für eure Hilfe :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du auf die X und Y Werte Zugriff hast könntest Dir daraus doch auch etwas basteln.
Zum Beispiel unterscheidet sich der aktuelle Wert von X oder Y um zum Beispiel 10 Punkte vom gespeicherten Wert, den neuen Wert speichern und am Timer diesen Vergleich als Bedingung für IN anfügen.
 
Ich vergleiche aktuell den Counterwert von Codesys mit einer eigens erstellten Variable, also so ähnlich:

Code:
IF (Mouse_Controller.evHandler.mouseDown.eventCounter <> iTouchCounterStore) AND bActivateDimming THEN
    iTouchCounterStore := Mouse_Controller.evHandler.mouseDown.eventCounter;
    bBrightnessTimerIn := FALSE;
        ELSIF NOT (Mouse_Controller.evHandler.mouseDown.eventCounter <> iTouchCounterStore) AND bActivateDimming AND NOT bDimmedBrightness THEN
           bBrightnessTimerIn := TRUE;
END_IF;

Hiermit bekomme ich dann ja weites entfernt die aussage, "wurde jetzt betätigt" :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vergleiche aktuell den Counterwert von Codesys mit einer eigens erstellten Variable, also so ähnlich:

Code:
IF (Mouse_Controller.evHandler.mouseDown.eventCounter <> iTouchCounterStore) AND bActivateDimming THEN
    iTouchCounterStore := Mouse_Controller.evHandler.mouseDown.eventCounter;
    bBrightnessTimerIn := FALSE;
        ELSIF NOT (Mouse_Controller.evHandler.mouseDown.eventCounter <> iTouchCounterStore) AND bActivateDimming AND NOT bDimmedBrightness THEN
           bBrightnessTimerIn := TRUE;
END_IF;

Hiermit bekomme ich dann ja weites entfernt die aussage, "wurde jetzt betätigt" :)
Betätigt ja, aber halt nicht wurde bewegt.
 
Zurück
Oben