2016-11-07 3 views
0

직렬 포트 연결을 열어 AT 명령을 보내려고했지만 목표는 SMS를 보내는 것이 었습니다. 이 작업을 수행 할 수 있었으며 메시지가 전송되었습니다. WriteLine() 메서드가 성공적으로 완료되었음을 나타내는 기호입니다. 그러나, 나는 내 수신 버퍼에 어떤 응답을 얻을 수 없습니다. 나는 stackoverflow에 대한 답변의 일부를보고 에코를 켰습니다.AT Command Works,하지만 응답 없음

하지만 여전히 응답이 없습니다. Thread.Sleep()을 사용하고 p_DataReceived 핸들러를 사용하여 대기를 시도했습니다. 아직 응답이 없습니다.

"ok"응답이 있어야하는 간단한 "AT"명령 일 수 있습니다. 그러나 전혀 반응이

내가

모든 포인터는 크게 감상 할 수있다 D - 링크의 dwm222 4G LTE USB 어댑터와 함께이 노력하고있어 (즉 BytesToRead 속성 크기가 0입니다) 없습니다!

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

이벤트가 실행 중입니까? messagebox가 null을 표시하고 있습니까? –

+0

이벤트가 트리거되지 않고 응답 STR이 비어 있습니다 (예 : responseSTR = ""). –

+0

또 다른 질문 : 다른 "mySerialPort.NewLine ="설정을 시도해 볼 수 있습니까? Windows에서 "Environment.NewLine"은 "\ r \ n"이므로 (CR + LF). 그리고 아마도 모뎀은 "CR"만을 사용합니다. 시도해 볼만한 가치가 있습니다 : mySerialPort.NewLine = "\ r"또는 C#에서이 코드가 올바른 것입니다. –

답변

0

는 난 당신이 DTR과 RTS를 사용

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

가의 버퍼를 가득 신선한 들어오는 데이터 내가 이벤트 핸들러에서 수정 한이 코드를 시도 가야 있도록마다 버퍼를 폐기해야한다고 생각 직렬 포트 개체.

 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