当前位置:编程学习 > C#/ASP.NET >>

C# serialport类编写串口通信程序,无法接收全部数据!

[img=http://hiphotos.baidu.com/zhidao/abpic/item/aec379319ad8c063eac4af6c.jpg?t=1323573706883][/img]C# serialport类编写串口通信程序,无法接收全部数据!通信指令发出之后,收到9个字节,而正确返回的字节数应该有59个字节。一开始我怀疑是下位机的问题,可是我用串口精灵调试的时候可以收到59个字节,所以我肯定是我程序的问题!求大神指教!!!图片是我向串口精灵的作者的提问,请大家帮我想想办法。 下面是serialport初始化:
          cbbCOMPorts.Enabled = false;
                serialPort.PortName = cbbCOMPorts.Text;
                serialPort.BaudRate = 9600;
                serialPort.Parity = Parity.None;
                serialPort.DataBits = 8;
                serialPort.StopBits = StopBits.One;
                serialPort.Encoding = Encoding.Unicode;
                serialPort.Encoding = System.Text.Encoding.Unicode;
                serialPort.Open();

    这个是发出指令
    private void btn_xunjian_Click(object sender, EventArgs e)//巡检
        {
            try
            {
                btn_xunjian.Enabled = false;
                Byte[] BSendTemp = { 0x00, 0x00, 0xff, 0xff, 0xcc, 0x01, 0x01, 0x02, 0x40, 0x00, 0x44 }; //通信指令
                serialPort.Write(BSendTemp, 0, 11);//发送命令数据 
                 Thread.Sleep(1000);
                btn_xunjian.Enabled = true;

               
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString());
            }
        }
下面是接受字节的程序
      int bytesToRead =serialPort.BytesToRead;
            byte[] BRecieve = new byte[bytesToRead];
            int bytesRead = 0;
            bytesRead = serialPort.Read(BRecieve, 0, bytesToRead);
//读取
            string str = ByteArrayToHexString(BRecieve);
            txtDataReceived.AppendText(str+Environment.NewLine);
            txtDataReceived.ScrollToCaret();
请高手帮我看看 --------------------编程问答-------------------- 串口数据一般无法一次serialPort.Read就能把数据全部读取完全,你需要用一个循环调用serialPort.Read,并且把所有读到数据拼接起来,并且数据应该有帧头帧尾标志,用标志来切割数据,

而且最好用异步方式读取, --------------------编程问答-------------------- 比较9个字节和59个字节,这9个字节是59字节的前面9个,还是说完全不同的两组数据。
比较你2个帖子的发送指令就不一样了,我怀疑不是接收程序的问题,而是你发送出问题。9个字节不是正常返回的数据,而是错误信息,59个字节是正常数据。应该是你误把错误信息当初正常数据,以为是接收不完整。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,