DynamicTaskThread.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /**************************************************************************************************
  2. 版本所有(C), 2020-2022, 北京普达迪泰
  3. ***************************************************************************************************
  4. 文 件 名: DynamicTaskThread.cpp
  5. 功能描述: IDPMS处理
  6. 版 本 号: 1.00初版
  7. 作 者: HYF
  8. 生成日期; 2021-12-20
  9. 最近修改:
  10. 函数列表:
  11. 修改历史:
  12. 1.日 期 :2021-12-20
  13. 作 者 : HYF
  14. 修改内容 : 创建文件
  15. **************************************************************************************************/
  16. #include "pch.h"
  17. #include "DmsDoc.h"
  18. #include "UIThread.h"
  19. #include "IDPMSComm.h"
  20. #include "DynamicTaskThread.h"
  21. #include "IDCMParser.h"
  22. #include "TaskManager.h"
  23. #include "PostureDataPointManager.h"
  24. #include "PostureDataAngleManager.h"
  25. IMPLEMENT_DYNCREATE(DynamicTaskThread, CUIThread)
  26. BEGIN_MESSAGE_MAP(DynamicTaskThread, CWinThread)
  27. // {{AFX_MSG_MAP(DynamicTaskThread)
  28. // NOTE - the ClassWizard will add and remove mapping macros here.
  29. ON_THREAD_MESSAGE(WM_DYNAMIC, OnDynamic)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. DynamicTaskThread::DynamicTaskThread(void)
  33. {
  34. m_iDynamicSpan = 0;
  35. m_bPaused = FALSE;
  36. }
  37. DynamicTaskThread::~DynamicTaskThread(void)
  38. {
  39. }
  40. BOOL DynamicTaskThread::InitInstance()
  41. {
  42. return TRUE;
  43. }
  44. /**************************************************************************************************
  45. 函 数 名 :OnDynamic
  46. 功能描述 :动态位资测量
  47. 输入参数 :略
  48. 输出参数 :无
  49. 返 回 值 :void
  50. **************************************************************************************************/
  51. void DynamicTaskThread::OnDynamic(WPARAM wParam, LPARAM lParam)
  52. {
  53. CString szCommand;
  54. BOOL bRet = TRUE;
  55. int iRet = 0;
  56. DMSResponse *pRes = NULL;
  57. IDCMParser *parser = new IDCMParser();
  58. int iSizeRecevied = 0;
  59. // IDPMS通讯器
  60. IDPMSComm *pComm = new IDPMSComm();
  61. bRet = pComm->Open();
  62. if (!bRet) {
  63. this->PostMsg(WM_START_IDPMS, pRes);
  64. delete pComm;
  65. return;
  66. }
  67. // 1.选择分机文件作为模板
  68. szCommand.Format("IDPMS-CD:SET1401:PDFN=%s", m_szEquipPlace);
  69. iRet = pComm->SendCommand(szCommand, pRes);
  70. if (iRet <= 0) {
  71. pComm->Close();
  72. this->PostMsg(WM_FAILURE, pRes);
  73. delete pComm;
  74. return;
  75. }
  76. // 2. 设置拍摄一次输出一次数据
  77. szCommand.Format("IDPMS-CD:IDCT:TS0009");
  78. iRet = pComm->SendCommand(szCommand, pRes);
  79. if (iRet <= 0) {
  80. pComm->Close();
  81. this->PostMsg(WM_FAILURE, pRes);
  82. delete pComm;
  83. return;
  84. }
  85. // 3. 循环发指令拍摄
  86. szCommand.Format("IDPMS-CD:SET2901");
  87. CString dataLeft("IDPMS-CR:点发送开始");
  88. int iLeft = dataLeft.GetLength();
  89. while (!m_bDone)
  90. {
  91. if (!m_bPaused) {
  92. if (!pComm->Send(szCommand))
  93. {
  94. LOG::E(szCommand, _T("发送失败!"));
  95. delete pComm;
  96. delete parser;
  97. return;
  98. }
  99. // 循环接收数据,直到超时退出
  100. while (TRUE)
  101. {
  102. CStringArray arrData;
  103. if (!(pComm->Receive(arrData)))
  104. {
  105. break;
  106. }
  107. // 处理接收数据
  108. int iRet = parser->ParseData(arrData, pRes, m_pDynamicData);
  109. if (iRet == 1)
  110. {
  111. this->PostMsg(WM_SUCCESS, pRes);
  112. break;
  113. }
  114. }
  115. }
  116. TRACE("Paused %d\r\n", m_bPaused);
  117. TRACE("Done %d\r\n", m_bDone);
  118. Sleep(m_iDynamicSpan);
  119. }
  120. // 关闭通讯器
  121. pComm->Close();
  122. // 发送测量结束消息
  123. this->PostMsg(WM_COMPLETE, pRes);
  124. // 释放资源
  125. delete pComm;
  126. delete parser;
  127. return;
  128. }