Autor |
Beitrag |
strahlemann
      
Beiträge: 35
WinXP
Delphi7
|
Verfasst: Mi 29.11.06 22:50
Hello, ich bastle grad an einem Programm, das ein bisschen mit dem Akku eines Laptops arbeitet. Hab fast alles hinbekommen bloß beim aufladen, gibt er mir als restzeit eine stundenzahl in siebenstelliger höhe an. Klar, dass ich da ein bissche misstrauisch werde, vor allem weil schon 97% aufgeladen sind. Kennt da einer eine möglichkeit, sich das korrekt auzurechnen. hab bis jetzt mit TSystemPowerStatus gearbeitet, bin aber auch für neues offen.
Grüße
_________________ Es gibt Aufgaben die zu erfüllen wären,
den traurigen die Welt erklären (Tomte)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 29.11.06 23:22
Fängt die Reststundenzahl zufällig mit 429... an *g*
Wenn Du den Akku lädst, sind die Restlaufzeit-Werte -1, d.h. unbestimmt ... Da kannst Du nur für dein Programm "Erfahrungen" sammeln (oder dies dein Programm machen lassen) und anhand dieser Erfahrungen dann interpolieren.
Du merkst Dir also: 0% = 0 Sekunden (auch wenn du diesen Wert nie messen wirst  ) und für alle anderen Prozentwerte bei ihrem auftauchen die jeweils angezeigte Restzeit (und reale restzeit durch Merken von Timestamp und Wert der Messung. Anhand dieser Werte kannst Du dann irgendwann "aus Erfahrung" eine sehr genaue Restzeitanzeige angeben, die selbst beim Aufladen des Akkus funktioniert.
Weiterer Vorteil hiervon ist die Rest-Aufladezeit zu bestimmen, bzw. eine wesentlich genauere Akku-Ladeanzeige zu realisieren (die auch einen gewissen Nachkommaanteil beinhaltet).
Ich hab für meinen Schleppi das mit der Restladezeit mal als Proof-of-Concept implementiert und hab (selbst ohne Gedächtnis) schon Werte bekommen, die weniger als 2 Minuten vom wahren Wert abwichen. Basierte einfach darauf, sich zwischen der Änderung zweier Prozentwerte die Zeit zu merken und damit zu linearisieren ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
strahlemann 
      
Beiträge: 35
WinXP
Delphi7
|
Verfasst: Mi 29.11.06 23:26
aaaaaah ja
abgesehen von deiner ersten frage chek ich fast nix. bingo, meine zahl fängt mit 429 an.
soweit ich den rest verstanden habe, willst du mir sagen, dass ich mir ausrechnen soll, wielange ein prozent zu laden ist um die zeit f. d. eine prozent dann mit den noch verbleibenden prozenten zu multiplizieren.
das is ja ur mühsam
_________________ Es gibt Aufgaben die zu erfüllen wären,
den traurigen die Welt erklären (Tomte)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 30.11.06 01:57
strahlemann hat folgendes geschrieben: | aaaaaah ja
abgesehen von deiner ersten frage chek ich fast nix. bingo, meine zahl fängt mit 429 an. |
Gut, dann trifft die Vermutung meinerseits über das Lesen der API-Dokumentation deinerseits ja zu
Hättest Du nämlich mal im MSDN unter GETSYSTEMPOWERSTATUS geschaut, hättest Du dort u.a. auch unter GetSystemPowerStatus folgenden Absatz gefunden:
Relevanter Absatz im MSDN: |
BatteryLifeTime
The number of seconds of battery life remaining, or –1 if remaining seconds are unknown.
BatteryFullLifeTime
The number of seconds of battery life when at full charge, or –1 if full battery lifetime is unknown.
Remarks
The system is only capable of estimating BatteryFullLifeTime based on calculations on BatteryLifeTime and BatteryLifePercent. Without smart battery subsystems, this value may not be accurate enough to be useful. |
Und da bei Präsenz einer USV, was beim Aufladen der Fall ist, nicht klar ist, wie lange der Akku mit seiner jetzigen Ladung noch durchhält, ergibt sich, dass die Restlaufzeit des Akkus unbekannt ist ... (Folgt durch logisches Nachdenken)
strahlemann hat folgendes geschrieben: | soweit ich den rest verstanden habe, willst du mir sagen, dass ich mir ausrechnen soll, wielange ein prozent zu laden ist um die zeit f. d. eine prozent dann mit den noch verbleibenden prozenten zu multiplizieren.
das is ja ur mühsam |
Das ist eigentlich gar nicht Mühsam: In meinem Proof Of Concept genau 2 Variablen und 10 Zeilen Code ... Und das tolle daran: KISS-kompatibel  Funktioniert, wie erwähnt, recht genau ...
Ach ja, zuu meinem Proof of Concept: Der hat sich nur gemerkt, wie weit der Akku zuletzt geladen war, und wann diee entsprechende Abfrage gemacht wurde. Hat sich nun irgendwann der BatteryLifePercent-Wert verändert, wurde daraus die Zeitdifferenz gebildet und damit die Restladezeit linear ausgerechnet ... Was ich im vorigen Post zusätzlich erklärt hab, sind Dinge, wie man dieses Verfahren "intelligenter" machen kann. Ändert aber nichts daran, dass man damit nie auf die letzte Sekunde genau sagen wird, wann der Laptop ohne Strom ausgeht, bzw. wann der Akku vollständig geladen ist ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|