首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 关于处置串口数据

2013-08-11 
C# 关于处理串口数据这个问题很莫名其妙,我自己也在网上查了些资料,感觉老是没抓住重点,希望懂的人点拨我

C# 关于处理串口数据
这个问题很莫名其妙,我自己也在网上查了些资料,感觉老是没抓住重点,希望懂的人点拨我一下,谢谢。
问题是这样的,点击读取数据按钮,启动两个线程:
...
Thread read = new Thread(new ThreadStart(delegate()
                {
                    ReadPortDataToQueue(串口对象实例ps, 队列ref queue);
                }));
Thread write = new Thread (new ThreadStart(delegate()
                {
                    AddDataToDataTable(队列ref queue, 全局临时表ref dt);
                }));
                read.Start();
                write.Start();
...
private void ReadPortDataToQueue(SerialPort sp,Queue<byte[]> queue)
{
   sp.ReadToQueue(命令command, ref dt) 
}
...
void ReadToQueue(byte[] command,ref Queue<byte[]> queue)
{
  for(int i = 0; i < LoopTimes; i++)
  {
   sp.Write(command,0,4);//给串口发命令;
    Thread.Sleep(BUFFER_TIME);//等待数据缓冲好;
   byte[] buffer = new byte[sp.BytesToRead];
   sp.Read(buffer,0,buffer,Length);
   sp.DiscardInBuffer();//情况串口缓冲数据;
   queue.Enqueue(buffer);//入队列;
  }
 sp.Close();
}
...
private void AddDataToDataTable(ref Queue<byte[]> queue, ref DataTable dt)
{
   byte[] tempDataStr = null;
   while(true)
    {
       if(queue.Count > 0)
       {
       tempDataStr = queue.Dequeue();
       一个字符串数组 s =  TranslateData(tempDataStr);
       dr = dt.NewRow();
       dr.ItemArray  = new Object[] {s[0], ....};
       dt.Rows.Add(dr);
       }       


    }
}
...
string[] TranslateData(byte[] data)
{
  //将每一个字节转换成16进制;
  //处理各个字节信息;
  这里跳出错误,因为我要把信息赋值给字符串,所以将上面转换的信息赋值给了一个stringbuild对象实例,
装箱后为string,用substring方法时,抛出错误,ArgumentOutOfRangeException,我查看了是因为字符串为空,但是,我一步一步调试却没有发生这种情况,不知道为什么,我明明从队列中取出数据,处理的时候也没有删除操作什么的,为什么就成空了呢?
  //赋值给字符串数组s;
  
}


若还需要什么信息,请更贴我会解释,希望大家帮忙一下,在下感激不尽。















C# 线程 串口
[解决办法]
ArgumentOutOfRangeException范围超出,substring截取时,索引超出了内容的长度,肯定是接受的内容有问题啊,慢慢调试吧
[解决办法]
queue.Count > 0不一定代表你的数据完整
你截取出错也正常
说明你的串口数据还没读取完

[解决办法]
你报错的地方不贴代码,没错的贴代码,晕。估计肯定是截取有问题。
话说难道你断点走的时候都不报错么?
[解决办法]
串口丢数据时很严重的,一个小引脚松了都会差别很大。
关于上面的:
1.时间不固定,根据机器硬件和其他延迟会有几MS的误差吧。
2.已经清除了
3.没理解,sorry

热点排行