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

读取串口缓冲区能超时.

2013-08-23 
读取串口缓冲区会超时..........急!本帖最后由 shinjixyj 于 2013-08-15 09:01:03 编辑在读取时 有时会 发

读取串口缓冲区会超时..........急!
本帖最后由 shinjixyj 于 2013-08-15 09:01:03 编辑 在读取时 有时会 发生超时 超时时间不定  有时超过10毫秒 有什么办法能快点吗  最好3毫秒内读好一个寄存器

                for (int i = 0; i < len; i++)
                {
                    c = sw.ElapsedMilliseconds;
                    serialPort1.Read(num, i, 1);
                    d = sw.ElapsedMilliseconds;
                    if ((d - c) > databyteout)//databyteout = 3
                    {
                        WritePrivateProfileString("error", "C:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), " " + c, FileNameerror);//记录时间
                        WritePrivateProfileString("error", "D:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), " " + d, FileNameerror);
                        Form2.isok = false;
                        Form2.boolcheck = false;
                        WritePrivateProfileString("error", "error" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "字间超时!"
                            + num[i] + " " + i + " " + thenum[0], FileNameerror);//记录读取超时的寄存器
                        MessageBox.Show("字间超时!");
                        serialPort1.DiscardInBuffer();


                        return;
                    }
                }
                serialPort1.DiscardInBuffer();
[解决办法]
这都是你自己规定的超时。。。
要看读取串口有没有超时应该设置serialPorts的ReadTimeout属性

PC机上那么多程序,无法保证每个时刻都在执行楼主的程序
 c = sw.ElapsedMilliseconds;
 d = sw.ElapsedMilliseconds;
d-c并不能真实的代表读取串口的时间

楼主将serialPorts的ReadTimeout属性设置为3,看是否会发生超时
[解决办法]
串口数据有延时的
多久能读完完整的一帧数据
需要你自己多测试你的设备了

热点排行