2016-11-07 16 views
0

Я попытался отправить AT-команды, открыв соединение с последовательным портом, и моей целью было отправить SMS-сообщение. Я смог достичь этого, и сообщение было отправлено, что является признаком успешного завершения метода WriteLine(). Тем не менее, я не могу получить ответ в буферах приема. Я включил эхо, посмотрев на некоторые ответы здесь, на stackoverflow.AT Command Works, но не ответ

Но все еще нет ответа. Я попробовал ожидание с помощью Thread.Sleep(), а также с помощью обработчика p_DataReceived. По-прежнему нет ответа.

Одним примером может быть простая команда «AT», которая должна иметь отклик «ok». Но нет ответов на все (т.е. BytesToRead размер имущественного 0)

Я пытаюсь это с dwm222 4G LTE USB-адаптер D-Link

Все указатели будут очень признательны!

private void button_Click(object sender, RoutedEventArgs e) 
    { 



     mySerialPort = new SerialPort("COM15"); 
     mySerialPort.BaudRate = 9600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 

     mySerialPort.Handshake = Handshake.None; 
     mySerialPort.NewLine = Environment.NewLine; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived); 
     mySerialPort.Open(); 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 


     mySerialPort.WriteLine("ATE1"); //turn on echo 


     mySerialPort.WriteLine("AT"); //test response 


     Thread.Sleep(3000); 
     string responseSTR = mySerialPort.ReadLine(); 

     if (responseSTR.Contains("OK")) //empty string 
     { 

      MessageBox.Show(responseSTR); 
     } 

     this.SendSms("+XXXXXXXXXXXXXXXXXXX", "Hello From C#"); 

     mySerialPort.Close(); 

    } 

    public void p_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string s = (sender as SerialPort).ReadExisting(); 
     buff += s; 
     MessageBox.Show(buff); 
    } 

    void SendSms(string destination, string text) 
    { ........} 
+0

Ваше мероприятие стреляет? и в окне сообщений отображается значение null? –

+0

никакого события не вызвано, а ответSTR пуст, т. Е. ОтветSTR = "". –

+0

Другой вопрос: Можете ли вы попробовать разные настройки «mySerialPort.NewLine =»? Потому что «Environment.NewLine» - «\ r \ n» в Windows (CR + LF). И, может быть, ваш модем отвечает только «CR». Стоит попробовать: mySerialPort.NewLine = "\ r", или что-то в этом коде для C#. –

ответ

0

я думаю, что вы должны отказаться от буфера каждый раз, так что вы должны получить свежие входящие данные попробуйте этот код я модифицировал в обработчике событий

public void p_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string s = mySerialPort.ReadExisting(); 
     buff += s; 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 
     MessageBox.Show(buff); 
    } 
+0

Спасибо, zain, будет использовать это, чтобы очистить буфер, моя основная проблема заключалась в том, что buffersize было 0, то есть BytestoRead равно 0. Я только выяснил, что разрешение DTR и RTS является решением. –

1

Включение DTR и RTS завалили буфер объект последовательного порта.

 mySerialPort = new SerialPort("COM17"); 
     mySerialPort.BaudRate = 9600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 

     mySerialPort.Handshake = Handshake.None; 
     mySerialPort.NewLine = Environment.NewLine; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived); 

     mySerialPort.Open(); 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 
     mySerialPort.DtrEnable = true; //this solved my problem 
     mySerialPort.RtsEnable = true; //this solved my problem