Newer
Older
ZXSSCJ / PhaseCompAcq / protocol / PhaseProtocolBM.cpp
TAN YUE on 30 Sep 2021 1 KB 20210930 初始提交
#include "PhaseProtocolBM.h"
#include <iostream>

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

PhaseProtocolBM::PhaseProtocolBM(QObject *parent) : QObject(parent)
{

}

PhaseProtocolBM::~PhaseProtocolBM()
{

}

bool PhaseProtocolBM::parseMessureData(QByteArray rawData, PhaseDataDto * dataObj)
{
    // 获取帧头——帧计数
    QByteArray head = rawData.left(PHASE_FRAME_ID_LENGTH);
    dataObj->frameId = QByteUtil::binToHexString(head);

    int j = 0; // 用于转换通道顺序

    // 获取每个通道的测量数据
    for (int i = 1; i <= PHASE_MESSURE_CHANNEL; i++)
    {
        if (i <= 8)
        {
            j = 2 * i - 1;

        } else
        {
            j = 2 * (i - 8);
        }

        QByteArray channelRaw = rawData.left(PHASE_MESSURE_SIZE * j + PHASE_FRAME_ID_LENGTH).right(PHASE_MESSURE_SIZE);
        qulonglong channelRawData = QByteUtil::binToULong(channelRaw, 8);

        if (channelRawData == CALCULATE_OFFSET)
        {
            dataObj->channelActive.append("0");
            dataObj->channelData.append(0.00);
        } else
        {
            dataObj->channelActive.append("1");
            dataObj->channelData.append((channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR);
        }
    }

    return true;
}

QString PhaseProtocolBM::startMessure()
{
    return "$START*";
}
QString PhaseProtocolBM::stopMessure()
{
    return "$$STOP*";
}

bool PhaseProtocolBM::checkFrame(QByteArray rawData)
{
    // 帧长度小于最小的长度
    if (rawData.length() != PHASE_FRAM_LENGTH)
    {
        return false;
    }

    // 帧尾不是0xEEEEEEEE
    if (rawData.mid(rawData.length() - PHASE_FRAME_TAIL.size()) != PHASE_FRAME_TAIL)
    {
        return false;
    }

    return true;
}