【问题标题】:.NET SerialPort class with USB modem on Windows 10Windows 10 上带有 USB 调制解调器的 .NET SerialPort 类
【发布时间】: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


【解决方案1】:

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

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

好的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2011-11-13
    • 2013-12-16
    相关资源
    最近更新 更多