2017-03-16 5 views
1

USBモデムが接続されており、ポート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 ERROR Z ATZ AT

(改行で分割)

どれだけ何送信を通じてWriteLineに(これは実際にはエコー)

モデムは私のコマンドをエコーすることができますが、モデムは「OK」を送信しませんが、いつかは「エラー」します。

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

A local test done by PassMark shows the modem is functional

たぶんTHEモデムではない読んTHE STREAM?̶

行われるために必要なすべての設定はありますか?

私はオンラインで掘り下げましたが、誰も似たような問題がないようです。

ありがとうございます。

+0

実際にはうまく動作し、本当の問題はありません。 OK応答を受け取るまで、ReadLine()を呼び出し続けることを忘れているだけです。エコーを無効にするには "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 

モデムが

OK

ATZ

あなたが "ATZ" をしたくない場合は、エコーをREPONSEすることができます正しい方法"AT"コマンドで "ATE0"を使用してください。 「ATZ」はATE0をリセットします。

関連する問題