LabVIEWForum.de
automatisch Standby od. Ruhezustand und wieder aufwachen? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: automatisch Standby od. Ruhezustand und wieder aufwachen? (/Thread-automatisch-Standby-od-Ruhezustand-und-wieder-aufwachen)



automatisch Standby od. Ruhezustand und wieder aufwachen? - ansie - 08.09.2009 16:38

Hallo zusammen!

Schon länger recherchiere und lese ich hier im Forum mit und habe für meine Abschlussarbeit
- ich programmiere gerade ein Visualisierungssystem einer Produktionsanlage in LabVIEW -
schon viele der wertvollen Tipps und Beispiele gut gebrauchen können!

Ich möchte für mein Visualisierungssystem auch eine Automatik programmieren, die das System
einstellbar entweder in den Standby- oder in den Ruhezustand-Modus versetzt UND nach
einer einstellbaren Zeit wieder erweckt, damit die Visualisierung fortgeführt wird.

Hier habe ich sehr interessanten Beispielcode dazu gefunden (im Anhang meine überarbeitete Version):
http://forums.ni.com/ni/board/message?boar...g&page=5ier

Das funktioniert sogar, aber weil ich mich mit dll-Funktions-Aufrufen leider gar nicht gut auskenne,
scheue ich es ein wenig, so eine umfangreiche Funktion in meine Arbeit mit einzubinden.
Muss die Sache ja auch auf wissenschaftl. Art u. Weise dokumentieren usw. ...

Was meint ihr, gibts da vielleicht auch eine einfachere Lösung?

LG,
ansie.

Lv86_img


automatisch Standby od. Ruhezustand und wieder aufwachen? - Y-P - 08.09.2009 18:30

Wenn es funktioniert, dann würde ich es auch einbinden. Du kannst ja als Quelle das Programm von NI angeben, dann brauchst Du es ja auch nicht zu kommentieren. Wink

Gruß Markus


automatisch Standby od. Ruhezustand und wieder aufwachen? - rolfk - 08.09.2009 20:28

Kompliziert würde ich diese zwei VIs nicht gerade nennen. FindWindowA.vi schwirrt schon im Netz rum seit etwa LabVIEW 4 und macht nichts anderes als eine einfache Windows API Funktion aufrufen. Dazu kannst Du Dich schlauer machen bei MDSN msdn.microsoft.com. Dort sind alle öffentlichen Windows APIs mehr oder weniger ausführlich dokumentiert.

Um das zu machen was SuspendandResume.vi macht gibt es wohl keine einfachere Methode. Was mir bei dem VI auffällt ist eine etwas magere Fehlerbehandlung.

1) CreateWaitableTimer() kann fehlschlagen und gibt dann ein NULL Handle zurück.
2) SetWaitableTimer() gibt im Erfolgsfall ein Zahl ungleich 0 zurück. Das ist meistens 1 aber MSDN sagt nichts darüber sondern sagt einfach bei Erfolg kommt etwas anderes als 0 und im Fehlerfall dann eben halt 0. Die Case Struktur macht das nicht ganz korrekt (funktioniert aber solange nichts schief geht).
3) Das Handle das CreateWaitableTimer() zurückgibt sollte eigentlich am Ende mit CloseHandle() geschlossen werden. Aber das ist hier keine grosse Katastrophe da das Objekt bei CreateWaitableTimer() mit einem Namen geöffnet wird. Das heisst bei erneuten Ausführen dieses VIs wird Windows das bereits erzeugte und noch nicht geschlossene Timerobjekt mit dem Namen "Timer" wiederverwenden, also nicht ein neues Objekt erzeugen, was ein Speicherleck verursachen würde. Aber der Name "Timer" ist nicht gerade originell gewählt und wenn ein nicht Timerobjekt mit diesem Namen durch irgendeine andere Windowsapplikation schon erzeugt wurde, schlägt der Aufruf von CreateWaitableTimer() fehl (und gibt diese Funktion ein NULL Handle zurück). Und wenn irgendeine andere Applikation schon ein Timerobjekt mit diesem Namen erzeugt hat, werden beide auf dasselbe Objekt zugreifen und sich dadurch in die Quere kommen.

Rolf Kalbermatter


automatisch Standby od. Ruhezustand und wieder aufwachen? - ansie - 09.09.2009 12:42

Hallo!
Vielen Dank für die Hinweise, nach durchsicht der Funktions-Beschreibungen
in der MSDN-Library ist mir der Ablauf nun eigentlich ganz klar.

Habe das VI angepasst und auch etwas vereinfacht.
Wenn ich den Ruhezustandmodus benutzte, dann kann ich den Teil
mit den SendMessageA-Funktionen weglassen.
Wenn mein Rechner aus dem Ruhezustand erwacht, dann
geht auch mein Monitor automatisch wieder an.
Wenn er aus dem Standbymodus erwacht, dann
bleibt der Monitor allerdings aus, bis man die
Maus bewegt, eine Taste drückt o.ä.

Irgendwas stimmt auch mit SetWaitableTimer noch nicht ganz, glaub ich:
Heute Mittag wollte ich den Rechner mal 30 Minuten (1800 Sekunden) in den
Ruhezustand versetzen und sich dann von selbst wieder erwachen lassen,
aber immer schon nach knapp 2 Minuten kommt er wieder.

Macht mir hier vielleicht der *pdueTime - Parameter Probleme??

LG,
ansie.

Lv86_img[attachment=21152]


automatisch Standby od. Ruhezustand und wieder aufwachen? - ansie - 09.09.2009 13:30

Ich glaub ich habs schon...
Da lt. http://msdn.microsoft.com/en-usbrary/ms...28VS.85%29.aspx
und http://msdn.microsoft.com/en-usbrary/ms...28VS.85%29.aspx
der Parameter pdueTime von SetWaitableTimer ein const LARGE_INTEGER *
der Form FILETIME structure ist, müssen da ja vermutlich auch 64bit-Werte rein.
Nach Änderung und Test mit 5 Minuten (300 Sek.)
Ruhezustand lief es dann auch schonmal solange durch.
Big Grin

LG,
ansie.


Lv86_img[attachment=21155]