2 u010138609 u010138609 于 2013.07.22 14:39 提问

c#串口通信延迟问题,数据的发送和接受

在vs2010中调试运行,功能都完整,为什么在debug下运行exe文件。功能就会出现问题
自己认为是接受数据的时候发生了延迟。
comm_DataReceived 接受代码:

             int n = serialPort1.BytesToRead;
             byte[] buf = new byte[n];
             serialPort1.Read(buf, 0, n);
             buffer.AddRange(buf);
             if (!isDataReceived)
             {
                 buffer.Clear();
                 isDataReceived = false;
                 bindControlDetail();

             }
             else
             {
                 if (buffer.Count == 9)
                 {

                     if (buffer[0] == 0xee && buffer[1] == 0xff)
                     {
                         //byte[] binary_data_1 = new byte[9];
                         buffer.CopyTo(0, binary_data_1, 0, 9);
                         reader = CommonUtil.CommonUtil.byteToHexStr(binary_data_1);
                         buffer.Clear();
                         analysisRuningTimeControlData();//解析

                     }
                 }
                 if (buffer.Count > 9)
                 {
                     buffer.Clear();
                 }


             }

请教各位大神,帮忙看看!!!!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
串口通信中接收数据时延迟处理与缓存
利用串口进行通信当发送方 A 将数据写入串口后通过无线 或有线方式将数据传送给接收方 BB 通过调用串口读方法 comm.read 参数即可将数据读出。原理十分简单但最近在利 用串口处理 SM-42 无线传输时数据总是一段一段的传到 B 并 不能在 comm_DataReceived 方法中单纯使用 r
C#串口通信,包括打开串口,接收发送数据
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort port1 = new SerialPort(); string InputData = String.Empty; delegate void SetTextCallback(string text); private void Port_Select() {//获取机器中的串口地址 string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } } private void Form1_Load_1(object sender, EventArgs e) { Port_Select(); this.comboBox1.SelectedIndex = 0; this.comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "关闭串口") //当要关闭串口的时候 { port1.DiscardOutBuffer(); port1.DiscardInBuffer(); port1.Close(); button1.Text = "打开串口"; label3.Text = "串口当前状况:未打开"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else if (button1.Text == "打开串口") //当要打开串口的时候 { try { port1.PortName = comboBox1.SelectedItem.ToString(); port1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem); port1.DataBits = 8; port1.RtsEnable = true; port1.Open(); port1.DiscardOutBuffer(); port1.DiscardInBuffer(); button1.Text = "关闭串口"; comboBox1.Enabled = false; comboBox2.Enabled = false; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + " 波特率:" + comboBox2.SelectedItem.ToString() + " 数据位:8 "; } catch { button1.Text = "打开串口"; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + "打开失败"; MessageBox.Show("该串口无法打开"); } } } 资源中部分代码
C#解决串口通信中接收数据时延迟处理与缓存处理的方法
C#解决串口通信中接收数据时延迟处理与缓存处理的方法 时间:2011-1-21 14:04:29 来源:www.cnblogs.com 作者:杨少宁 - - 利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方
串口通讯的延时问题
   串口编程涉及很多问题,对于实时采集系统,串口编程必须服从系统定时器采集节拍,这样通过事件方式接收串口然后延时就会带来很多问题。  串口数据通常不是一次到来,对于一个较为长的数据,可能分两三次触发串口事件,如果每次事件触发时都要延时(采用system.threading.thread.sleep(500)延时500毫秒),造成线程阻塞,三次下来就延时了1500毫秒,对于需要定时节拍的采集,势必
C# SerialPort串口通信发送接收,处理接收数据完整
using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; namespace SerialPortCom {     public class SerialPortComImp
c#串口通信发送接受
c#串口通信发送接受
C# WPF 串口发送程序
关于串口通信,之前用MFC架构的时候做过一次,也写了文章如下: MFC RS232串口通信 最近的项目因为对于界面的美化要求高了很多,用MFC架构去美化界面是件要命的事,因此转而用了WPF架构。其中用到的串口通信部分自然也就只能重新研究下了。关于虚拟串口的工具还有串口调试工具,则用的还是原来MFC相关文章所提供的那两个,有需要的可以去那篇文章的下载链接中下载。 稍微研究了WPF架构的串口实现,
C#串口通信-向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构。SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了。所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件。经过测试,可以正常使用(不支持多线程调用)。     一、Machine类     1、Machine类有一个静态变量,定义如下: pr
C#下串口通讯超时优化类
一直以来就想实现一个功能,串口通讯
C#串口传输中文字符
发送:  Encoding gb = System.Text.Encoding.GetEncoding("gb2312");  byte[] bytes = gb.GetBytes("中文");  serialPort1.Write(bytes, 0, bytes.Length);  接收:  int ilen = serialPort1.BytesToRead;  byte[] bytes =