2017-03-16 29 views
1

J'ai un modem USB connecté et il fonctionne correctement sur le port COM1 avec du mastic.Classe .NET SerialPort avec modem USB sous Windows 10

Le modem est capable de répondre à des commandes telles que

AT 
OK 
ATZ 
OK 

J'ai essayé de faire la même chose dans le cadre .NET 2.0 en utilisant la classe SerialPort mais pas « OK » jamais reçu.

code est mis à jour pour d'autres essais

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

Méthode 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 

Cependant, tout ce que je revis est l'écho

Dim entrant As String = modemPort.ReadExisting()

est

ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ ATZ AT ERREUR Z ATZ

(Split par les nouvelles lignes)

whıch était exactement ce que Ï ENVOYEE PAR LA VOIE writeLine (Ceci est en fait un echo)

Le modem est capable d'echo mes commandes mais le modem n'enverra pas un "OK" mais parfois "ERREUR".

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

A local test done by PassMark shows the modem is functional

MayBe DU MODEM NON RESPECT DU CIRCUIT? ̶

Y at-il la configuration nécessaire pour faire?

J'ai fait quelques recherches en ligne, mais il semble que personne n'ait les mêmes problèmes.

Merci d'avance.

+0

Donc, cela fonctionne vraiment bien et vous n'avez pas de réel problème. Vous oubliez juste d'appeler ReadLine() jusqu'à ce que vous obteniez la réponse OK. Vous pouvez envoyer "ATE0" pour désactiver l'écho. –

+0

Merci :) Après d'autres tests, il est en effet l'écho du modem. Maintenant, j'ai juste besoin de comprendre pourquoi il ne répond pas "OK". – Wong

+0

Je pense que je le résous, votre aide est un grand pas dans la bonne direction pour moi Merci; Ecrire la réponse maintenant. – Wong

Répondre

0

se trouve que j'ai juste besoin de creuser plus difficile;)

I come across this page and find the solution

Ce que je fait de mal:

  1. Le port initialisé est de ne pas utiliser le codage à droite.
  2. Les caractères NewLine \ r \ n ne sont pas correctement échappés.

La bonne façon

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

Le modem est capable de Reponse

ATZ

OK

Si vous ne voulez pas l'écho "ATZ" , utilisez la commande "ATE0" avec "AT". "ATZ" réinitialisera ATE0.