注册 登录
编程论坛 C++ Builder

为啥我的没有数据进来呀??????

junfa2013 发布于 2012-03-06 20:58, 1476 次点击
为啥我这样写,在ShowMessage(RxBuff)中没有显示呢???
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString str0,str,str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11,str12,str13,str14,str15,str16,str17,str18,str19,str20; //声明20个AnsiString类型的变量
  OleVariant RxBuff;
  if(MSComm1->CommEvent==comEvReceive)// 接收缓冲区中是否收到Rthreshold个字符。
  {
   
  if(MSComm1->InBufferCount>0) //是否有字符驻留在接收缓冲区等待被取出
  {


  RxBuff=MSComm1->Input;
  str=RxBuff.AsType(varString);
  ShowMessage(RxBuff);
  ShowMessage(str);
   
  str0=str.SubString(1,4).c_str();
 

  str1=str.SubString(5,4).c_str();
   

  str2=str.SubString(9,4).c_str();
  str3=str.SubString(13,4).c_str();

  str4=str.SubString(17,4).c_str();

  str5=str.SubString(21,4).c_str();

  str6=str.SubString(25,4).c_str();

  str7=str.SubString(29,4).c_str();

  str8=str.SubString(33,4).c_str();

  str9=str.SubString(37,4).c_str();

  str10=str.SubString(41,4).c_str();

  str11=str.SubString(45,4).c_str();

  str12=str.SubString(49,4).c_str();

  str13=str.SubString(53,4).c_str();

  str14=str.SubString(57,4).c_str();

  str15=str.SubString(61,4).c_str();

  str16=str.SubString(65,4).c_str();

  str17=str.SubString(69,4).c_str();

  str18=str.SubString(73,4).c_str();

  str19=str.SubString(77,4).c_str();

 if(str0=="0A00")
  {
  str1="0x"+str1;
  str2="0x"+str2;
  str3="0x"+str3;
  str4="0x"+str4;
  str5="0x"+str5;
  str6="0x"+str6;
  str7="0x"+str7;
  str8="0x"+str8;
  str9="0x"+str9;
  str10="0x"+str10;
  str11="0x"+str11;
  str12="0x"+str12;
  str13="0x"+str13;
  str14="0x"+str14;
  str15="0x"+str15;
  str16="0x"+str16;
  str17="0x"+str17;
  str18="0x"+str18;
  str19="0x"+str19;


  temp1=StrToInt(str1);
  temp2=StrToInt(str2);
  temp3=StrToInt(str3);
  temp4=StrToInt(str4);
  temp5=StrToInt(str5);
  temp6=StrToInt(str6);
  temp7=StrToInt(str7);
  temp8=StrToInt(str8);
  temp9=StrToInt(str9);
  temp10=StrToInt(str10);
  temp11=StrToInt(str11);
  temp12=StrToInt(str12);
  temp13=StrToInt(str13);
  temp14=StrToInt(str14);
  temp15=StrToInt(str15);
  temp16=StrToInt(str16);
  temp17=StrToInt(str17);
  temp18=StrToInt(str18);
  temp19=StrToInt(str19);
  }
 }
 }
}
下面是我对MSComm1的设置

  MSComm1->InputLen=0;//确定希望从接收缓冲区移出的字符数量,InputLen=0时一次把接收缓冲区的字符全部移出
  MSComm1->InBufferSize=1024;//接收缓冲区为1024字节
  MSComm1->OutBufferSize=512;//发送缓冲区为512字节
  MSComm1->SThreshold=0;//表示发送数据时不发生OnComm事件
  MSComm1->RThreshold=80;//设定接收80个字符时触发OnComm事件
  MSComm1->InputMode=0;//以二进制格式接受数据
  MSComm1->CommPort=StrToInt(ComboBox1->Text);//选择串口号
  MSComm1->Settings=
  ComboBox2->Text+","+
  ComboBox3->Text+","+
  ComboBox4->Text+","+
  ComboBox5->Text;//设置串口的属性波特率、奇偶校验、数据位和、//停止位。
  MSComm1->InputMode=0;//设置传入数据的格式,0表示文本形式
  MSComm1->PortOpen=true;//打开串口


我的DSP发送的十六进制数如下:“0A 00 01 00 F9 0C 00 00 4C 01 0C 31 0B 21 98 0B 01 01 01 00 F9 0C 00 00 4C 01 0C 31 0B 21 98 0B 01 01 0B 21 98 0B 01 01”请各位高手帮小弟我看看我的数据怎么就不能接收进来呢???急呀!!


我本来就是想让“0A 00 01 00 F9 0C 00 00 4C 01 0C 31 0B 21 98 0B 01 01 01 00 F9 0C 00 00 4C 01 0C 31 0B 21 98 0B 01 01 0B 21 98 0B 01 01”一次性接收进缓冲区后再触发OnComm事件,然后我想让以上数据转为字符串“0A000100F90C00004C010C310B21980B01010100F90C00004C010C310B21980B01010B21980B0101”再用SubString()函数每四个为一组截取下来,最后把截取下来的数转为16进制。最前面的“0A00”是我当做判断用的字符,后面的才是有用的数据。因为小弟的编程水平有限,走了很多弯路,如各位高手有更好的方法请您们不吝赐教呀!现在我的主要问题是接收不到数据,数据进不来呀!!!!!!小弟新手一个没有什么分,还望各位大哥大姐们见谅!!!
2 回复
#2
junfa20132012-03-08 13:56
没有人知道????
#3
C_戴忠意2012-03-20 12:58
自己好好看看代码丶不要写完就不管了丶
1