You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ValidAfterProc.cpp 6.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "ValidAfterProc.h"
  2. ValidAfterProc::ValidAfterProc(QObject* parent) : IAfterProc(parent)
  3. {}
  4. ValidAfterProc::~ValidAfterProc()
  5. {
  6. m_file.flush();
  7. m_file.close();
  8. }
  9. void ValidAfterProc::init(Frame* frame)
  10. {
  11. m_pFrame = frame;
  12. createDataPath("Valid");
  13. }
  14. void ValidAfterProc::run()
  15. {
  16. m_uiDataSize = m_byteArray.size();
  17. m_uiIndex = 0;
  18. // 副帧类型
  19. if (m_pFrame->m_usSubFrameType == 1) { // 无副帧
  20. while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
  21. if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
  22. && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]) {
  23. if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
  24. m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
  25. m_pFrame->m_uiFrameLen));
  26. m_uiIndex += m_pFrame->m_uiFrameLen;
  27. } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
  28. if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
  29. m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
  30. m_pFrame->m_uiFrameLen));
  31. m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
  32. m_uiIndex += m_pFrame->m_uiFrameLen;
  33. } else {
  34. ++m_uiIndex;
  35. }
  36. }
  37. } else {
  38. ++m_uiIndex;
  39. }
  40. }
  41. } else if (m_pFrame->m_usSubFrameType == 2) { // 反码副帧
  42. while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
  43. if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
  44. && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
  45. && m_pFrame->m_subHeadArray[0]
  46. == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
  47. && m_pFrame->m_subHeadArray[1]
  48. == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
  49. + 1]) {
  50. if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
  51. m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
  52. m_pFrame->m_uiFrameLen));
  53. m_uiIndex += m_pFrame->m_uiFrameLen;
  54. } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
  55. if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
  56. m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
  57. m_pFrame->m_uiFrameLen));
  58. m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
  59. m_uiIndex += m_pFrame->m_uiFrameLen;
  60. } else {
  61. ++m_uiIndex;
  62. }
  63. }
  64. } else {
  65. ++m_uiIndex;
  66. }
  67. }
  68. } else if (m_pFrame->m_usSubFrameType == 3) { // ID副帧
  69. while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
  70. if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
  71. && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
  72. && m_pFrame->m_headArray[0]
  73. == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
  74. && m_pFrame->m_headArray[1]
  75. == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
  76. + 1]) {
  77. QByteArray startId = QByteArray::number(m_pFrame->m_usIdStart, 16); // 第一个Id号
  78. QByteArray endId = QByteArray::number(m_pFrame->m_usIdEnd, 16); // 最后一个Id号
  79. if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
  80. if (startId[0] == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr]
  81. && endId[0]
  82. == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr
  83. + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]) {
  84. m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
  85. m_pFrame->m_uiFrameLen));
  86. m_uiIndex += m_pFrame->m_uiFrameLen;
  87. }
  88. } else if (m_pFrame->m_usHeadAddr == 2) {
  89. if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
  90. if (startId[0]
  91. == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
  92. + m_pFrame->m_usIdAddr]
  93. && endId[0]
  94. == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
  95. + m_pFrame->m_usIdAddr + m_pFrame->m_uiFrameLen
  96. - m_pFrame->m_uiColumn]) {
  97. m_validArray.append(m_byteArray.mid(
  98. m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen));
  99. m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
  100. m_uiIndex += m_pFrame->m_uiFrameLen;
  101. } else {
  102. ++m_uiIndex;
  103. }
  104. }
  105. }
  106. } else {
  107. ++m_uiIndex;
  108. }
  109. }
  110. }
  111. // 将数据写入文件中
  112. m_file.write(m_validArray);
  113. m_file.flush();
  114. emit validDataExtract(m_validArray);
  115. m_uiDataSize = 0;
  116. m_uiIndex = 0;
  117. m_byteArray.clear();
  118. m_validArray.clear();
  119. }