【发布时间】:2017-03-16 10:18:03
【问题描述】:
我连接了一个 USB 调制解调器,它在端口 COM1 上使用 putty 工作正常。
调制解调器能够响应类似的命令
AT
OK
ATZ
OK
我尝试在 .NET 2.0 框架下使用 SerialPort 类做同样的事情 但从未收到“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
然而,我复活的只是回声
Dim Incoming As String = modemPort.ReadExisting()
是
ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ 在 错误 Z ATZ
(用换行符分割)
w̶h̶i̶c̶h̶̶i̶s̶̶j̶u̶s̶t̶̶w̶h̶a̶t̶̶I̶̶s̶e̶n̶t̶̶t̶h̶r̶o̶u̶g̶h̶̶W̶r̶i̶t̶e̶L̶i̶n̶e̶(这其实是回声)
调制解调器能够回显我的命令,但调制解调器不会发送“OK”而是有时会发送“ERROR”。
This is the modemPort variable at runtime just before ReadLine()
A local test done by PassMark shows the modem is functional
M̶a̶y̶b̶e̶̶t̶h̶e̶̶m̶o̶d̶e̶m̶̶n̶o̶t̶̶r̶e̶a̶d̶i̶n̶g̶̶t̶h̶e̶̶s̶t̶r̶e̶a̶m̶?̶
有什么需要做的配置吗?
我在网上做了一些挖掘,但似乎没有人有类似的问题。
提前致谢。
【问题讨论】:
-
所以它实际上工作得很好,你没有真正的问题。您只是忘记继续调用 ReadLine() 直到获得 OK 响应。您可以发送“ATE0”来禁用回声。
-
谢谢 :) 经过进一步测试,确实是调制解调器回声。现在我只需要弄清楚为什么它没有响应“OK”。
-
我想我解决了,你的帮助是我朝着正确方向迈出的一大步谢谢; ) 现在写答案。
标签: vb.net serial-port .net-2.0