![]() |
64Bit OS -> serielle Schnittstelle benutzen
Hallo zusammen,
ich habe eine Frage bezüglich der seriellen Schnittstelle bei einem 64bit OS. Die Software läuft auf Win200, WinXP, WinVista und Win7 unter 32bit problemlos. Es ist einfach nur ein Softwaretool um über die serielle Schnittstelle zu "reden". Es werden auch Overlapped Events benutzt. Nur leider wollte ich das jetzt auf einem Win7 64bit testen (gleiche Exe die unter 32bit läuft) und da bekomme ich keine Kommunikation über die Serielle Schnittstelle hin. Hat damit jemand schonmal Erfahrungen gehabt bzw Anregungen? Viele Grüße Alex |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Da wird wohl nur ein 32-Bit Treiber dabei sein. Für ein 64-Bit OS brauchst du aber einen 64-Bit Treiber.
|
Re: 64Bit OS -> serielle Schnittstelle benutzen
Die serielle Schnittstelle läuft ja ganz normal wenn ich im Windows was teste. Nur mit der eigenen Software funktioniert es bei dem 64bit OS nicht. Oder habe ich da mit dem Treiber irgendwas falsch verstanden?!
Viele Grüße Alex |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Ist es eine eigene SW oder eine Kaufsoftware?
Falls eigen SW - Welche Kompos verwenden verwendet? |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Eigene Software die aber wie gesagt auf 32bit System läuft. Ich arbeite einfach nur mit CreateFile um den ComPort zu öffnen und dann wie hier überall im Forum beschrieben wird den ComPort lesen bzw. schreiben.
Viele Grüße Alex |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Du könntest ja mal versuchen mit einer der noch gepflegten COM-Kommunikationskomponenten zu arbeiten.
|
Re: 64Bit OS -> serielle Schnittstelle benutzen
So wird der ComPort initialisiert und die Overlapped Struktur erzeugt.
Delphi-Quellcode:
Erwähnenswert ist jetzt noch, dass der Empfang über die Serielle Schnittstelle Asynchron erfolgt.
StrPCopy (NullStr, FPort);
SerHandle := CreateFileA (NullStr, Generic_Read or Generic_Write, 0, Nil, Open_Existing, FILE_FLAG_OVERLAPPED, 0); if SerHandle <> INVALID_HANDLE_VALUE then begin if SetupComm (SerHandle, InBuffer, OutBuffer) then begin FillChar (DCB, SizeOf(DCB), 0); DCB.DCBlength := SizeOf (DCB); DCB.BaudRate := Baud; DCB.Flags := $0001; DCB.Parity := Ord (Parity); DCB.ByteSize := ByteSize; DCB.StopBits := Ord (StopBits); DCB.EvtChar := RXFlagChar; if SetCommState (SerHandle, DCB) then begin With CommTimeOuts do begin { TimeOut's setzen } end; if SetCommTimeouts(SerHandle, CommTimeOuts) then begin if RTSCTS = Ja then { Hardwarehandshake } begin EscapeCommFunction(SerHandle, SETRTS); EscapeCommFunction(SerHandle, SETDTR); end; Case RXEvent of { Eventmaske setzen } RXChar : TmpMask := EV_RXCHAR; RXFlag : TmpMask := EV_RXFLAG; RXRing : TmpMask := EV_RING; RXCTS : TmpMask := EV_CTS; RXDSR : TmpMask := EV_DSR; else TmpMask := 0; end; if SetCommMask(SerHandle, TmpMask) then begin StrPCopy (NullStr, 'Read_Test'); rOverlapped.hEvent := CreateEventA (NIL, { Security attr. } True, { Manuel reset ?? } False, { Signaled ?? } NullStr); { Signif.name } StrPCopy (NullStr, 'Write_Test'); wOverlapped.hEvent := CreateEventA (NIL, { Security attr. } True, { Manuel reset ?? } False, { Signaled ?? } NullStr); { Signif.name } if (rOverlapped.hEvent <> Null) and (wOverlapped.hEvent <> Null) then begin Success := True; end; end; end; end; end; end else begin ErrorCode := GetLastError; end;
Delphi-Quellcode:
Dann wartet ein Thread auf Signalisierung in der Overlapped Struktur und arbeitet danach die empfangenen Daten ab.
ReadFile (SerHandle, ReceiveBuffer, InBuffer div 2,
ReceivedBytes, @rOverlapped); Das funktioniert laut Debugger noch alles (er kommt überall rein) aber es scheinen nur die ersten 3 Bytes der empfangenen Daten gültig zu sein. Die Länge der Daten stimmt auch noch aber der Dateninhalt ab Byte 3 passt nicht mehr... Hat da jemand eine Idee zu? Viele Grüße Alex |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Braucht man für den COM-Port keinen Treiber? Und der Zugriff funktioniert auch mit eingeschränkten Benutzerrechten?
|
Re: 64Bit OS -> serielle Schnittstelle benutzen
Ich denke nicht, dass ich da ein extra Treiber brauche...
Korrigiert mich, falls ich falsch denke... Adminrechte sind verfügbar. Wie gesagt, es geht auf alle Maschinen mit 32bit nur 64bit eben nicht... Hab grad ComPortLib hier im Forum gefunden und mir angeguckt. Da wird auch mit Overlapped Events gearbeitet nur steht da extra schon im Source überall Win32 drinne... Das deutet doch schon auf eine Änderung bei 64bit hin... |
Re: 64Bit OS -> serielle Schnittstelle benutzen
Denk dran, dass du unter Windows 7 nicht automatisch Administratorenrechte hast, auch wenn du über das Administratorenkonto angemeldet bist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz