我自己写了个小程序,通过串口让电脑来读取机器上过来的测试铜线的数据,当机器测试完成后按一个键数据就可以传到我的程序并显示出来,但是当机器进行第2次测试的时候数据就传不过来了,怎么按键都没有反映,要我重启电脑后又可以接收该次的数据.就这样要重启一次才能接收一次数据,但是我把我的电脑的2个串口对接后来测试我的程序时,通信都是很正常的。请问这是什么原因,是串口的设置问题还是什么?请大家帮忙,谢谢!

解决方案 »

  1.   

    接受代码如下    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
          // This method will be called when there is data waiting in the port's buffer      // Determain which mode (string or binary) the user is in
          if (CurrentDataMode == DataMode.Text)
          {
            // Read all the data waiting in the buffer
            string data = comport.ReadExisting();        // Display the text to the user in the terminal
            Log(LogMsgType.Incoming, data);
          }
          else
          {
            // Obtain the number of bytes waiting in the port's buffer
            int bytes = comport.BytesToRead;        // Create a byte array buffer to hold the incoming data
            byte[] buffer = new byte[bytes];        // Read the data from the port and store it in our buffer
            comport.Read(buffer, 0, bytes);        // Show the user the incoming data in hex format
            Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
          }
        }
      

  2.   

    言下之意是说,LZ第二次按时,上面方法是否被调用过,建议LZ设个标签,试试!
      

  3.   

    int bytes = comport.BytesToRead;
    在第二次会不会是0
      

  4.   

    记住不要用usb 转换com,电压不稳定造成通讯故障太频繁 我原先就碰上过通过usb转换com电压不稳 只要你不是用了usb转换com就应该问题不大,问题可能出在你的机器上com,也可能你的软件存在缺陷 也碰上过发送一次可以,以后就不行了,重起后立刻好用,最后发现端口被占用后没有释放,第二次通讯的时候穿件端口连接失败 
    最有可能的是计算机处理com通讯问题
      

  5.   

    to: napsoft(乡下人) 我用的就是usb 转换com,因为电脑上没有自带的com口,所以每办法只能用usb 转换com。
    看来要去换电脑看看了。
      

  6.   

    1.先看一下你两边的参数设置是否正确
    2.看看你的发送接收缓冲区是单字节接收还是每次全部接收,如果是全部接收的话是否把临时变量清楚干净了。
    3.看看接收事件是否触发,或判断串口的ctr状态是否可以发送状态或有其他异常
    4.接收到的数据是否有乱码?一般情况下是有乱码容易引起接收异常
      

  7.   

    to:quansui(叶子) 你说的第2点如何处理。
      

  8.   

    如果楼主对你用的这个组件不是很了解,建议换成Mscomm控件用用,这个还是比较可靠的,而且使用方便,帮助比较多。
    因为不同的组件,清除缓冲区方法不一样。
    象mscomm控件,调用 input方法获取数据后,它自动将读取的数据从缓冲区清除。
      

  9.   

    你的PC用什么方法来检测串口的数据?也就是说你对串口数据是否是采用轮询的方法检测呢?这样就有可能漏掉数据。我觉得用MsComm控件来实现,还是比较容易、可靠些的,MsComm对串口数据的获取是通过中断方式来实现的。
      

  10.   

    SerialPort如何读取串口数据并显示在TextBox上。这个可能对你有帮助。
    详细代码请看http://showlie.blogcn.com