控制器给C#上位机窗口程序发送数据的字节接收问题

现在的问题是:设置断点后,发现接收的字节长度不稳定,最少是4个,最多会达到上千个。
代码原先是这么写的:
int lenth = serialPort1.BytesToRead;
if (lenth != 0)
{
Byte[] receiveByte = new Byte[length];
serialPort1.Read(receiveByte, 0, length)
………………………………………………………
…………接收的字节转换流程………………
………………………………………………………
}
我想问一下:如果要是固定的每次接收5个字节(包括了报头),是不是需要把receiveByte的字节长度和串口控件的Read方法的第三个参数改成5就行了?

现在控制器被人借走暂时无法尝试,如果有其他方法欢迎推荐

2个回答

我记得,serialPort接收到的数据本来就是长度不固定的,有时是N,有时是M,本来就是这样的,和TCP接收数据段是一样的呀,你得自己收集到足够的长度后再解析的

  • 你的说法是对的,如果只要5个字节,就把长度设置成5,那么它会至多只给你5个字节,
  • 但是你的想法是不对的。你每次要5个字节的话。我以为是你觉得5个字节正好是你的一个数据块,可以分析出一点东西来。
  • 但是万一通讯过程中掉了1个字节数据,你的数据就永远偏了一个字节。所以永远也不会有正确数据了,除非重启通讯。
  • 比较好的做法是设定一个协议,在看到协议开始标识前的所有字符都丢弃。(那可能是前一个包的丢了部分数据的剩余部分)
gamefinity
知常曰明 回复KyKiske22: 对,有相应的协议判断,我结社你的协议是5个字节。那么第一次读的五个字节,假设说判断出来是失败的,实际情况是一个字节掉了。你其实读到第一个包和第二个包的第一字节。失败了以后你又去读下一个5字节,读到第二个包的2-5字节与第三个包的第一字节(如果第三个包来了的话)。。。那样永远也不对了啊。根据你的说发,很可能N个包一起来,那这些包都解析不到了。
4 年多之前 回复
KyKiske22
KyKiske22 在转换方法里设定了相应的协议和对首位的判断了,这里没有列出
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
利用qt编写基于光敏传感器和红外传感器的上位机系统
4
什么软件可以模拟下位机通过USB向上位机发送数据
5
C# socket接收单片机数据问题
3
C# 如何使用socket实现基于TCP协议传输数据
3
【MFC,VS2013中使用Serialport类的问题???急】
4
一个物联网方面的问题,做一个基于WiFi的楼宇能耗监测系统,软件部分怎么设计比较好,类似这个文档里的
2
c#上位机与单片机通信,上位机接收不到单片机返回的数据
3
多显示器编程上位机软件(一台主机外接三台显示器,主显示器上的上位机软件要能监控其他两台显示器的内容
0
上位机与usb mass storage设备通信
2
vc++串口上位机 MFC和MSCOMM控件
1
C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神!
0
FPGA操作dm9000接收到数据以后怎么把数据打包上传到网络
1
C#PerformClick可虚拟按钮,但按钮的DOWN和UP怎么表示模拟
2
有没有c#写上位机的教程,写上位机应该不需要知道太多吧,
2
C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯
2
C#中的serialport.Write与MSCOMM控件的put_output有什么区别?
0
C#写一款ip摄像头上位机,用RealPlayWnd.Handle;为啥是无效的句柄
2
c#串口通信中上位机测试数据组帧
1
stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码
3
关于串口接受数据并实时绘制波形的疑问