Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CPU und GPU Temperatur auslesen (https://www.delphipraxis.net/190552-cpu-und-gpu-temperatur-auslesen.html)

mabac17 14. Okt 2016 22:28

CPU und GPU Temperatur auslesen
 
Ich möchte gerne selbst meine PC Lüfter steuern. Hierzu benötige ich allerdings die Temperaturen der einzelnen Komponenten. Wie kann ich diese am Einfachsten erhalten?

Rollo62 14. Okt 2016 22:49

AW: CPU und GPU Temperatur auslesen
 
Verstehe ich das so das du Sensoren auf die Bauteile kleben willst ?

Dann könnten vielleicht 1-Wire Sensoren passen, aber die sind womöglich nicht besonders schnell und genau.
https://de.wikipedia.org/wiki/1-Wire

Oder willst du die internen Sensoren der CPU auslesen ?
So in der Art:
http://www.delphipraxis.net/89408-cp...-auslesen.html


Rollo

mabac17 14. Okt 2016 22:51

AW: CPU und GPU Temperatur auslesen
 
Für mich wäre grundsätzlich beides ok ;)
Bei den Internen Sensore habe ich gehört, dass die scheinbar schwer auszulesen sind. Dafür wären die natürlich um Welten komfortabler.
Den Thread habe ich gesehen, aber da kam ja glaub nicht wirklich zu einem Ergebnis.

Temperatursensoren haben das Problem, dass sie schwer zum Beispiel auf der CPU anzubringen sind, da da ja noch ein Kühler draufsitzt

himitsu 14. Okt 2016 23:38

AW: CPU und GPU Temperatur auslesen
 
Der Sensor muß aber auch nicht genau auf das Bauteil.

Wenn du eh den Kühlkörper kühlst, reicht auch dessen Temperatur.
Möglichst nah am heizenden Teil oder weiter weg (nur nicht direkt am kühlenden Teil) ... jenachdem wie groß deine Hysterese sein soll.

Es bringt da auch nichts, wenn der Sensor direkt an der Heizung wäre, denn selbst wenn diese Seite mal kurz "extrem" heiß wird, weil die plötzlich anfängt mit rechnen und sofort dein Lüfter voll aufdreht, dann dauert es eh etwas, bis die neue Hitze durch den Kühlkörper bis hin zur neuen Kältequelle (dem schnelleren Luftstrom) durchgereicht wurde.

jus 15. Okt 2016 01:59

AW: CPU und GPU Temperatur auslesen
 
Zitat:

Zitat von mabac17 (Beitrag 1350921)
Für mich wäre grundsätzlich beides ok ;)
Bei den Internen Sensore habe ich gehört, dass die scheinbar schwer auszulesen sind. Dafür wären die natürlich um Welten komfortabler.
Den Thread habe ich gesehen, aber da kam ja glaub nicht wirklich zu einem Ergebnis.

Temperatursensoren haben das Problem, dass sie schwer zum Beispiel auf der CPU anzubringen sind, da da ja noch ein Kühler draufsitzt

Soll das Programm nur für eine spezielle CPU funktionieren oder für alle CPUs? Wenn es um neuere Intel CPUs geht, da habe ich mich vor einiger Zeit kurz damit beschäftigt. Bei moderneren Intel CPUs braucht man im Prinzip nur das MSR Register 19h (steht in diversen Intel Dokus drin) auslesen. Das Problem ist nur, dass das Auslesen von MSR Register für User Mode (Ring3) unter Windows gesperrt ist. Es ist nur in Ring0 möglich. Die Lösung ist, dass man dies über einen Treiber macht, da der Treiber in Ring0 ist. Einen Treiber mit der nur den Befehl RDMSR ausführt, könnte man zwar schnell mit der WDK machen, aber dann gibt es noch die Problematik, dass der Treiber am besten zertifiziert sein soll, damit Windows da nicht meckert usw. ..... Um die Sache abzukürzen, es gibt bereits fertige Treiber mit der Fähigkeit, das MSR Register auszulesen, die auch zertifiziert sind, wenn ich mich nicht irre von openlibsys.org. Um die Lizenzgeschichte mußt du dich halt selber kümmern, in meinem Fall war das nur für den Hausgebrauch. Sprich, man braucht nur, soweit ich mich erinnere, die WinRing0.dll und die WinRing0.sys in das Programmverzeichnis reinzukopieren und die WinRing0.dll in Delphi zu laden.

