c# 串口接收大量数据后,我要每50组数据处理一次应该怎么办?

mwn_3517 2014-02-11 03:04:15
我用串口接收数据,数据是每50ms发送一组数据,一组数据的大小事50byte,我利用事件来接收数据,接收数据远远大于50byte,但是我想每50byte处理一次,应该怎么办?
...全文
506 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mwn_3517 2014-02-12
  • 打赏
  • 举报
回复
我说的接收的比发送的多指的设备一直在发送数据,而我需要每50组处理一次,我想将接收的数据放在队列中,然后每次取出50组进行处理
大湿级 2014-02-12
  • 打赏
  • 举报
回复
是用SerialPort这个控件来收发数据的吗! comP.BytesToRead得到接受的数据,然后一个循环将每50个byte输入到数组,操作数组就好了; 你得到的数据比接受的多,你还得看看。。。
编程有钱人了 2014-02-12
  • 打赏
  • 举报
回复
设置缓冲区啊,每次读 byte[] by=new byte[50]
mwn_3517 2014-02-12
  • 打赏
  • 举报
回复
具体是这样的,我要通过串口读取设备的数据,该设备是每隔50ms发送一次,停止位是oD,OA,一次发送50组,我采用SerialPort和线程实现?我想每隔50ms读取一次,然后处理。下面是代码?但是里面存在一些问题,首先是接收的数据远远大于50组,另外,我想将接收的数据处理之后,显示到界面上,但是出现不在同一线程上 private void 接收ToolStripMenuItem_Click(object sender, EventArgs e) { string rece = "SO1/n"; Serial_4612.Write(rece); ReceiveThread = new Thread(new ThreadStart(Serial_4612_DataReceived)); ReceiveThread.Start(); Thread.Sleep(50); } private void Serial_4612_DataReceived() { Byte[] receive=new Byte[4096]; int n=Serial_4612.Read(receive, 0, Serial_4612.ReadBufferSize); ByteList.Enqueue(receive); if (receive!=null) { Byte[] received = new Byte[50]; received = ByteList.Dequeue(); ProcessData(received); m++; } } private void ProcessData(Byte[] received) { int[] Channel = new int[6]; int j = 0; for (int i = 0; i < 33; i++) { if (i % 6 == 0) { Channel[j++] = received[i] * 65536 + received[i + 1] * 256 + received[i + 2]; } } if (m % 20 == 0) { txt_Channel1.Text = Channel[0].ToString(); txt_Channel2.Text = Channel[1].ToString(); txt_Channel3.Text = Channel[2].ToString(); txt_Channel4.Text = Channel[3].ToString(); txt_Channel5.Text = Channel[4].ToString(); txt_Channel6.Text = Channel[5].ToString(); } }
zhpfaff 2014-02-11
  • 打赏
  • 举报
回复
事件来接收数据,发多少就收多少,怎么可能收得比发得多?

110,561

社区成员

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

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

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