2017-03-16 89 views
1

我有一个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

也许调制解调器不读流?̶

是否有需要做任何配置?

我做了一些在线挖掘,但似乎没有人有类似的问题。

在此先感谢。

+0

所以它实际上工作得很好,你没有真正的问题。你只是忘了继续调用ReadLine(),直到获得OK响应。您可以发送“ATE0”来禁用回声。 –

+0

谢谢:)进一步测试后,确实是调制解调器的回声。现在我只需要弄清楚为什么它没有回应“OK”。 – Wong

+0

我想我解决了它,你的帮助对我来说是一个正确的方向迈出的巨大的一步谢谢; )现在写答案。 – Wong

回答

0

原来我只需要挖更难;)

I come across this page and find the solution

我做了什么错:

  1. 没有使用正确的编码初始化的端口。
  2. 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。

相关问题