做了一个利用SerialPort串口的小程序,不过过程中遇到一个小问题,就是程序一启动的时候接收到几个下位机的数据后自动就发送一两个字节命令数据去单片机下位机,这个时候单片机有时候却不响应者第一个命令,但有时候又响应,单片机接受命令格式及处理都是一样的。上位机软件启动以后,凡是通过软件界面按钮操作的发送命令下位机单片机都可以接受,那为什么软件刚启动(相当于初始化,也就是软件启动后不久)却有时候不灵了呢?这个SerialPort.WriteByte有没有发送延时问题?我怀疑上位机发送命令数据落后延时了,导致单片机错过了允许接受的时间片段(过了这个时间片段,单片机不再响应串口数据而去处理其它去了)。
单片机串口是模拟的不是硬件的,半双工,没有握手和奇偶校验

解决方案 »

  1.   


    就是启动上位机的时候,软件自动发送的命令会失效,只有软件启动后软件才会自动发送呀,启动以后就不再自动发送了,界面操作按钮才发送命令数据,也就是软件启动后发送一条命令给下位机单片机报告单片机的一些状态,以后就不自动发送命令了,就是这一条自动发送的命令有时候会失效。在软件中我设置了延时,等软件启动过后一段时间再SerialPort.WriteByte发送命令,这样失效概率大大减少,不过这个延时时间不能设置太长呀,不然初始化时间太长。
      

  2.   

    串口调试工具看看。应当不是serialport得延迟问题。
      

  3.   

    SerialPort.WriteByte也有缓冲的,应该有延迟,
      

  4.   

    问7楼,串口何来握手?这句话是什么意思?LZ发送出去数据不检查返回值程序就继续下去了?试试看,在write后加一个Application.DoEvent看看
      

  5.   

    看看有Flush方法吗?手动Flush试试。
      

  6.   

    用System.IO.Ports.SerialPort.BaseStream.Flush()试试,或者System.IO.Ports.SerialPort.WriteBufferSize设置成你要写入的字节数。
      

  7.   

    谢谢ttiimm11
    和flcl已经解决,找到原因,还是因为我的程序的结构安排不小心不恰当不过还是谢谢你们,也给我了其它的有益提示