关于RS232串口通信的问题,初次接触,大家帮忙看看,搞定马上结贴^_^
发在BCB里没有解决。。。不知道为什么cs.cbInQue的值为40,而inbuff的值为5。传回来的数据少了很多。大家多多帮忙啊,谢谢~!
String Temp;
char SendData[20],inbuff[1024];
DWORD nBytesRead,dwError;
COMSTAT cs;
unsigned long lrc,BS;
DCB dcb;
memset(SendData,0,sizeof(SendData));
memset(inbuff,0,sizeof(inbuff));
Temp= "COM "+IntToStr(rdCom-> ItemIndex+1);
hComm=CreateFile(Temp.c_str(),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hComm==INVALID_HANDLE_VALUE)
{
MessageBox(0, "打开通信端口错误! ", "信息提示 ",MB_OK);
return;
}
GetCommState(hComm,&dcb);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
if(!SetCommState(hComm,&dcb))
{
MessageBox(0, "通信端口设置错误! ", "信息提示 ",MB_OK);
CloseHandle(hComm);
return;
}
SendData[0]=0x1b;
SendData[1]=0x10;
SendData[2]=0x10;
SendData[3]=0x00;
SendData[4]=0x05;
SendData[5]=0xc5;
SendData[6]=0x93;
SendData[7]= '\0 ';
BS=7;
WriteFile(hComm,SendData,BS,&lrc,NULL);
Sleep(100);
ClearCommError(hComm,&dwError,&cs);
if(cs.cbInQue> sizeof(inbuff))
PurgeComm(hComm,PURGE_RXCLEAR);
Edit1-> Text=IntToStr(cs.cbInQue);
ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);
inbuff[cs.cbInQue]= '\0 ';
Edit2-> Text=StrLen(inbuff);
Memo1-> Text=String(inbuff);
if(hComm!=INVALID_HANDLE_VALUE)
CloseHandle(hComm);
[解决办法]
会不会是拨特率没设置对
[解决办法]
波特率设置最好一样
[解决办法]
不懂..学习
[解决办法]
你的串口参数是怎么设的,代码贴出来看看
[解决办法]
ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);
这里,最好把超时设置贴出来,很可能是读操作很快返回了。