2017-02-13 6 views
1

ich einige dumme Code haben einen Windows COM-Port für den Zugriff auf (nur einige Pseudo-Code der wichtigsten Funktionen):Zugriff auf COM-Port mit Windows-10

// open device: 
COMMTIMEOUTS timeouts; 
DCB   ComSettings; 

memset(&ComSettings,0,sizeof(ComSettings)); 
ComSettings.DCBlength=sizeof(DCB); 
*fd=CreateFile(serialParams>port,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); 
GetCommState(*fd,&ComSettings); 
ComSettings.BaudRate=9600; 
ComSettings.ByteSize=8; 
ComSettings.Parity=NOPARITY; 
ComSettings.fParity=0; 
ComSettings.StopBits=ONESTOPBIT; 
ComSettings.fOutX=FALSE; 
ComSettings.fInX=FALSE; 
ComSettings.fBinary=TRUE; 
ComSettings.fDtrControl=DTR_CONTROL_DISABLE; 
ComSettings.fRtsControl=RTS_CONTROL_DISABLE; 
ComSettings.fAbortOnError=FALSE; 

SetCommState(*fd,&ComSettings); 

timeouts.ReadIntervalTimeout  =MAXDWORD; 
timeouts.ReadTotalTimeoutMultiplier =0; 
timeouts.ReadTotalTimeoutConstant =0; 
timeouts.WriteTotalTimeoutMultiplier=0; 
timeouts.WriteTotalTimeoutConstant =250; 

SetCommTimeouts(*fd, &timeouts); 

Lesen von Daten aus seriellen Schnittstelle erfolgt mit

ReadFile() 

und

WriteFile() 

In meinem speziellen Fall ist das Gerät ein USB-Gerät mit dem Schreiben, das als seria verbindet l Interface und wo Geschwindigkeitseinstellungen und andere Dinge nicht wirklich wichtig sind.

Dieser Code funktioniert gut mit allen Windows-Varianten einschließlich 8.1, aber für Windows 10 berichten einige Benutzer, dass keine Kommunikation mit dem Gerät möglich ist. Leider habe ich nicht die zugehörige Win10-Version zum Testen.

Also meine Frage: Gibt es einige Probleme/wichtige Änderungen in Windows 10, die ein solches Verhalten verursachen könnten oder einige Änderungen in der seriellen Kommunikation erfordern?

Danke!

****** aktualisieren ************************************* *******************************

Nur als Update zu diesem: Funktion SetCommState() schlägt mit einem Fehler 87 (ERROR_INVALID_PARAMETER). Hier ist es egal, ob ich eigene Parameter setze, ob ich die von GetCommState() empfangenen Daten verwende oder ob ich die DCB-Struktur vollständig initialisiere und konfiguriere. Also ... ist das ein bekannter Fehler in SetCommState() von Win 10?

Nur zu beachten: es scheitert nur in 4 von 5 Fällen, also ist es kein systematischer Fehler, sondern ein zufälliger!

+0

Ich weiß nicht, welchen Grund es gibt, diese Frage zu verwerfen ... aber nicht überraschend, dass diese Leute in den meisten Fällen gut genug sind, um keinen Kommentar abzugeben ... – Elmi

Antwort

1

Endlich: es scheint, es ist ein Windows-Problem, Microsoft hat den USBSer.sys-Treiber zerstört. Es gibt eine Menge von Threads zu diesem Problem gibt:

https://answers.microsoft.com/en-us/windows/forum/windows_10-hardware-winpc/usb-serial-interface-problems-with-windows-10/562943cb-9a65-4900-98ef-03ba453d2742

https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_devices/windows-10-serial-usb-problems/438de66f-7294-4c06-b4fb-89b45d005ca0

Das zweite ist die interessanteste: es endet mit „wir haben immer noch das Problem“ - und dann ist es geschlossen von MS-Mitarbeitern.

Ich persönlich fand eine alte Windows 10-Installation, wo usbser.sys gut funktionierte - und nach dem Anwenden aller verfügbaren Windows-Patches (einschließlich einer Aktualisierung von usbser.sys) erschien das Problem.

0

Wir hatten auch Probleme mit ReadFile auf COM-Ports, die nichts zurückgaben, während RealTerm an denselben Ports arbeitete. Wie sich herausstellte, wurde Windows nicht richtig aktiviert, was diese Probleme verursachte.

Verwandte Themen