#2
junfa20132012-03-08 13:56
|
为啥我这样写,在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”是我当做判断用的字符,后面的才是有用的数据。因为小弟的编程水平有限,走了很多弯路,如各位高手有更好的方法请您们不吝赐教呀!现在我的主要问题是接收不到数据,数据进不来呀!!!!!!小弟新手一个没有什么分,还望各位大哥大姐们见谅!!!