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

!帮忙看看一个串口通信的有关问题

2012-02-12 
求助!帮忙看看一个串口通信的问题我使用MSComm控件想发一个9个字节的数组,但却只接收到8个字节,请各位大侠

求助!帮忙看看一个串口通信的问题
我使用MSComm控件想发一个9个字节的数组,但却只接收到8个字节,请各位大侠帮看看:
串口属性设置:RThreshold = 1
  InputMode = 1
  InputLen =0
  InputBuffSize = 1024  
  OutputBuffSize = 1024 
   
  //发送
  OleVariant send_data;
  int i;
  Byte data1[9];
   
  data1[0]=15;
  data1[1]=1;
  data1[2]=0;
  data1[3]=0;
  data1[4]=0;
  data1[5]=0;
  data1[6]=16;
  data1[7]=16;
  data1[8]=16;

  send_data=VarArrayCreate(OPENARRAY(int,(0,8)), varByte);
  for(i=0;i<9;i++)
  {
  send_data.PutElement(data1[i],i);
  }
  MSComm1->Output=send_data;
   
   
  //接收
  Byte buf[9];
  int bytenum,i;
  OleVariant receive_data;

  if(MSComm1->CommEvent==comEvReceive)
  {
  while(MSComm1->InBufferCount>0)
  {
  receive_data=MSComm1->Input;
  bytenum=receive_data.ArrayHighBound(1);
  for(i=0;i<=bytenum;i++)
  {
  buf[i]=receive_data.GetElement(i);
  }

  }
  }
   
  运行看到发\x0F\x01\0\0\0\0\x10\x10\x10,收到的是\x0F\x01\0\0\0\0\x10\x10\0,为什么会少呢?
  当我把RThreshold = 9,收到的是\x0F\x01\0\0\0\0\x10\x10\x10,这样设对不对呢?
 

[解决办法]
RThreshold = 9这个是对的,这个设置就是说接收到9个字节才触发一次OnComm 事件,如果是设置成1就成了每一个字节都触发一次OnComm 事件了,但并不表示一个 OnComm 事件只能读取到一个字符,所以你中间漏掉了数据是正常的。
[解决办法]
接收收据后,你要自己分析那些是一组数据,
并不是每次收到的都是独立的一组数据
[解决办法]
接收的多增加一个字节来放结束符 \0
你定义接收为10个字节试试看 Byte buf[10];

热点排行