Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CPU Temperatur Auslesen (https://www.delphipraxis.net/89408-cpu-temperatur-auslesen.html)

Corpsman 30. Mär 2007 15:58


CPU Temperatur Auslesen
 
Hi Leutz,

Ich hab mir ein Kleines Tool basteln wollen das mir die GPU, CPU und die Mainboard Temperatur ausliest.

Nu die GPU war kein Problem dank der Suchfunktion im Forum.

Mainboard auch kein Problem das mache ich so :
Delphi-Quellcode:
Function GetMainBoardtmp: Cardinal;
Begin
  If MainboardTmp Then Begin
    PortOut($295, $27);
    result := portin($296);
  End
  Else
    Result := 0;
End;
Nur die CPU Temp macht schwierigkeiten.

Angeblich soll das der port 290 sein. Doch wenn ich den versuche mit Portin($290) aus zu lesen bekomme ich immer 255 und sonst nix.

Ich geh mal davon aus das man da vorher auch erst an einen Port was schreiben mus so wie das der MainBoardTMP Code macht. Nur was sende ich an welchen Port ?

Oder hat einer von euch nen Anderen Code der meinen Intel 6700 Core Duo auslesen kann ?

turboPASCAL 30. Mär 2007 16:12

Re: CPU Temperatur Auslesen
 
:hi: Hier im Forum suchenCPU Temperatur :stupid:

:cheers:
Beiträge: 2.000

Corpsman 30. Mär 2007 17:17

Re: CPU Temperatur Auslesen
 
Oh turbopascal ,

wie wenn ich das nicht schon versucht hätte.

Da gibts nur ein einziges überhaupt Brauchbars Teil und das ist das HardwareMonitor ding das dann die Unit

LM78CTRL.pas

benutzt.

Das hab ich auch zum Laufen gebracht. nur Witziger weise schaltet das sobald ich es starte den CPU Lüfter aus. Was mal echt scheise ist.

bitsetter 30. Mär 2007 18:39

Re: CPU Temperatur Auslesen
 
Hi,

einiger Mainboard Hersteller bieten Tools an die sowas auslesen können. Bei Asus zB. liegt beim Tool PCProbe eine DLL dabei, die man eventuell auch für sich selber benutzen kann.

Robert Marquardt 30. Mär 2007 18:42

Re: CPU Temperatur Auslesen
 
http://www.almico.com/speedfan.php ist in Delphi geschrieben.

Corpsman 30. Mär 2007 19:18

Re: CPU Temperatur Auslesen
 
Das hab ich aufm Rechner,

nur bringt es mir natürlich nichts wenn kein Source dabei ist.

Oder bin ich einfach nur zu dämlich den zu finden ?

Glühwürmchen 30. Mär 2007 21:00

Re: CPU Temperatur Auslesen
 
Wenn Du unbedingt den Source haben willst, nützt Dir mein Tip natürlch auch nichts, aber ich schreibe es trotzdem.

http://cgi.zdnet.de/c/?s=32&t=http%3...loads%2Fprg%2F

Da findest Du AIDA32.Exe.

Ist free das Teil und kann von der Kommandokonsole aus gestartet werden, und zwar so, daß es anläuft, einen Bericht erstellt und sich wieder beendet ohne daß man an der Oberfläche etwas davon mitbekommt.

Daniel G 30. Mär 2007 21:03

Re: CPU Temperatur Auslesen
 
Zitat:

Zitat von Corpsman
Das hab ich aufm Rechner,

nur bringt es mir natürlich nichts wenn kein Source dabei ist.

Oder bin ich einfach nur zu dämlich den zu finden ?

Vllt. wollte Robert auch nur darauf aufmerksam machen, damit du dich mit dem Autor mal in Verbindung setzen kannst. Ich habe übrigens von ihm nie eine Antwort auf meine Mails erhalten. Du kannst dich also glücklich schätzen, wenn da was kommt...

Corpsman 30. Mär 2007 21:23

Re: CPU Temperatur Auslesen
 
ich Brauch es halt als Source, damit ich es in Mein Proggy einbauen kann Angeschrieben hab ich den Typ nu auch mal.

Bin mal gespannt was bei Rauskommt.

Bei Erfolg kann ichs ja dan hier Posten ;)

Muetze1 30. Mär 2007 21:42

Re: CPU Temperatur Auslesen
 
