Newer
Older
ZXSSCJ / CounterAcq / protocol / CounterProtocolXH.cpp
#include "CounterProtocolXH.h"

CounterProtocolXH::CounterProtocolXH(QObject *parent) : QObject(parent)
{

}

bool CounterProtocolXH::parseMessureData(QByteArray rawData, CounterDataDto * counterData)
{
    int start = rawData.indexOf(COUNTER_FRAME_CONTENT_SEP);
    int dataLen = rawData.mid(COUNTER_FRAME_HEAD.size() + COUNTER_FRAME_DEVCODE_LENGTH + COUNTER_FRAME_TIME_LENGTH, 3).toInt();

    QString dataTime = rawData.mid(COUNTER_FRAME_HEAD.size() + COUNTER_FRAME_DEVCODE_LENGTH, COUNTER_FRAME_TIME_LENGTH);
    QString frameId = dataTime.mid(6, 6);
    counterData->frameId = frameId;

    QByteArray content = rawData.mid(start + 1, dataLen - 1);
    QString contentStr = QString(content);
    QStringList subList = contentStr.split(COUNTER_FRAME_CONTENT_SEP);

    QString statusStr = subList.at(0);
    QString channelStatus = statusStr.mid(1, COUNTER_MESSURE_CHANNEL);
    int channelRefNo = statusStr.mid(17, 2).toInt();
    counterData->channelRefId = channelRefNo;

    for (int i = 0; i < COUNTER_MESSURE_CHANNEL; i++)
    {
        if (channelRefNo - 1 == i)
        {
            // ref channel
            counterData->channelActiveArray.append("1");
            counterData->channelDataArray.append(0.00);
        } else
        {
            // not ref channel
            counterData->channelActiveArray.append(channelStatus.mid(i, 1));
            if (channelStatus.mid(i, 1) == "0")
            {
                counterData->channelDataArray.append(0.00);
            } else
            {
                counterData->channelDataArray.append(subList.at(i + 1).toDouble());
            }
        }
    }

//    counterData->type = subList.at(0).toUInt();
//    counterData->channelId = subList.at(1).toUInt();
//    counterData->channelActive = subList.at(2).toUInt();
//    counterData->channelRefId = subList.at(3).toUInt();
//    counterData->channelData = subList.at(4).toLongLong();
//    counterData->load = subList.at(5);
//    counterData->level = subList.at(6).toDouble();
//    counterData->frameId = subList.at(7);

    return true;
}


bool CounterProtocolXH::checkFrame(QByteArray rawData)
{
    // 帧长度小于最小的长度
    if (rawData.size() < COUNTER_FRAME_MIN_LENGTH)
    {
        return false;
    }

    // 帧头不是$GL
    if (COUNTER_FRAME_HEAD.toLocal8Bit() != rawData.mid(0, COUNTER_FRAME_HEAD.size()))
    {
        return false;
    }

    return true;
}