打印

关于串口通讯

[复制链接]
1170|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
txcy|  楼主 | 2014-2-24 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我编写了一个串口通讯的程序,从电脑到plc读取数据,有个疑问,每次读取信息用getTickCount()函数测了一下,需要大概1秒钟的时间,感觉不对劲,不知道哪里写的不对,用commix1.4只要30多毫秒就能读到
time=GetTickCount();
    readState=ReadFile(this->hCom,lpReadBuffer,numberOfByteToRead,&numberOfByteToReadLength,&this->overlapped);
    time1=GetTickCount();
    cout<<"读取时间:"<<time1-time<<endl;
    time=time1;
    if (!readState)
    {
        if (GetLastError()==ERROR_IO_PENDING)
        {
            WaitForSingleObject(this->overlapped.hEvent,1000);
            time1=GetTickCount();
            cout<<"wait时间:"<<time1-time<<endl;
            time=time1;
            if (!GetOverlappedResult(this->hCom,&this->overlapped,&numberOfByteToReadLength,true))
            {
                time1=GetTickCount();
                cout<<"等待时间:"<<time1-time<<endl;
                cout<<"不成功"<<endl;
                return 0;               
            }else
            {
                time1=GetTickCount();
                cout<<"等待时间:"<<time1-time<<endl;
                cout<<"成功"<<endl;
                cout<<(char*)lpReadBuffer<<endl;

                clearComBuffer(PURGE_RXCLEAR);
                return numberOfByteToReadLength;
            }
            
        }
         
    }
主程序是这样写的
char a[12];
        memset(a,'\0',12);
        a[0]=0x2;
        a[1]='0';
        a[2]='0';
        a[3]='8';
        a[4]='0';
        a[5]='0';
        a[6]='0';
        a[7]='2';
        a[8]=0x3;
        a[9]='5';
        a[10]='D';
        time=GetTickCount();
        comm.writeCom(a,12);//写入plc最多15毫秒左右,有时候0毫秒
        time1=GetTickCount();
        cout<<"写入PLC时间:"<<time1-time<<endl;
        time=time1;
        Eevent=0;
         
        //comm.clearComError(&dwErrorFlags,&comstate);
        while (Eevent!=EV_RXCHAR/*||comstate.cbInQue==0*/)
        {
        //    comm.clearComError(&dwErrorFlags,&comstate);
            WaitCommEvent(comm.getHCom(),&Eevent,comm.getOverlapped());//大概需要15、6毫秒最多30毫秒左右
        }
        time1=GetTickCount();
        cout<<"等待plc相应时间:"<<time1-time<<endl;
        time=time1;
        //Sleep(100);
        memset(b,'\0',12);
        comm.readCom(b,12);//最费时间的地方大概1秒
        time1=GetTickCount();
        cout<<"PLC读取时间:"<<time1-time<<endl;
WaitForSingleObject(this->overlapped.hEvent,1000);时间基本都耗费在这一步。plc是三菱fx0s
请各位帮帮忙,看看怎么能读写快一些,谢谢

相关帖子

沙发
无冕之王| | 2014-2-24 18:24 | 只看该作者
WaitForSingleObject(this->overlapped.hEvent,20);看看
没接触过GetTickCount()不清除这个函数流程

使用特权

评论回复
板凳
pkat| | 2014-2-24 18:30 | 只看该作者
为啥不用事件呢?
有数据就触发事件,接受,,这个最省事省时啊

使用特权

评论回复
地板
火箭球迷| | 2014-2-24 18:40 | 只看该作者
可以考虑用事件,效率可能更高点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2106

帖子

0

粉丝