在这里将接受的字节拼装起来
---------------------------------------------------
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;
}