| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /**************************************************************************************************
- 版本所有(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;
- }
|