首页 文章

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

提问于
浏览
1

我连接了一个USB调制解调器,它在端口COM1与putty工作正常 .

调制解调器能够响应命令

AT
OK
ATZ
OK

我尝试使用SerialPort类在.NET 2.0框架下执行相同的操作但是没有收到“OK” .

Code is updated for further testing

Initialize port

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")

Method 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 ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ

(按换行分组)

这正是我送通过的WriteLine(这实际上是一个回波)

调制解调器能够回显我的命令,但调制解调器不会发送“OK”但有时会发出“ERROR” .

This is the modemPort variable at runtime just before ReadLine()

A local test done by PassMark shows the modem is functional

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

是否需要进行任何配置?

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

提前致谢 .

1 回答

  • 0

    事实证明我只需要更加努力;)

    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
    

    调制解调器能够响应

    ATZ OK

    如果您不想要“ATZ”回音,请使用带有“AT”命令的“ATE0” . “ATZ”将重置ATE0 .

相关问题