串口无法连续接收数据
问题简要描述一下:
sio_open(2); //打开串口2,com2
sio_ioctl(PortNum,B9600,P_NONE|BIT_8|STOP_1); //串口配置
sio_SetReadTimeouts(PortNum,500,100); //500ms内每隔100ms读一次输入缓冲区,若有数据就跳出循环
void __stdcall cntirq(int);
sio_cnt_irq(PortNum,cntirq,1); //设置中断函数
...
sio_read(PortNum,ibuf,1024); //读取串口缓冲区内的数据至ibuf
Form1->ReceiveMemo->Text=Buf; //将ibuf的数据通过Buf显示到ReceiveMemo内
我做了两个DB9的串口连接器,将它们串联起来,分别接到主机的com1和com2上,用一个串口调试工具通过com1口向com2口发送数据,上面的程序执行后,能正确接受com1发来的第一帧数据并显示出来,但当com1连续发送的时候,com2无法接收到后面的数据,请问这是怎么回事,如何解决呢? 向各位求助了!
[解决办法]
这个你应该看看pcomm。dll的说明
要不就就用个线程不停接受串口数据
void __fastcall TMyThread::Execute(){ //inherited; //struct date dt; //struct time tm; Byte xReady; Byte xInPtr; Byte xInData,xStart; Byte xAdress;// Byte Comm; int xChk; Byte xChk1,crcChk1; Byte xChk2,crcChk2; Byte xStatus;// Byte echo; int ii,jj,ret; unsigned char xbuf[0x100]; unsigned char xindex,xcount; unsigned short crchelp; unsigned char Comm2; int len,inlen; len=0; xReady=0; xInPtr=0; xChk=0; long timeout=0; long Check_Time=0; while(!Stop) { try { //if(xInPtr==0)Sleep(2); Sleep(1); ret=sio_iqueue(comm_port); if(ret>0) { xInData=sio_getch(comm_port);}}
[解决办法]
Buf与ibuf的关系是什么?
Buf=AnsiString(ibuf)?如果第一次发送的数据包含了字符串结束符,那么Buf确实只会得到第一次发送的字符串。
你也可以int i=sio_read(PortNum,ibuf,1024),看一下实际接收到的字节数。