• 5143阅读
  • 6回复

遇到qt串口通信的问题??? [复制链接]

上一主题 下一主题
离线erhumusic182
 

只看楼主 倒序阅读 楼主  发表于: 2011-05-18
最近在做qt的通信程序,
发现当收到的字节串中的字节最高位为1的时候,
调用网上那个QextSerialPort类的readall函数独处的字节却将最高位丢弃了(实际上QextSerialPort也是调用的QIODevice的readall接口),
不知道怎么回事!!
(注:如果用串口调试助手接受,接受到的字节串适合发送一样的,)
望高手指点!?
qt爱好者
离线morriszy

只看该作者 1楼 发表于: 2011-05-18
贴代码呢
VS2010+Qt4.7.0
离线qq526665621

只看该作者 2楼 发表于: 2011-05-18
楼主 把代码分享下啊
离线erhumusic182

只看该作者 3楼 发表于: 2011-05-18
明天贴一下代码!谢谢大家参与
qt爱好者
离线erhumusic182

只看该作者 4楼 发表于: 2011-05-19
在这里将接受的字节拼装起来
---------------------------------------------------
switch(modbus_comStat)
{
    case MODBUS_COMSTAT_IDLE://ready for senting new request
            {
                extSerialPort ->readAll();
                rcvFrame.clear();
                break;
            }            
        case MODBUS_COMSTAT_REQSENT://new request has been sent, waiting for answer.
            {//discard the first received frame(because usually it can not receive the valid frame head)
                if(RTUFrmEndTmOutCount == 0)//no ever timeout, frame bytes grow -- assemble the bytes
                {
                    QByteArray temp = extSerialPort->readAll();
                    if(temp.size() <= 0) return;
                    rcvFrame.append(temp);
                    RTUFrmEndTimer->start();//restart the timer !
                    //dataWin->addItem("newbytesadded!");
                    RTUFrmEndTmOutCount = 0;
                }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这里将完整的帧加以分析!
----------------------------------------------
switch(modbus_comStat)
    {
        case MODBUS_COMSTAT_IDLE://ready for senting new request
            {
                extSerialPort ->readAll();
                rcvFrame.clear();
                break;
            }            
        case MODBUS_COMSTAT_REQSENT://new request has been sent, waiting for answer.
            {//discard the first received rcvFrame(because usually it can not receive the valid frame head)
                if(chkCRC16()) //get information from frame
                {
                    if(*(rcvFrame.data()) != procConfInfo.peerDevNo) return;//undefined slaver reply -- ignore
                    //for(int i = 0;i<rcvFrame.count();i++) qDebug("index:%d----val:%d",i,*(unsigned char *)(rcvFrame.data() + i));
                    if(getInfoAndSent2Agt())
                    {
                        lastStartPrjPntIndexSent = minPrjPntIndex_ana;
                        RTUFrmEndTmOutCount = 0;
                        modbus_comStat = MODBUS_COMSTAT_IDLE;
                    }


qt爱好者
离线erhumusic182

只看该作者 5楼 发表于: 2011-05-19
望大家多多指导啊!
qt爱好者
离线erhumusic182

只看该作者 6楼 发表于: 2011-05-20
顶!!!
qt爱好者
快速回复
限100 字节
 
上一个 下一个