在Windows 10上使用USB调制解调器的.NET SerialPort类
问题描述:
我有一个USB调制解调器已连接,它在使用putty的COM1端口上工作正常。在Windows 10上使用USB调制解调器的.NET SerialPort类
调制解调器能够响应命令,如
AT
OK
ATZ
OK
我试着做下使用SerialPort类 .NET 2.0框架,但没有“OK”时收到过同样的事情。
代码还可测试
初始化端口更新
Dim ModemPort As SerialPort
ModemPort.DtrEnable = True
ModemPort.Handshake = Handshake.XOnXOff
ModemPort.NewLine = "\r\n" '(Added but the problem still exist)
'ModemPort.ReadTimeout = 3000 (Removed for testing)
SendSerialData(ModemPort, "ATZ")
方法SendSerialData
Function SendSerialData(ByRef modemPort As SerialPort, ByVal data As String)
Dim returnStr As String = ""
If modemPort.IsOpen = False Then
modemPort.Open()
End If
'Updated
modemPort.WriteLine(data) 'ATZ
System.Threading.Thread.Sleep(1000)
Try
Do
Dim Incoming As String = modemPort.ReadExisting()
If Incoming = "OK" Then
Exit Do
End If
If Incoming = "" Then
modemPort.WriteLine(data)
System.Threading.Thread.Sleep(1000) 'Modem will send "Error" sometime
Else
returnStr &= Incoming
End If
Loop
Catch ex As Exception
End Try
Return returnStr
End Function
然而,所有我复活了回音
昏暗传入作为字符串= modemPort.ReadExisting()
是
ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ AT ERROR Ž ATZ
(由换行拆分)
这正是我送通过的WriteLine(这实际上是一个是回声)
调制解调器是能够回应我的命令,但调制解调器不会发送“确定”,但有时会发送“错误”。
This is the modemPort variable at runtime just before ReadLine()
A local test done by PassMark shows the modem is functional
也许调制解调器不读流?̶
是否有需要做任何配置?
我做了一些在线挖掘,但似乎没有人有类似的问题。
在此先感谢。
答
原来我只需要挖更难;)
I come across this page and find the solution
我做了什么错:
- 没有使用正确的编码初始化的端口。
- NewLine字符\ r \ n未正确转义。
正确的方法
ModemPort.DtrEnable = True
ModemPort.Handshake = Handshake.XOnXOff
ModemPort.NewLine = Chr(13) + Chr(10)
ModemPort.Encoding = System.Text.Encoding.ASCII
调制解调器能够REPONSE
ATZ
OK
如果您不希望 “ATZ” 回声,用“AT”命令使用“ATE0”。 “ATZ”将重置ATE0。
所以它实际上工作得很好,你没有真正的问题。你只是忘了继续调用ReadLine(),直到获得OK响应。您可以发送“ATE0”来禁用回声。 –
谢谢:)进一步测试后,确实是调制解调器的回声。现在我只需要弄清楚为什么它没有回应“OK”。 – Wong
我想我解决了它,你的帮助对我来说是一个正确的方向迈出的巨大的一步谢谢; )现在写答案。 – Wong