Schau dir HWMon 1.6 beta an, das gibs mit Sources in Delphi kostenlos: HWMon 1.6 beta. Nachteil: viele neue Chips etc sind noch nicht programmiert, da der Source schon länger brach liegt...

Robert Marquardt 31. Mär 2007 04:42

Re: CPU Temperatur Auslesen
 
Ich wollte darauf aufmerksam machen das es nicht einfach ist die Temperaturen zu bekommen.

richard_boderich 31. Mär 2007 08:11

Re: CPU Temperatur Auslesen
 
achtung !!!!

du solltest sehr vorsichtig sein mit dem was du tust. einfach rumprobieren und auf irgendwelche adressen des smbus schreiben mit
directem Port IO zugriff kann nach hinten losgehen und eventuell zu hardwareschaeden fuehren. bei vielen sensorchips benoetigst
du eine berechnungsformel fuer die temperatur die sich aus mehreren registerwerten zusammensetzt. war bei meinem programm auch so.
(Poseidon Hardwaremonitor). mein rat an dich ermittele genau welchen chip du auf dem mainboard hast und suche dir dafuer im internet die specs raus. da stehen dann alle registeradressen und berechnungsformeln drinn die du benoetigst inkl. reservierter
register. einfach alle sensortypen durchzuprobieren bringt es nicht. da dort sehr feine unterschiede bestehen, auch in den chips eines herstellers.

gruß richard

Corpsman 31. Mär 2007 08:31

Re: CPU Temperatur Auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Muetze1

Den HWMonitor hab ich ausprobiert, er Zeigt meine CPU Temp auch an. Allerdings unter Abschaltung des CPU Lüfters. => UNBRAUCHBAR

@richard_boderich

Wie kriegt man den genau ras was für einen Chippsatz man hat ?

Das Board weis ich ja das ist das ASUS P5B.

Und mein Win GeräteManager zeigt mir nu ettliche Chipsätze an, welcher ist da der Richtige ?

Hab mal nen Screenshot mit hochgeladen.

bitsetter 31. Mär 2007 09:18

Re: CPU Temperatur Auslesen
 
Hi,

@Corpsman wenn du schon ein Asus Mainboard hast, dann bietet sich doch das Programm ASUS PCProbe von Asus doch an, bei dem Programm soll eine Asus.dll beiliegen. Hier sind alle Funktionen der DLL aufgelistet. Und hier ist das ganze mit Code für die Funktion 'GetCPUTemperature' auch wenn nicht in Delphi. Das wird man bestimmt auch in Delphi hinbekommen oder einfach mal im Netz suchen.

richard_boderich 31. Mär 2007 10:15

Re: CPU Temperatur Auslesen
 
@corp

es geht um den sensorchip, nicht um den chipsatz des mainboards. der chipsatz ist nur wichtig fuer das ansprechen des SMbus.
der sensorcchiptyp ist wichtig um die genauen portadressen zu ermitteln. bei neueren cpu's kannst du aber auch das integrierte
temperaturregister der cpu auslesen.

richard

//edit dein screeni zeigt , das du einen Intel ICH8 SMbus hast.

Corpsman 31. Mär 2007 13:20

Re: CPU Temperatur Auslesen
 
Also Asus.dll behauptet das ich einen Unbekannten Chipsatz hätte.



Und wo Kriege ich nu die Numer des Sensor Chips her ?

Auf Meiner CPU steht 6700 etho aber mir sagt das man Gar nix

richard_boderich 31. Mär 2007 14:03

Re: CPU Temperatur Auslesen
 
oh je,

das is ein winziger chip auf dem motherboard. einige hersteller typen LM, winbound,ITE am besten du googgelst mal.
es kann auch sein das die asussoftware dein boaerd nicht unterstuetzt, obwohl es von asus war. sowas hatte ich auch schon mal
und haengt mit den unterschieedlichen verbauten sensortypen und chipsaetzen zusammen. es gab von dem monitortool auch 2 versionen bei asus. keine ahnung ob das immernoch so ist.

richard

Corpsman 2. Apr 2007 20:02

Re: CPU Temperatur Auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe nun mal das Asus Probe II installiert und das Kann mein Board Problemlos auslesen.

Ich habe auch schon rausgefunden das es das mit Hilfe der 2 Dateien macht die ich angehängt habe.

Das eine ist ne DLL die meines erachtens das ganze macht. die Sys file dürfte nur zum Ports öffnen sein.

