我们有一个通过 USB 电缆连接并模拟 COM 端口的设备。在打开连接后使用我们旧的 VB6 应用程序和 MSComm 控件,每当 VB6 应用程序向设备发送一个字节时,设备就会返回一个字节。
现在,我们将 VB6 应用程序移植到 .Net 并使用SerialPort
该类进行通信。port.Write
成功了,但port.ReadByte
遇到了我们使用TimeOutException
的每一个可以想到的问题。ReadTimeOut
从表面上看,波特率、奇偶校验等所有设置都是相同的。奇怪的是,如果我们首先启动旧的 VB6 应用程序并关闭它(连接到设备),.Net 代码也会开始工作,直到我们拔下并重新插入设备。
因此,在某种程度上,MSComm 控件以一种SerialPort
无法实现的方式使设备栩栩如生。VB6 应用程序中打开连接并开始通信的代码很简单,并且已转换为 C#。
我使用端口监视器查看实际发送了哪些数据,并且确实 MSComm 控件在开始实际数据传输之前向设备发送了更多的控制字节。我能够辨别的唯一有意义的区别是 MSComm 控件对 Xon Xof、EvtChar 等使用了其他控制字符。但是在调整了这些之后SerialPort
(见这个链接没有任何改变。
还有什么可以发生的?是否应该更仔细地调查通过端口发送的数据最终给出答案,还是完全是其他事情?