专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++ Builder

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

发布时间:2011-06-28 14:00:43 文章来源:www.iduyao.cn 采编人员:星星草
串口无法连续接收数据
问题简要描述一下:
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),看一下实际接收到的字节数。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: