首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

串口无法连续接收数据,该如何解决

2012-03-19 
串口无法连续接收数据问题简要描述一下:sio_open(2)//打开串口2,com2sio_ioctl(PortNum,B9600,P_NONE|BIT

串口无法连续接收数据
问题简要描述一下:
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的说明

要不就就用个线程不停接受串口数据

C/C++ code
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),看一下实际接收到的字节数。

热点排行