本帖最后由 RedFish2010 于 2010-06-24 10:18:25 编辑

解决方案 »

  1.   


                        HComPort.BaudRate = 921600;//set to your using
                        HComPort.DtrEnable = true;
                        HComPort.RtsEnable = true;                while (ATresult == ATstatus.WaitingResponse)
                    {
                        Thread.Sleep(100);
                        if (HComPort.BytesToRead > 0)
                        {
                            ATRx = ATRx + HComPort.ReadExisting();
                            if (TestOK(ATRx)) ATresult = ATstatus.OK;
                            if (TestERROR(ATRx)) ATresult = ATstatus.Error;
                        }
                        if (TimerCount > 30) { ATresult = ATstatus.TimingOut;}
                        else { TimerCount++; };
                    }
      

  2.   

    我用serialPort类写过程序的。但当时是在线程里面处理的。
    函数DataReceived时,当有出发时,串口里是有缓冲的。我有点不明白怎么会乱。你需要把一条数据都读出来,而不要去一位一位的去读取。不然的话就会出现一个触发和触发之间出现交替读取的。
    除非你所发的数据只有一位,同时串口通讯对于读取一条数据,是通过判断'\n'来取得结束的。所以你的那个短信猫发送的一条数据必须以'\n'结束。
      

  3.   

    我用serialPort类写过程序的。但当时是在线程里面处理的。
    函数DataReceived时,当有出发时,串口里是有缓冲的。我有点不明白怎么会乱。你需要把一条数据都读出来,而不要去一位一位的去读取。不然的话就会出现一个触发和触发之间出现交替读取的。
    除非你所发的数据只有一位,同时串口通讯对于读取一条数据,是通过判断'\n'来取得结束的。所以你的那个短信猫发送的一条数据必须以'\n'结束。
      

  4.   

    ls可否把你做过的代码打包发我一份,邮箱[email protected]。100分相送
      

  5.   

    可以用ReadLine(),不要用DataReceived
      

  6.   

    用同步阻塞线程读取数据,就不会同时触发多个DataReceived事件参考下面这个连接的SynReceiveData方法
    http://blog.sina.com.cn/s/blog_4a5e327701008880.html
      

  7.   

    你可以考虑在函数执行,主程序等待0.5s,然后根据CMIT和CMGR来判断读到的数据是否合适,然后对这些进行判断一一解析,其实我们关注的是短信内容,至于短信序号,谁在乎呢?