沐风电子工作室(李晓风) 2017-11-07 03:13 采纳率: 0%
浏览 6479

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条回答

  • 关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