当前位置: 代码迷 >> C# >> c#串口为什么一次收到的数据不全啊
  详细解决方案

c#串口为什么一次收到的数据不全啊

热度:202   发布时间:2016-05-05 05:24:14.0
c#串口为何一次收到的数据不全啊。
  每次只收到设备发过来的一部分数据 要收几次才是完整的
代码如下。

   Sport.PortName = ApplicationSettings.PortName ;
            Sport.BaudRate = ApplicationSettings .BaudRate ;
            Sport.DataBits = 8;
            Sport.Parity = ApplicationSettings.InterfaceIp  == "NONE" ? Parity.None : (ApplicationSettings.InterfaceIp  == "ODD" ? Parity.Odd : Parity.Even);
            Sport.StopBits = StopBits.One;
            Sport.RtsEnable = true;
            try
            {
                Sport.Open();
                if (Sport.IsOpen)
                {
                    Sport.DataReceived += new SerialDataReceivedEventHandler(Sport_DataReceived);
                    DataProcessing.RunWorkerAsync();
                    log.Debug("串口打开成功");
                }
            }
            catch (Exception ee)
            {

                log.Error("串口未能打开" + ee);
            }




接收的方法

  if (!isExit)
            {
                lock (readLock)
                {
                    if (myQ.Count > 5000)
                    {
                        myQ.Dequeue();
                    }
                    int n = Sport.BytesToRead;
                    if (n > 0)
                    {
                        byte[] buf = new byte[n];
                        Sport.Read(buf, 0, n);
                        myQ.Enqueue(buf);
                        string hex = ComLibrary.Coder.TextEncoder.ByteArrayToHexString(buf);
                        log.Debug("接收:" + hex);
                    }
                }
            }


代码接收跟定义如上。拿到项目上测试收到的代码的时候每次都没收全。到底是我代码的问题还是项目设备的问题啊
  
------解决思路----------------------
串口发送数据还真没研究过,不过数据发送接收基本都是有分段的,拆分为一个个的数据包发送,一次发送太理想,拆分发送才通用嘛!
------解决思路----------------------
所以一般自己会定制通讯协议,然后根据协议的标志位和校验来验证一条数据是否接受完整且有效
  相关解决方案