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

hlxk11hlxk11 2011-12-11 11:21:11
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();
请高手帮我看看
...全文
244 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2011-12-11
  • 打赏
  • 举报
回复
比较9个字节和59个字节,这9个字节是59字节的前面9个,还是说完全不同的两组数据。
比较你2个帖子的发送指令就不一样了,我怀疑不是接收程序的问题,而是你发送出问题。9个字节不是正常返回的数据,而是错误信息,59个字节是正常数据。应该是你误把错误信息当初正常数据,以为是接收不完整。
stonespace 2011-12-11
  • 打赏
  • 举报
回复
串口数据一般无法一次serialPort.Read就能把数据全部读取完全,你需要用一个循环调用serialPort.Read,并且把所有读到数据拼接起来,并且数据应该有帧头帧尾标志,用标志来切割数据,

而且最好用异步方式读取,

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