/************************************************************************************************** 版本所有(C), 2020-2022, 北京普达迪泰 *************************************************************************************************** 文 件 名: DynamicTaskThread.cpp 功能描述: IDPMS处理 版 本 号: 1.00初版 作 者: HYF 生成日期; 2021-12-20 最近修改: 函数列表: 修改历史: 1.日 期 :2021-12-20 作 者 : HYF 修改内容 : 创建文件 **************************************************************************************************/ #include "pch.h" #include "DmsDoc.h" #include "UIThread.h" #include "IDPMSComm.h" #include "DynamicTaskThread.h" #include "IDCMParser.h" #include "TaskManager.h" #include "PostureDataPointManager.h" #include "PostureDataAngleManager.h" IMPLEMENT_DYNCREATE(DynamicTaskThread, CUIThread) BEGIN_MESSAGE_MAP(DynamicTaskThread, CWinThread) // {{AFX_MSG_MAP(DynamicTaskThread) // NOTE - the ClassWizard will add and remove mapping macros here. ON_THREAD_MESSAGE(WM_DYNAMIC, OnDynamic) //}}AFX_MSG_MAP END_MESSAGE_MAP() DynamicTaskThread::DynamicTaskThread(void) { m_iDynamicSpan = 0; m_bPaused = FALSE; } DynamicTaskThread::~DynamicTaskThread(void) { } BOOL DynamicTaskThread::InitInstance() { return TRUE; } /************************************************************************************************** 函 数 名 :OnDynamic 功能描述 :动态位资测量 输入参数 :略 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DynamicTaskThread::OnDynamic(WPARAM wParam, LPARAM lParam) { CString szCommand; BOOL bRet = TRUE; int iRet = 0; DMSResponse *pRes = NULL; IDCMParser *parser = new IDCMParser(); int iSizeRecevied = 0; // IDPMS通讯器 IDPMSComm *pComm = new IDPMSComm(); bRet = pComm->Open(); if (!bRet) { this->PostMsg(WM_START_IDPMS, pRes); delete pComm; return; } // 1.选择分机文件作为模板 szCommand.Format("IDPMS-CD:SET1401:PDFN=%s", m_szEquipPlace); iRet = pComm->SendCommand(szCommand, pRes); if (iRet <= 0) { pComm->Close(); this->PostMsg(WM_FAILURE, pRes); delete pComm; return; } // 2. 设置拍摄一次输出一次数据 szCommand.Format("IDPMS-CD:IDCT:TS0009"); iRet = pComm->SendCommand(szCommand, pRes); if (iRet <= 0) { pComm->Close(); this->PostMsg(WM_FAILURE, pRes); delete pComm; return; } // 3. 循环发指令拍摄 szCommand.Format("IDPMS-CD:SET2901"); CString dataLeft("IDPMS-CR:点发送开始"); int iLeft = dataLeft.GetLength(); while (!m_bDone) { if (!m_bPaused) { if (!pComm->Send(szCommand)) { LOG::E(szCommand, _T("发送失败!")); delete pComm; delete parser; return; } // 循环接收数据,直到超时退出 while (TRUE) { CStringArray arrData; if (!(pComm->Receive(arrData))) { break; } // 处理接收数据 int iRet = parser->ParseData(arrData, pRes, m_pDynamicData); if (iRet == 1) { this->PostMsg(WM_SUCCESS, pRes); break; } } } TRACE("Paused %d\r\n", m_bPaused); TRACE("Done %d\r\n", m_bDone); Sleep(m_iDynamicSpan); } // 关闭通讯器 pComm->Close(); // 发送测量结束消息 this->PostMsg(WM_COMPLETE, pRes); // 释放资源 delete pComm; delete parser; return; }