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

用串口控件遇到了一个几天还解决不了的有关问题,求各位大佬

2012-03-28 
用串口控件遇到了一个几天还解决不了的问题,求各位大佬事情是这样的,我自己开发了一个DSP设备,具有232通讯

用串口控件遇到了一个几天还解决不了的问题,求各位大佬
事情是这样的,我自己开发了一个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();            } 

热点排行