奇怪?!数据到哪里去了?!求救!!!!!
lcjfy 2002-08-25 09:30:22
我正在写一段通信控制的程序,根据设备方提供的通信协议,用RS232进行通信控制。
我从网上下载了一个样板程序,在上面做了一点改动,结果出现了怪事,能够正确发送接收字符串,却不能正确发送char型数组!!!
我把发送和接收的程序都发过来。请指教!!!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
Temp = "COM1";
ComNo = Temp.c_str();
hComm1 = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm1 == INVALID_HANDLE_VALUE)
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}
GetCommState(hComm1,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity =NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
if (!SetCommState(hComm1, &dcb))
{
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm1);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
Temp = "COM2";
ComNo = Temp.c_str();
hComm2 = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm2 == INVALID_HANDLE_VALUE) // 如果通信端口未打开
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}
GetCommState(hComm2,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
if (!SetCommState(hComm2, &dcb)) { // 设置通信端口的状态
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm2);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
String Temp;
char SendData[8]={0xa0,0x01,0x02,0x00,0x00,0x20,0xaf,0x23};
int ln;
unsigned long lrc,BS;
if (hComm1==0) return; //检查Handle值
BS = StrLen(SendData
WriteFile(hComm1,&SendData,BS, &lrc,NULL); // 送出数据
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
String Temp;
char inbuff[1024];
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;
ClearCommError(hComm2,&dwError,&cs);
if (cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm2, PURGE_RXCLEAR); // 清除通信端口数据
return;
}
ReadFile(hComm2, inbuff,cs.cbInQue,&nBytesRead,NULL);
inbuff[cs.cbInQue]= '\0';
AnsiString strTemp,strResult;
strResult = "";
for(int i=0;i<cs.cbInQue;i++)
{
strTemp.sprintf("%2X ",inbuff[i]);
strResult+=strTemp;
}
//还原为16进制显示。
Memo2->Text = strResult;
}
//-------
只出来了3个数:A0 1 2
问题在哪里?