#include "ValidAfterProc.h" ValidAfterProc::ValidAfterProc(QObject* parent) : IAfterProc(parent) {} ValidAfterProc::~ValidAfterProc() { m_file.flush(); m_file.close(); } void ValidAfterProc::init(Frame* frame) { m_pFrame = frame; createDataPath("Valid"); } void ValidAfterProc::run() { m_uiDataSize = m_byteArray.size(); m_uiIndex = 0; // 副帧类型 if (m_pFrame->m_usSubFrameType == 1) { // 无副帧 while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) { if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex] && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]) { if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前 m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex += m_pFrame->m_uiFrameLen; } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后 if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足 m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex -= m_pFrame->m_usBeforeHeadLen; m_uiIndex += m_pFrame->m_uiFrameLen; } else { ++m_uiIndex; } } } else { ++m_uiIndex; } } } else if (m_pFrame->m_usSubFrameType == 2) { // 反码副帧 while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) { if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex] && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1] && m_pFrame->m_subHeadArray[0] == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn] && m_pFrame->m_subHeadArray[1] == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn + 1]) { if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前 m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex += m_pFrame->m_uiFrameLen; } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后 if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足 m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex -= m_pFrame->m_usBeforeHeadLen; m_uiIndex += m_pFrame->m_uiFrameLen; } else { ++m_uiIndex; } } } else { ++m_uiIndex; } } } else if (m_pFrame->m_usSubFrameType == 3) { // ID副帧 while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) { if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex] && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1] && m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn] && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn + 1]) { QByteArray startId = QByteArray::number(m_pFrame->m_usIdStart, 16); // 第一个Id号 QByteArray endId = QByteArray::number(m_pFrame->m_usIdEnd, 16); // 最后一个Id号 if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前 if (startId[0] == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr] && endId[0] == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]) { m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex += m_pFrame->m_uiFrameLen; } } else if (m_pFrame->m_usHeadAddr == 2) { if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足 if (startId[0] == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen + m_pFrame->m_usIdAddr] && endId[0] == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen + m_pFrame->m_usIdAddr + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]) { m_validArray.append(m_byteArray.mid( m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen)); m_uiIndex -= m_pFrame->m_usBeforeHeadLen; m_uiIndex += m_pFrame->m_uiFrameLen; } else { ++m_uiIndex; } } } } else { ++m_uiIndex; } } } // 将数据写入文件中 m_file.write(m_validArray); m_file.flush(); emit validDataExtract(m_validArray); m_uiDataSize = 0; m_uiIndex = 0; m_byteArray.clear(); m_validArray.clear(); }