日期:2014-05-18  浏览次数:20721 次

用串口控件遇到了一个几天还解决不了的问题,求各位大佬
事情是这样的,我自己开发了一个DSP设备,具有232通讯功能,收到上位机呼叫的时候会连续向串口发出36个8位数。
现在我准备自己用C#写一个232通讯的程序,周期性呼叫下位机,并接收(更新)这36个数。

我计划的程序流程是,点击一个button,向DSP发出呼叫,即发送数据‘0’给DSP,DSP收到‘0’之后便会连续发出36个数。
然后我在serialPort1_DataReceived事件中接收数据(该事件我设置的是每收到一个字节就触发一次),当接收了36次后又向DSP发送‘0’,这样再接收36次,循环往复。

现在出现的问题是,有些时候接收不到36个数。比如说连续几个周期都没有问题,但是下个周期忽然只接收到小于36个数了。不知道这是怎么回事。我确定DSP没有问题啊。
下面是我精简后的程序代码;
  int parameter_num ;
  int[] buff = new int[36];
  private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  {  
  parameter_num = parameter_num + 1;
  buff[parameter_num - 1] = serialPort1.ReadByte();
  if (parameter_num == 36)
  {
  parameter_num=0;
  serialPort1.WriteLine(0.ToString());
  }
  }

  private void button1_Click(object sender, EventArgs e)
  {
  parameter_num = 0;
  serialPort1.WriteLine(0.ToString());
  }

------解决方案--------------------
如果你确认每次都是发行固定大小的数据的话,调整参数试试,曾经遇到过,同样的时间延时,在慢机器和快机器上效果不一样,经常会丢数据
------解决方案--------------------
C# code
            while (serialPort1.BytesToRead > 0)    //加上这句
            {
                parameter_num = parameter_num + 1;
                buff[parameter_num - 1] = serialPort1.ReadByte();
            }