串口接收数据不全,该怎么处理
串口接收数据不全
我用超级终端可以接收到数据,但我自己只能收到一半为什么 呢?哪里出错了?


------解决思路----------------------
用sp的异步接收回调函数也一样
它也并不能区分什么时候算一个完整的数据
所以任何时候执行这个回调都是有可能的
比如对方给你发了16个字节,可能接收到8个字节,它就已经执行了
你需要先把接收到的内容放到list<byte>里,然后再次接收到数据之后拼接到后面
------解决思路----------------------
这是我以前做的,你可以试一下,可能是比较笨的方法,发送指令后是休眠了一秒才去接收的返回数据。
我用超级终端可以接收到数据,但我自己只能收到一半为什么 呢?哪里出错了?
------解决思路----------------------
用sp的异步接收回调函数也一样
它也并不能区分什么时候算一个完整的数据
所以任何时候执行这个回调都是有可能的
比如对方给你发了16个字节,可能接收到8个字节,它就已经执行了
你需要先把接收到的内容放到list<byte>里,然后再次接收到数据之后拼接到后面
------解决思路----------------------
这是我以前做的,你可以试一下,可能是比较笨的方法,发送指令后是休眠了一秒才去接收的返回数据。
byte[] temp3 = mysendb("FF FF 02 02 FF FF");//结束操作
byte[] temp1 = mysendb("FF FF 00 00 FF FF"); //复位指令
byte[] temp2 = mysendb("FF FF 01 01 01 03 30 FF FF"); //设置操作时间指令
try
{
if (!serialPort1.IsOpen)
{
serialPort1.Open();
}
serialPort1.Write(temp1, 0, 6);//发送复位数据
Thread.Sleep(1000);
byte[] recb = new byte[6];//接收复位返回值
int iffuwei = serialPort1.Read(recb, 0, 6);
if (iffuwei != 6)
{
MessageBox.Show("复位未成功!");
timer1.Start();
return;
}
Thread.Sleep(1000);
serialPort1.Write(temp2, 0, 9);//发送考核数据
timer1.Stop();
//启动定时
timer3.Interval = 1000;
timer3.Start();
}
catch
{
timer1.Start();
return;
}