jonahxuworld 2021-10-20 15:09 采纳率: 93.1%
浏览 76
已结题

C#Winform如何比对串口发送的数据与接收的数据呢?

我循环了两次,想第一次结束接受到的数据与发送的数据进行比对,如果对的话就继续循环,那要怎么做呢?
这是发送的数据{"c":"run","x":"0","y":"0","z":"0","r":"0","v":"322"}
这是接收的数据{"c":"done"x":"0.0 "y":"0.0 "z":"48"r":"0.0 ","v":"26108"}
在serialPort.Write(sd, 0, sd.Length);后面要怎么写呢?

下面是接收的代码

        void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                int len = serialPort.BytesToRead;
                Byte[] InputBuf = new Byte[len];
                serialPort.Read(InputBuf, 0, len);
                ASCIIEncoding encoding = new ASCIIEncoding();
                data = encoding.GetString(InputBuf);
                new Thread(SetReceiveData).Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
        public void SetReceiveData()
        {
            lock (this)

                Invoke(new MethodInvoker(delegate ()

                {

                    this.txtReceive.AppendText(data);

                }));

        }

这是发送的代码

private void btnSend_Click(object sender, EventArgs e)
        {
            byte[] sendData = null;
            byte[] sd = null;
            byte[] datacoding = null;
            if (!serialPort.IsOpen) //如果没打开
            {
                MessageBox.Show("请先打开串口!", "Error");
                return;
            }

            String strSend = txtSend.Text;
            try
            {
                for(int i=1;i<=2;i++)
                {
                    string valuex = @""""+ini.IniReadValue("坐标值" + i, "x")+ @"""";
                    string valuey = @""""+ini.IniReadValue("坐标值" + i, "y")+ @"""";
                    string valuez = @""""+ini.IniReadValue("坐标值" + i, "z")+ @"""";
                    string valuer = @""""+ini.IniReadValue("坐标值" + i, "r")+ @"""";

                    sd = Encoding.UTF8.GetBytes(@"{""c"":""run""," + @"""x"":" + valuex + "," + @"""y"":" + valuey + "," + @"""z"":" + valuez + "," + @"""r"":" + valuer + "," + @"""v"":""322""}");
                    serialPort.Write(sd, 0, sd.Length);
                    textBox12.AppendText(valuex);
                    Thread.Sleep(10000);          

                }
                sd = Encoding.UTF8.GetBytes(@"{""c"":""run"",""x"":""0"",""y"":""0"",""z"":""0"",""r"":""0"",""v"":""322""}");
                serialPort.Write(sd, 0, sd.Length);

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error:" + ex.Message, "Error");
            }

        }
        

  • 写回答

1条回答 默认 最新

  • 於黾 2021-10-20 15:20
    关注

    你是对等网络吗,对方会随时随地给你发数据吗,如果不是,别用Comm_DataReceived事件去接收,直接在write之后写个sleep,然后receive
    否则即使你接收到了数据,也要自己解决分包拆包,如何去跟发送的数据去匹配,一大堆麻烦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 对语音信号进行变调时,间接改变时序从而实现语音变速,进而将变调与变速同时实现、参数合成法换为波形合成法
  • ¥15 Python实现hog特征图可视化
  • ¥30 德飞莱51单片机实现C4炸弹
  • ¥50 CrossLink-LIF-MD6000 型 FPGA 的 CMOS 转 MIPI D-PHY IP 核功能使用异常
  • ¥15 proteus控制16x16LED点阵显示屏的设计
  • ¥30 求会做山景bp1048b2程序的。做直播声卡用
  • ¥15 求数学建模论文问题指导
  • ¥15 51单片机与数码管实现电子琴
  • ¥15 h3.6m 人类行为预测论文复现