2017-02-13 197 views
1

我有一些愚蠢的代碼來訪問Windows COM端口(只是最相關的功能的一些僞代碼):訪問COM端口與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); 

從串口數據的讀取完成與

ReadFile() 

WriteFile() 

寫在我的特殊情況下,設備是連接作爲一個詩里亞USB小工具l接口和速度設置和其他事情並不重要。

此代碼與所有Windows版本(包括8.1)一起工作正常,但對於Windows 10,某些用戶報告與設備沒有可能的通信。不幸的是,我沒有相關的Win10版本進行測試。

所以我的問題:是否有一些問題/在Windows 10中可能會導致此類行爲或需要在串行端口通信中的一些變化的重要更改?

謝謝!

****** 更新 ************************************* *****************************

正如更新到此:函數SetCommState()失敗,出現錯誤87(ERROR_INVALID_PARAMETER )。如果我使用從GetCommState()接收的數據或者我完全初始化並配置了DCB結構,那麼設置自己的參數並不重要。所以......這是Win 10的SetCommState()中的一個已知錯誤?

只是要注意:它只在5個案例中的4個失敗,所以它不是一個系統性錯誤,而是一個隨機錯誤!

+0

我不知道可能存在什麼理由downvote這個問題...但並不奇怪,這些人是在大多數情況下無膽夠不給予任何評論...... – Elmi

回答

1

最後:現在看來,這是一個Windows的問題,微軟已經搗毀了Usbser.sys驅動程序。有關於這個問題,在那裏很多線程:

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

第二個是最有趣的一個:它以「我們仍然有問題」結尾的 - 然後是由MS工作人員關閉。

我個人發現了一箇舊的Windows 10安裝在那裏usbser.sys工作得很好 - 並應用所有可用的Windows補丁(包括usbser.sys的更新)後,問題出現了。

0

我們也對同時RealTerm上非常相同的端口工作不返回任何COM端口,ReadFile的問題。 事實證明,Windows沒有正確激活導致這些問題。