Im Prinzip schaut dann der Sourcecode dann in Delphi ungefähr so aus:
Delphi-Quellcode:
var
  Form1: TForm1;

function InitializeDll: LongBool; stdcall; external 'WinRing0.dll' name 'InitializeOls';
procedure DeinitializeDll; stdcall; external 'WinRing0.dll' name 'DeinitializeOls';
function Rdmsr(index:dWORD;var eax,edx:dWORD): LongBool; stdcall; external 'WinRing0.dll' name 'Rdmsr';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  eax,edx:dword;
begin
  RdMSR($19C, eax,edx) ;
  Memo1.Lines.Add('MSR $19C: ');
  Memo1.Lines.Add('eax: '+IntToHex(eax,8));
  Memo1.Lines.Add('edx: '+IntToHex(edx,8));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DeinitializeDll;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ergebnis: LongBool;
begin
  ergebnis:=InitializeDll;
  if ergebnis then Memo1.Lines.Add('InitializeDll: OK')
  else Memo1.Lines.Add('InitializeDll: NOT OK');
end;
Ob der obige Source 100% funktioniert habe ich nicht ausgetestet, da ich die WinRing0 Sachen nicht mehr auf meine Platte finde. Es gibt aber hier im Forum einige Sourcen zum Thema. Mußt halt mal die Suche anwerfen. :)

Lg,
jus

Nachtrag: Habe die WinRing0 Sachen doch noch gefunden und unter Delphi 2007 ausprobiert, sprich 32bit Anwendung. Ich mußte die Project1.exe extra unter Windows 7 als Administrator starten, damit der Treiber geladen wurde. Falls du ein 64bit Programm machst, brauchst du aber die WinRing0x64.dll und WinRing0x64.sys.

Rollo62 15. Okt 2016 08:15

AW: CPU und GPU Temperatur auslesen
 
Ja klar, muss natürlich mit wärmeleitkleber gemacht werden und vielleicht gg. Lüfter geschützt sein.
Die Frage ist eben wozu das gemacht werden soll.

Aber der Sinn von AUSSEN angeklebten Sensoren sehe ich nicht wirklich ein,
denn es hängt das was aussen ist nicht mit dem inneren 1:1 zusammen.
Das wird natürlich sehr ungenau, und man müsste sich das irgendwie selber kalibieren, um z.B. die echte Chiptemperatur zu bekommen.

Sensoren an GPU, Speicher und was sonst noch macht Sinn um ein Board zu Testen, die Sensoren beeinflussen die Bauteile aber u.U. sehr stark.
Besser wäre dann Thermografie, aber ich denke dem TE geht es eigentlich nur um die Main CPU.
Da ist das beste der interne Sensor.


Rollo

p80286 15. Okt 2016 08:37

AW: CPU und GPU Temperatur auslesen
 
Warum selber machen?
Schau mal hier herein:http://www.alcpu.com/CoreTemp/

Gruß
K-H

t.roller 15. Okt 2016 08:56

AW: CPU und GPU Temperatur auslesen
 
Der OPENHARDWAREMONITOR mit WMI-Server stellt die Daten für weitere Verwendung zur Verfügung.
http://www.delphipraxis.net/181868-o...r-mit-wmi.html

Für EIGENE Temperaturmessungen gibt es HIER auch was.

markus5766h 16. Okt 2016 15:49

AW: CPU und GPU Temperatur auslesen
 
wenn's selbst gebaut werden soll :
http://www.tinkerunity.org/forum/ind...ic,3584.0.html
Stromquelle --> PT100 --> DualAnalogIn-Bricklet --> MasterBrick (Tinkerforge).
Zu dem Schaltplan gibt's ein Programm zur Bauteilberechnung.
Die Anbindung der Tinkerforge-Komponenten an Delphi (Pascal) ist einfach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.

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