| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include "pqrtuhelper.h"
- namespace PQ {
- RTUHelper::RTUHelper():
- readType(SubAddress),toReadlen(0),_checkSubAddress(false)
- {
- }
- RTUHelper::~RTUHelper(){}
- void RTUHelper::readed(const QByteArray &data)
- {
- int index = 0;
- while (index < data.length())
- {
- const char ch = data.at(index);
- switch (readType)
- {
- case SubAddress:
- {
- ++ index;
- if (!_checkSubAddress || _subAddress.contains(ch))
- {
- if(!buffer.isEmpty()) buffer.clear();
- buffer.append(ch);
- readType = GetType;
- }
- continue;
- }
- case GetType:
- {
- buffer.append(ch);
- ++ index;
- readType = NumLength;
- continue;
- }
- case NumLength: //需要读数据
- {
- ++ index;
- toReadlen = static_cast<uchar>(ch);
- buffer.append(ch);
- readType = ReadData;
- continue;
- }
- case ReadData: //需要读数据
- {
- const int canread = data.length() - index;
- if (canread >= toReadlen)
- {
- buffer.append(data.mid(index, toReadlen));
- index += toReadlen;
- toReadlen = 0;
- readType = CRCUL;
- }
- else
- {
- buffer.append(data.mid(index, canread));
- index += canread;
- toReadlen -= canread;
- }
- continue;
- }
- case CRCUL: //需要读数据
- {
- buffer.append(ch);
- index ++;
- readType = CRCUH;
- continue;
- }
- case CRCUH: //需要读数据
- {
- buffer.append(ch);
- index ++;
- readType = SubAddress;
- doHandle(this->buffer);
- buffer.clear();
- }
- break;
- default:
- {
- readType = SubAddress;
- continue;
- }
- }
- }
- }
- }
|