2017-03-16 140 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。

相關問題