2017-02-13 57 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没有正确激活导致这些问题。