Gibts nu ne Möglichkeit sage wir mal eine "Pseudo" dll zu schreiben die sich für die DLL ausgibt und dann sichtbar macht welche Ports das Asus Probe anfordert ?

Bzw kann mir einer von euch sagen wie ich die Import Export Teile aus dieser DLL in Delphi übernehme ?

bitsetter 2. Apr 2007 20:41

Re: CPU Temperatur Auslesen
 
Hi,

die Export Tabelle deiner Dll sieht nicht gerade erfolgsversprechend aus:

ASIO_Close
ASIO_GetCpuID
ASIO_InPortB
ASIO_InPortD
ASIO_MapMem
ASIO_Open
ASIO_OutPortB
ASIO_OutPortD
ASIO_ReadMSR
ASIO_UnmapMem
ASIO_WriteMSR
OC_GetCurrentCpuFrequency

Was bei Asus Asus Probe ist, ist bei Gigabyte das Tool SIV (System Information Viewer). Das Tool hatte Gigabyte mit auf die Treiber CD des Mainboards gelegt, dort lagen auch 2 Dll's bei, die eine hatte folgende Export Tabelle:

LX_Get_CPUFanCount
LX_Get_CPUTempValue
LX_Get_SystemFanValue
LX_Get_VoltageCPUValue
LX_Get_VoltageP12Value
LX_Get_VoltageP33Value
LX_Get_VoltageP5Value

Auch wenn Corpsman das nicht viel nutzen wird, aber mit folgender Funktion konnte ich ohne weiteres die CPU Temperatur und auch den Rest auslesen:

Delphi-Quellcode:
function GetCpuTemp: cardinal;
type
  LX_Get_CPUTempValue = function(pCpuTemp: Pointer): cardinal stdcall;
var
  hInstDll: THandle;
  Get_CPUTempValue: LX_Get_CPUTempValue;
  Pfad: AnsiString;
begin
  Result := 0;
  Pfad := ExtractFilePath(application.ExeName) + 'w83781d.dll';
  if FileExists(Pfad) then
  begin
    hInstDll := LoadLibrary(PChar(Pfad));
    if hInstDll <> 0 then
    try
      Get_CPUTempValue:= GetProcAddress(hInstDll, 'LX_Get_CPUTempValue');
      if Assigned(Get_CPUTempValue) then
        Get_CPUTempValue(Addr(Result));
    finally
      FreeLibrary(hInstDll);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  form1.caption:= inttostr(GetCpuTemp);
end;

Corpsman 2. Apr 2007 21:00

Re: CPU Temperatur Auslesen
 
@ bitsetter

Ich Versuch alles wenn nur irgendwas mal zum Erfolg führt.

Kannst diese w83781d.dll auch mal Hochladen, dann Probiere ich es aus.

bitsetter 2. Apr 2007 21:02

Re: CPU Temperatur Auslesen
 
Die w83781d.dll bringt dir doch nichts, die funktioniert nur auf Gigabyte Boards.

Razor 10. Aug 2007 17:46

Re: CPU Temperatur Auslesen
 
Thank you for the example and reference.

Does ABIT also has somekind of tool or dll and maybe Asrock(sucks i know).Or if anybody knows about any other dll from other companys?


Thanks!:)

bitsetter 12. Aug 2007 00:24

Re: CPU Temperatur Auslesen
 
Moin,

zum Auslesen der CPU- und System Temperatur von meiner Gigabyte Hauptplatine benutze ich mittlerweile folgende Funktion:
Delphi-Quellcode:
function GetTempValue(Sensor: Byte): cardinal;
var
  hInstDll: THandle;
  Get_CPUTempValue: procedure(Sensor: Byte; pTemp: PCardinal) stdcall;
  Pfad: AnsiString;
