.NET SerialPort class 带 USB 调制解调器 Windows 10

.NET SerialPort class with USB modem on Windows 10

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

调制解调器能够响应

等命令
AT
OK
ATZ
OK

我尝试在 .NET 2.0 框架下使用 SerialPort 做同样的事情 class 但从未收到 "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

然而我复活的只有echo

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 AT ERROR 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̶=echo实际上是[这个](这个是echo

调制解调器能够回应我的命令,但调制解调器不会发送 "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̶=̶[=19]

是否需要进行任何配置?

网上查了一下,好像没有人遇到过类似的问题。

提前致谢。

原来我需要更努力地挖掘。

I come across this page and find the solution

我做错了什么:

  1. 初始化的端口没有使用正确的编码。
  2. 换行符 \r\n 未正确转义。

正确的方法

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

调制解调器能够响应

ATZ

OK

如果您不想要“ATZ”回显,请使用“ATE0”和“AT”命令。 “ATZ”将重置 ATE0。