Windows 10上带有USB调制解调器的.NET SerialPort类

时间:2017-03-16 10:18:03

标签: vb.net serial-port .net-2.0

我连接了USB调制解调器,它在端口COM1上使用putty工作正常。

调制解调器能够响应

之类的命令
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

然而,我复活的只是回声

  

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   在   错误   ž   ATZ

(按换行分组)

w̶h̶i̶c̶h̶̶i̶s̶̶j̶u̶s̶t̶̶w̶h̶a̶t̶̶I̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶

调制解调器能够回显我的命令,但调制解调器不会发送“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̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶

是否需要进行任何配置?

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

原来我只需要更加努力;)

I come across this page and find the solution

我做错了什么:

  1. 初始化的端口未使用正确的编码。
  2. NewLine字符\ r \ n未正确转义。
  3. 正确的方法

    ModemPort.DtrEnable = True
    ModemPort.Handshake = Handshake.XOnXOff
    ModemPort.NewLine = Chr(13) + Chr(10)
    ModemPort.Encoding = System.Text.Encoding.ASCII
    

    调制解调器能够响应

      

    ATZ

         

    如果你不想要" ATZ"回声,使用" ATE0"用" AT"命令。 " ATZ"将重置ATE0。