2012-12-19 164 views
2

我的問題,當我使用的SerialPort在AT命令throught C#+ CDS,任何時候我得到這個+ CDS截斷,例如:問題與+ CDS AT命令

+ CDS:25 0002970C91555868047414212181414094882121814140948830

爲什麼我有這個問題,爲什麼有時候工作很好?

我開始的SerialPort:

public PortCOM(string porta) 
      : base(porta, 115200, Parity.None, 8, StopBits.One) 
     { 
      this.StatusPort = StatusPorta.Ready; 
      this.DiscardNull = true; 
      this.ReadTimeout = 21000; 
      this.RtsEnable = true; 
      this.DtrEnable = true; 
      this.ReceivedBytesThreshold = 9; 
      this.NewLine = "\r\n"; 
      this.ReadBufferSize = 1024; 
     } 

    public static void TestPort() 
     { 
      var p = new PortCom("COM12"); 

      if (!p.IsOpen) 
       p.Open(); 

      p.StatusPort = StatusPorta.Ready; 
      p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceivedSample); 
      p.PinChanged += new SerialPinChangedEventHandler(p_PinChanged); 
      p.ErrorReceived += new SerialErrorReceivedEventHandler(p_ErrorReceived); 

      p.Disposed += new EventHandler((obj, porta) => 
      { 
       Console.WriteLine(((PortaCOM)obj).ToString()); 
      }); 

      if (Console.ReadKey().Key == ConsoleKey.B) 
      { 
       p.Close(); 
       p.Dispose(); 
      } 
     } 

static void p_DataReceivedSample(object sender, SerialDataReceivedEventArgs e) 
     { 
      var p = (PortaCOM)sender; 
      try 
      { 
       Console.WriteLine(p.ReadExisting()); 
       var sb = new StringBuilder(); 

       sb.Append(p.ReadExisting()); 
       int y = sb.ToString().IndexOf("\r\n"); 


       var stop = Stopwatch.StartNew(); 
       stop.Start(); 
       while (y == -1) 
       { 
        sb.Append(p.ReadExisting()); 
        y = sb.ToString().IndexOf("\r\n"); 
        if (stop.Elapsed.TotalSeconds > 10) 
         break; 
       } 
       stop.Stop(); 

       var _retorno = sb.ToString(); 
       var cmt = regCMT.Match(_retorno); 
       var succ = regSucess.Match(_retorno); 
       var report = regStatusReport.Match(_retorno); 
       var erro = regError.Match(_retorno); 


       #region Resposta 
       if (cmt.Success) 
       { 
        var smss = new SMS(); 
        var source = cmt.Groups[3].Value; 
        SMS.Fetch(smss, ref source); 
        var resposta = new Resposta() 
        { 
         Mensagem = smss.Message, 
         Data = smss.ServiceCenterTimeStamp, 
         Sender = smss.PhoneNumber, 
         Operadora = p.OperadoraName.NomeOperadora.ToString() 
        }; 

        GravaResposta().ToAsync(Scheduler.TaskPool).Invoke(p, cmt.Groups[3].Value); 
        p.IsError = false; 
       } 
       #endregion 

       #region StatusReport 
       if (report.Success) 
       { 
        RecebeReport(p, report.Groups[2].Value.Trim()); 
        p.IsError = false; 
       } 
       #endregion 
      } 
      catch (Exception err) 
      { 
       Console.WriteLine(err.Message); 
      } 
     } 

請我真的需要它的幫助,我很高興的任何幫助!

回答

1

+cds提醒SIM卡memeory上消息位置的傳入消息。

所以這裏它看起來在PDU模式下的數據。它似乎可能是Flash消息的內容。

將數據PDU模式轉換爲文本模式以接收消息。

查看詳情ATSMS library