begin
  Result := 0;
  Pfad := Format('%sw83781d.dll', [ExtractFilePath(Application.ExeName)]);
  if FileExists(Pfad) then
  begin
    hInstDll := LoadLibrary(PChar(Pfad));
    if hInstDll <> 0 then
      try
        Get_CPUTempValue:= GetProcAddress(hInstDll, 'W_Get_TempValue');
        if Assigned(Get_CPUTempValue) then
          Get_CPUTempValue(Sensor, @Result);
      finally
        FreeLibrary(hInstDll);
      end;
  end
  else
    MessageDlg(Format('Die Datei "%s" konnte nicht gefunden werden!', [Pfad]), mtError , [mbOK], 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  System = 1;
  CPU = 2;
begin
  //caption:= inttostr(GetTempValue(CPU));
  caption:= inttostr(GetTempValue(System));
end;

Razor 12. Aug 2007 00:25

Re: CPU Temperatur Auslesen
 
http://www.delphipraxis.net/internal...t.php?t=116098

hathor 12. Aug 2007 10:31

Re: CPU Temperatur Auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt viele Leute, die immer noch nicht wissen, was ein EC (Embedded Controller) ist.

http://de.wikipedia.org/wiki/Embedded_Controller

Im Anhang können sich Interessierte ein PDF-File in ENGLISH downloaden, das den PC87591 beschreibt - 437
Seiten!!!
Eine Frage in einem Forum (Welcher EC ist in Eurem Notebook?) brachte KEINE einzige brauchbare Antwort!
Ich habe 2 verschiedene Notebooks von HP, die den gleichen EC (Winbond (früher NS) PC87591) enthalten,
aber die Register, die für mich interessante Werte enthalten, sind nicht identisch. Das heisst, dass ein
Programm, das z.B. die CPU-Temperatur der CPU-Temperaturdiode (die CPU-Temperaturdiode ist direkt über 2
Leitungen mit dem EC verbunden) aus dem betreffenden Register ausliest (als HEX-Wert: z.B. 30 entspricht
48°C), beim anderen Notebook ohne Änderung nicht funktioniert - es müsste also die relevanten Infos aus
einer INI-Datei auslesen (den Müllhaufen REGISTRY mag ich nicht!).
Da es aber zahllose EC von vielen Chip-Herstellern gibt, ist es unmöglich, ein Programm zu entwickeln, das
Temperaturen, Drehzahlen, Spannungen etc. direkt aus dem EC ausliest - und das OHNE Änderung auf vielen
Notebooks oder PC läuft. Dass manche Entwickler von dieser Situation frustriert sind wie A. van Kaam (MBM)
ist verständlich. Dass Anfragen an PC- oder Notebook-Hersteller (wer weiss eigentlich, wer der Hersteller
seines Notebooks ist??? - z.B. Hersteller des HP ZV5188EA ist COMPAL(Support:0)) ins Leere laufen, ist
kein böser Wille - sie können sie einfach nicht beantworten, weil sie die Einzelheiten des EC-BIOS (nicht
verwechseln mit dem, was man üblicherweise unter BIOS versteht) nicht kennen!!! Dass es sehr selten
EC-BIOS-Updates gibt, darf in diesem Zusammenhang nicht verwundern. LENOVO (früher IBM) ist da eine
rühmliche Ausnahme, die sogar 4 Jahre nach einer Notebook-Einführung noch Updates herausgibt.
Die ursprünglichen Adressen, unter denen früher die Keyboard-Controller (KBC) angesprochen wurden, gelten
nur in seltenen Fällen. Aus den KBC entwickelten sich die EC, die die SUPER-I/O-Controller-Funktionen
integrieren, die in Desktop-PC enthalten sind (häufig im Chipsatz enthalten).
Wie kommt man dann an Messwerte, wenn man manchmal (oder häufig?) nicht weiss, welcher EC vorhanden ist?
Im Betriebssystem kann man nicht viel Hilfe erwarten - ACPI oder WMI liefern fast nie brauchbare Werte -
beim HP ZV5188EA kann man zwar die CPU-Temperatur auslesen, aber der Wert entstand beim Booten des
Betriebssystems - ein regelmässiges Update des MSAcpi_ThermalZoneTemperature-Wertes findet nicht statt.
Weitere Werte gibt es garnicht - nicht einmal die Charge Rate (Lade-Entladestrom), bei meinem 2.Notebook
funktioniert beides (HP ZE4228, Hersteller unbekannt, gleicher EC).
Wenn vom Hersteller Monitoring-Programme mitgeliefert werden, hat man Glück gehabt. Vielleicht besteht
dann die Möglichkeit, vorhandene DLLs in eigene Programme einzubinden.
MICROSOFT und INTEL haben es bis heute versäumt, Standards zu setzen, deshalb werden Fragen "Wie kann man
...auslesen?" auch in Zukunft häufig unbeantwortet bleiben müssen!

Razor 14. Aug 2007 00:37

Re: CPU Temperatur Auslesen
 
Danko hathor! :-D

Now i understand what EC is all about and what it can do.Its basicly a Super I/O chip.About that RW tool ill post the name of EC tommorow of my notebook!

Again thank you very much!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz