LabVIEWForum.de
Energiesparmodus verhindern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Energiesparmodus verhindern (/Thread-Energiesparmodus-verhindern)

Seiten: 1 2


Energiesparmodus verhindern - jan91 - 20.06.2014 08:31

Hallo zusammen,

leider kommt es bei Laborrechnern immer wieder vor, das der Energiesparmodus aktiviert ist (nach Installation, neuem SP, ...) und so die Langzeitmessungen unterbrochen werden.
Prinzipell bringt diese Funktion aus Gründen des Energieverbrauchs ja auch Sinn, aber leider nicht während der Messungen.

Deshalb würde ich aus meiner Labview Anwendung bei laufenden Messungen (via RS232 oder USB) gerne den Energiesparmodus verhindern. Gibt es eine Möglichkeit den Timer des Windows Energiesparmodus nachzutriggern oder den Energiesparmodus komplett zu blocken?

Gruß
jan


RE: Energiesparmodus verhindern - GerdW - 20.06.2014 18:09

Hallo Jan,

üblicherweise lässt sich der Energiesparmodus durch Mausbewegungen vermeiden. Du musst dir also überlegen, wie du die Maus bewegt bekommst…

Es gibt Wege (z.B. Win-DLL-Aufrufe oder 3rd-party tools), mit denen man den Mauszeiger bewegen/platzieren kann, ohne das dazu ein User am PC sitzen muss. Meist reicht das aus, um den Screensaver/Energiesparmodus zu verhindern. Also: einfach regelmäßig MouseMove-Events erzeugen!

Ansonsten:
Mess-PCs sollten einen eindeutigen Admin haben, der sich um die Updates etc. kümmert. Und dieser Admin sollte der einzige sein, der die Energiesparoptionen etc. einstellt. Alles andere ist in einem produktiven Umfeld simple Geldverschwendung!
Also:
- Auto-Update ausschalten (Messrechner sollten sowieso nicht am Internet hängen)
- normalen (eingeschränkten) User-Account für Messungen einrichten
- einen Admin-Account einrichten, der sich regelmäßig und nach Absprache mit dem Mess-Plan um Updates und Rechnereinstellungen (mit Checkliste!) kümmert…


RE: Energiesparmodus verhindern - Lucki - 21.06.2014 17:31

Es gibt ja viele Programme, bei denen das Herunterfaheren nicht stattfindet, wenn es läuft. (Download Manager, Video-Konvertierer). Eine Programmierung kann da doch nicht so schwer sein, und ich vermute, man macht das mit der Windows-Funktion "shutdown.exe"
Mach doch mal das:
In der Windows-Eingabezeile cmd aufrufen. Dann in dem sich öffnenden Fenster "shutdown /?" eingeben
Es erscheint die Syntax des Befehls mit allen Parametern.
Finde heraus, wie es geht, und lass das Ergebnis hier allen zugute kommen.


RE: Energiesparmodus verhindern - rolfk - 22.06.2014 14:59

Oder man ruft die Windows API Funktion kernel32.SetThreadExecutionState(uInt32 state) auf.

Mit Parameter 0x80000002 verhindert man, dass Windows das Display in den Ruhemodus schaltet. Mit 0x80000000 schaltet man das wieder zurück. Das 0x2 am Ende sagt dass die Applikation das Display nicht ausgeschaltet haben will. Mit 0x1 anstelle von 0x2 teilt man Windows mit dass das System benützt wird (aber das Display durchaus schlafen gehen darf, also das Display kann dunkel werden aber der Computer geht nicht schlafen).

Aber: explizite Requests des Benützers um den Computer auszuschalten oder in den Schlafmodus zu setzen (z.B. Laptop schliessen) werden trotzdem ausgeführt!


RE: Energiesparmodus verhindern - jan91 - 24.06.2014 08:53

Hallo Zusammen,

habe mich für die Mausbewegung entschieden.

Ich rufe nun nach jeder Messung einmal die user32.dll mit der Funktion "mouse_event" und den Parametern 1,0,0,0,0 auf.

Dadurch wird ein "MOUSEEVENTF_MOVE" mit der Mausverschiebung um 0 aufgerufen, was anscheined reicht um den Bildschirmschoner & Co. nachzutriggern.

Ich hoffe mal, das verursacht keine "bleibenden Schäden" im Dauerbetrieb.

Vielen Dank

jan Big GrinBig GrinBig Grin


RE: Energiesparmodus verhindern - jan91 - 24.06.2014 10:46

Hallo Rolf,

vielen Dank, das ein/ ausschalten mit der Windows API Funktion kernel32 funktioniert super.
Das ist genau die Funktion, nach der ich gesucht habe.

Kennst Du evtl. auch eine Möglichkeit, um zu prüfen, auf welche Zeitdauer der Timer für den Systemabschaltmodus konfiguriert ist?


Gruß
jan


RE: Energiesparmodus verhindern - Lucki - 25.06.2014 13:26

(24.06.2014 10:46 )jan91 schrieb:  vielen Dank, das ein/ ausschalten mit der Windows API Funktion kernel32 funktioniert super.
Das ist genau die Funktion, nach der ich gesucht habe.
Dann sollte man doch die Antwort auch als "richtige Lösung" markieren. Habe das mal für Dich getan.


RE: Energiesparmodus verhindern - jan91 - 25.06.2014 13:43

@Lucki: Danke


RE: Energiesparmodus verhindern - baer1775 - 12.11.2024 12:41

(22.06.2014 14:59 )rolfk schrieb:  Oder man ruft die Windows API Funktion kernel32.SetThreadExecutionState(uInt32 state) auf.

Mit Parameter 0x80000002 verhindert man, dass Windows das Display in den Ruhemodus schaltet. Mit 0x80000000 schaltet man das wieder zurück. Das 0x2 am Ende sagt dass die Applikation das Display nicht ausgeschaltet haben will. Mit 0x1 anstelle von 0x2 teilt man Windows mit dass das System benützt wird (aber das Display durchaus schlafen gehen darf, also das Display kann dunkel werden aber der Computer geht nicht schlafen).

Aber: explizite Requests des Benützers um den Computer auszuschalten oder in den Schlafmodus zu setzen (z.B. Laptop schliessen) werden trotzdem ausgeführt!


Super! Genau was ich gesucht habe Big Grin, danke!

Anbei ein kleines VI wo diese Lösung umgesetzt ist


RE: Energiesparmodus verhindern - TpunktN - 13.11.2024 09:16

(12.11.2024 12:41 )baer1775 schrieb:  Anbei ein kleines VI wo diese Lösung umgesetzt ist

Cool, danke für das VI und zum aufmerksam machen auf den Thread, sowas wollte ich auch mal einbauen. Zumindest sollte es verhindern, dass meine USB Ports abgeschaltet werden während einer längeren Messung, oder?

Ich habe noch nie mit der 'Call Library Function' gearbeitet, das sieht ja umständlich aus (wenn man keine Ahnung hat). Beim lesen des Threads habe ich mal die MS Seite dazu genommen, verstehe ich das richtig, die Funktion gibt auch eine Echo als Antwort mit der aktiven Funktion?

Interessant fande ich den Teil:
"Calling SetThreadExecutionState without ES_CONTINUOUS simply resets the idle timer; to keep the display or system in the working state, the thread must call SetThreadExecutionState periodically."
Man kann sich quasi Mouse Move komplett sparen und einfach einen Timer Reset machen ..

Grüße Timo