qq_15803141
2017-11-07 03:13 浏览 5.3k

C#串口接收数据问题,怎么在处理数据前判断数据接收完毕

上位机接收数据格式如下:
0x53 0x50 0x01 0x01 0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 0x11 0x07 0x17 0x11 0x13 0x39
其中 53 50是包头,后面是有效数据,我现在想把0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 这几个字节分别转化为三个浮点数,但是问题是,我现在无法判断数据是否接收完毕,及完整的一个数据包。
注:通过按下一次单片机上的“确定键”,单片机给上位机发送一次数据,数据格式如上描述。请大家指点下,谢谢!

我是通过绑定串口接收事件实现的,但这样会多次触发串口接收事件,主要卡在数据接收和数据以浮点数显示环节,代码如下:
private void sp_DataReceived(object sender,SerialDataReceivedEventArgs e)
{

        if (isHex==true)
        {
            string str;
            uint i=0;
            int bufferlen = sp.BytesToRead;
            byte[] bytes = new byte[bufferlen];
            sp.Read(bytes, 0, bufferlen);
            for(i=0;i<bytes.Length;i++)
            {
                str= Convert.ToString((byte)bytes[i], 16).ToUpper();
                tbxRecvData.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");
             }
        }   
        else 
        {
            int bufferlen = sp.BytesToRead;
            byte[] bytes = new byte[bufferlen];
            sp.Read(bytes, 0, bufferlen);
            string gb = System.Text.Encoding.Default.GetString(bytes);
            tbxRecvData.AppendText(gb);
        }

    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-11-07 03:21

    包头里面是否有包的长度
    包结束的时候有没有标识
    如果以上都没有,就通过大于一个时间没有新的数据收到,表明已经接受完毕。

    点赞 2 评论 复制链接分享
  • qq_15803141 晓风哥哥的进阶之路 2017-11-07 06:03

    问题已解决,采用了集合缓存机制,项目卡到的主要原因是一个简单的语法问题

    点赞 评论 复制链接分享

相关推荐