2

SerialPortを使用してATCOMMANDでc#を介して+ CDSを取得すると、この+ CDSが切り捨てられるたびに、問題が発生します。例:

+ 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);
            }
        }

本当に助けが必要です、助けてくれてうれしいです!

4

1 に答える 1

1

+ cdsは、SIMメモリ上のメッセージの場所を含む着信メッセージを警告します。

したがって、ここではPDUモードデータのようです。フラッシュメッセージの内容かもしれません。

メッセージを受信するには、データPDUモードをテキストモードに変換します。

このATSMSライブラリを確認する

于 2013-01-01T16:56:12.270 に答える