| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996 |
- /**************************************************************************************************
- 版本所有(C), 2020-2022, 北京普达迪泰
- ***************************************************************************************************
- 文 件 名: IDPMSManager.cpp
- 功能描述: IDPMS管理员,采用单例模式
- 版 本 号: 1.00初版
- 作 者: HYF
- 生成日期; 2021-12-20
- 最近修改:
- 函数列表:
- 修改历史:
- 1.日 期 :2021-12-20
- 作 者 : HYF
- 修改内容 : 创建文件
- **************************************************************************************************/
- #include "pch.h"
- #include "IDPMSManager.h"
- #include "IDPMSComm.h"
- #include "PostureDataPointManager.h"
- #include "PostureDataAngleManager.h"
- #include "StaticData.h"
- #include "IDCMParser.h"
- #include "DynamicData.h"
- #include "DynamicTaskThread.h"
- #include "StaticTaskThread.h"
- #include "CameraTaskThread.h"
- #include "IDPMSDeamon.h"
- IDPMSManager* IDPMSManager::m_pManager = NULL;
- IDPMSManager::CGarbo garbo;
- // 构造函数
- IDPMSManager::IDPMSManager()
- {
- m_bIDPMSRunning = FALSE;
- // 启动IDPMS进程
- if (!FindIDPMS())
- {
- StartIDPMS2();
- }
- // 动态任务指针初始化
- m_pDynamicTask = NULL;
- }
- /**************************************************************************************************
- 函 数 名 :IDPMSManager
- 功能描述 :析构函数,但实际不会执行
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- IDPMSManager::~IDPMSManager()
- {
- if (m_pDynamicData != NULL)
- {
- m_pDynamicData->Clear();
- delete m_pDynamicData;
- m_pDynamicData = NULL;
- }
- }
- /**************************************************************************************************
- 函 数 名 :GetManager
- 功能描述 :获取数据库连接
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- IDPMSManager* IDPMSManager::GetManager()
- {
- if (m_pManager == NULL)
- {
- CMutex mux;
- mux.Lock();
- if (m_pManager == NULL) {
- m_pManager = new IDPMSManager();
- }
- mux.Unlock();
- }
- return m_pManager;
- }
- /**************************************************************************************************
- 函 数 名 :StartIDPMS1
- 功能描述 :连接IDPMS
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartIDPMS1()
- {
- BOOL bRet = TRUE;
- if (!FindWindow(NULL,g_szIDPMSWindowTitle.GetBuffer()))
- {
- ::ShellExecute(NULL, NULL, g_szIDPMSPath, NULL, "", SW_SHOW);
- }
- return bRet;
- }
- /**************************************************************************************************
- 函 数 名 :StartIDPMS2
- 功能描述 :连接IDPMS
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartIDPMS2()
- {
- STARTUPINFO si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags=STARTF_USESHOWWINDOW;
- si.wShowWindow=SW_HIDE;
- PROCESS_INFORMATION pi;
- ZeroMemory(&pi, sizeof(pi));
-
- BOOL bRet = CreateProcess(g_szIDPMSPath.GetBuffer(), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
- if (!bRet) {
- AfxMessageBox("IDPMS启动失败");
- LOG::E(_T("IDPMS启动失败"));
- return FALSE;
- }
- // 等待新进程初始化完毕
- //WaitForInputIdle(pi.hProcess, 10000);
- //Sleep(2000);
- //if (g_iFindIDPMSType == 1) {
- int iTime = 0;
- while (TRUE)
- {
- iTime++;
- BOOL bRet = this->FindIDPMS();
- if (bRet) {
- return TRUE;
- }
-
- Sleep(1000);
- if (iTime >= 3) {
- break;
- }
- }
- AfxMessageBox("IDPMS启动失败");
- LOG::E(_T("IDPMS启动失败"));
- return FALSE;
- }
- /**************************************************************************************************
- 函 数 名 :StartIDPMS2
- 功能描述 :连接IDPMS
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartIDPMS21()
- {
- STARTUPINFO si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
- PROCESS_INFORMATION pi;
- ZeroMemory(&pi, sizeof(pi));
- BOOL bRet = CreateProcess(g_szIDPMSPath.GetBuffer(), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
- if (!bRet) {
- AfxMessageBox("IDPMS启动失败");
- LOG::E(_T("IDPMS启动失败"));
- return FALSE;
- }
- // 等待新进程初始化完毕
- WaitForInputIdle(pi.hProcess, 10000);
- if (g_iFindIDPMSType == 1) {
- this->FindIDPMS();
- return TRUE;
- }
- PROCESS_INFO procwin;
- procwin.dwProcessId = pi.dwProcessId;
- procwin.hWnd = NULL;
- EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
- if (NULL == procwin.hWnd)
- {
- Sleep(200);
- EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
- }
- // 赋值全局量
- g_hIDPMSHWnd = procwin.hWnd; //窗口HWND
- g_dwIDPMSProcessId = procwin.dwProcessId; //进程ID
- ::ShowWindow(g_hIDPMSHWnd, SW_HIDE);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :StartIDPMS3
- 功能描述 :异步启动IDPMS
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartIDPMS3()
- {
- //创建Thread 先挂起
- IDPMSDeamon *pIDPMSDeamonThread = (IDPMSDeamon*)AfxBeginThread(RUNTIME_CLASS(IDPMSDeamon),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
- pIDPMSDeamonThread->m_bAutoDelete = FALSE;
- pIDPMSDeamonThread->ResumeThread();
- pIDPMSDeamonThread->PostThreadMessage(WM_START_IDPMS, NULL, NULL);
- WaitForSingleObject(pIDPMSDeamonThread->m_hThread, INFINITE);
- delete pIDPMSDeamonThread;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :SetTopWindow
- 功能描述 :设置IDPMS窗口到最前端
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::SetTopWindow(HWND hWnd)
- {
- HWND hForeWnd = GetForegroundWindow();
- DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);
- DWORD dwCurID = GetCurrentThreadId();
- AttachThreadInput(dwCurID, dwForeID, TRUE);
- ShowWindow(hWnd, SW_SHOWNORMAL);
- SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
- SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
- SetForegroundWindow(hWnd);
- AttachThreadInput(dwCurID, dwForeID, FALSE);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :AttachIDPMS
- 功能描述 :附加IDPMS到指定窗体
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::AttachIDPMS(CWnd *pWnd)
- {
- // 初始化
- if (g_hIDPMSHWnd)
- {
- CRect rectShow;
- pWnd->GetClientRect(&rectShow);
- ::SetParent(g_hIDPMSHWnd, pWnd->GetSafeHwnd());
- LONG style = GetWindowLong(g_hIDPMSHWnd, GWL_STYLE);// 14CF 0000
- style &= ~WS_CAPTION;
- style &= ~WS_THICKFRAME;
- style |= WS_VISIBLE;
- SetWindowLong(g_hIDPMSHWnd, GWL_STYLE, style);//eraze title of ms paint window.
- ::MoveWindow(g_hIDPMSHWnd, rectShow.left, rectShow.top, rectShow.right, rectShow.bottom, true);
- ::UpdateWindow(g_hIDPMSHWnd);
- ::ShowWindow(g_hIDPMSHWnd, SW_SHOW);
- IDPMSManager *pManager = IDPMSManager::GetManager();
- pManager->SetTopWindow(g_hIDPMSHWnd);
- }
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :FindIDPMS
- 功能描述 :判断IDPMS是否已启动
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::FindIDPMS()
- {
- // 查找IDPMS主窗口
- HWND hWnd = ::FindWindow(NULL, g_szIDPMSWindowTitle.GetBuffer());
- if (hWnd != NULL)
- {
- DWORD pid = 0;
- GetWindowThreadProcessId(hWnd, &pid);
- g_hIDPMSHWnd = hWnd;
- g_dwIDPMSProcessId = pid;
- ::ShowWindow(g_hIDPMSHWnd, SW_HIDE);
- // 发现IDPMS,返回TRUE;
- return TRUE;
- }
- // 没有发现IDPMS,则返回FALSE;
- return FALSE;
- }
- /**************************************************************************************************
- 函 数 名 :DetachIDPMS
- 功能描述 :附加IDPMS到指定窗体
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DetachIDPMS(CWnd *pWnd)
- {
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :CloseIDPMS
- 功能描述 :终止IDPMS
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::CloseIDPMS()
- {
- HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, false, g_dwIDPMSProcessId);
- BOOL bRet = TerminateProcess(hProcess, 0);
- CloseHandle(hProcess);
- return;
- }
- /**************************************************************************************************
- 函 数 名 :CloseIDPMSProject
- 功能描述 :Close IDPMS Project
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::CloseIDPMSProject()
- {
- CString szCommand;
- BOOL bRet = TRUE;
- int iRet = 0;
- DMSResponse *pRes = NULL;
- int iSizeRecevied = 0;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- bRet = pComm->Open();
- if (!bRet) {
- delete pComm;
- return FALSE;
- }
- // 1.结束当前工程
- szCommand.Format("IDPMS-CD:SET0003");
- iRet = pComm->SendCommand(szCommand, pRes);
- if (iRet <= 0) {
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :SingleCameraConfigProc
- 功能描述 :单相机标定
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::SingleCameraConfigProc(int iCam, DMSResponse *&pRes)
- {
- BOOL bRet = TRUE;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- pComm->Open();
-
- // 1.结束当前工程
- CString szCommand;
- szCommand.Format("IDPMS-CD:SET0003");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 2. 删除之前的工程文件夹
- CString szCameraFolder;
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%d号相机", iCam);
- Utils::DeleteFolder(szCameraFolder);
- // 3.新建工程
- szCommand.Format("IDCMD0017(PDTL=%d号模板,PDSV=%d号相机,PDDT= false)", iCam, iCam);
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 4.读取路径下相机相片
- szCommand.Format("IDPMS-CD:SET0008");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // // 5.读取当前路径下的全部相片
- // szCommand.Format("IDPMS-CD:SET1701:C:/PD/1号/内参");
- // bRet = pComm->SendCommand(szCommand, pRes);
- // if (!bRet) {
- // pComm->Close();
- //delete pComm;
- // return FALSE;
- // }
- // 5.读取当前路径下的全部相片
- szCommand.Format("IDPMS-CD:SET1701:D:/BD");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 6.开始自动测量
- szCommand.Format("IDCMD0016(PDST=true,PDGO=true,PDCE=true,PDWN=false,PDFP=false,PDSS=true)");
- bRet = pComm->SendCommand(szCommand, pRes, _T("CPDSimpleBundleStats"));
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :DoubleCameraConfig1Proc
- 功能描述 :双相机标定-建立工程
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DoubleCameraConfig1Proc(LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, DMSResponse *&pRes)
- {
- BOOL bRet = TRUE;
-
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- pComm->Open();
- // 1.结束当前工程
- CString szCommand;
- szCommand.Format("IDPMS-CD:SET0003");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 2.删除之前的工程文件
- CString szCameraFolder;
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%s_%s_双相机", szEquipTypeCode, szEquipCode);
- Utils::DeleteFolder(szCameraFolder);
- // 3. Copy相机驱动文件
- CString szSourceCam;
- CString szTargetCam;
- szSourceCam.Format("C:\\PD\\IDPMS\\工程\\1号相机\\BDAData\\PDDT-HCCAM_CLG1.cam");
- szTargetCam.Format("C:\\Program Files\\PD\\IDPMS\\模板工程\\双相机\\PDDT-HCCAM_CLG1.cam");
- CopyFile(szSourceCam, szTargetCam, FALSE);
- szSourceCam.Format("C:\\PD\\IDPMS\\工程\\2号相机\\BDAData\\PDDT-HCCAM_CLG2.cam");
- szTargetCam.Format("C:\\Program Files\\PD\\IDPMS\\模板工程\\双相机\\PDDT-HCCAM_CLG2.cam");
- CopyFile(szSourceCam, szTargetCam, FALSE);
-
- // 4.双相机工程建立
- szCommand.Format("IDCMD0017(PDTL=双相机,PDSV=%s_%s_双相机,PDDT= false)", szEquipTypeCode, szEquipCode);
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :DoubleCameraConfig2Proc
- 功能描述 :双相机标定-外参标定
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DoubleCameraConfig2Proc(LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, DMSResponse *&pRes)
- {
- BOOL bRet = TRUE;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- pComm->Open();
-
- // 1.选择机架文件作为模板
- CString szCommand;
- szCommand.Format("IDPMS-CD:SET1401:PDFN=机架");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 2.拍摄一次
- szCommand.Format("IDPMS-CD:SET2901)");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- Sleep(2000);
- // 3.选择机架上建立坐标点
- szCommand.Format("IDCMD0025(PDFN=TRI3D E1,PDMP=flase, PDDP=flase, PDCP=flase, PDPL=C1 C2 C3)");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 4.将机架上建立坐标点拷贝到RO3D
- szCommand.Format("IDCMD0032(PDFN=BDA3D,PDMP=true, PDDP=true, PDCP=true, PDAP=flase)");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 5.轴对准
- szCommand.Format("IDPMS-CD:SET3701:p1=C1:p2=C2:p3=C3:p1x=0:p1y=0:p1z=0:p2type=type:p3type=type:sys=frame");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 3.双相机快速标定
- //szCommand.Format("IDPMS-CD:SET2701");
- //bRet = pComm->SendCommand(szCommand);
- //if (!bRet) {
- // szResult.Format("%s", pRes);
- // pComm->Close();
- // return FALSE;
- //}
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :StaticTaskProc
- 功能描述 :静态任务处理
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StaticTaskProc(DWORD dwTaskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, DMSResponse *&pRes)
- {
- BOOL bRet = TRUE;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- pComm->Open();
- // 1.删除当前工程
- CString szCommand;
- szCommand.Format("IDPMS-CD:SET0003");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 2.删除之前的工程文件
- CString szCameraFolder;
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%s_%s_单相机", szEquipTypeCode, szEquipCode);
- Utils::DeleteFolder(szCameraFolder);
-
- //// 3.Copy相机驱动文件
- //CString szSourceCam("C:\\PD\\IDPMS\\工程\\1号相机\\平差数据\\PDDT-HCCAM_CLG1.cam");
- //CString szTargetCam;
- //szTargetCam.Format("C:\\Program Files\\PD\\IDPMS\\模板工程\\%s\\PDDT-HCCAM_CLG1.cam", szEquipTypeCode);
- //CopyFile(szSourceCam, szTargetCam, FALSE);
- // 4.根据模板新建文件
- szCommand.Format("IDCMD0017(PDTL=%s,PDSV=%s_%s_单相机,PDDT= false)", szEquipTypeCode, szEquipTypeCode, szEquipCode);
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 5.读取单相机相片
- szCommand.Format("IDPMS-CD:SET0008");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 6.读取当前路径下所有相片
- //szCommand.Format("IDPMS-CD:SET1701:C:/PD/1号/内参");
- szCommand.Format("IDPMS-CD:SET1701:");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 7.开始测量
- szCommand.Format("IDCMD0016(PDST=true,PDGO=true,PDCE=true,PDWN=false,PDFP=false,PDSS=true)");
- bRet = pComm->SendCommand(szCommand, pRes, _T("CPDSimpleBundleStats"));
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 8.轴对准
- szCommand.Format("IDPMS-CD:SET3701:p1=PC1:p2=GK1:p3=GK2:p1x=0:p1y=0:p1z=0:p2type=type:p3type=type:sys=frame");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 9.生成当前型号测量数据
- szCommand.Format("IDPMS-CD:SET6201:SUB6201:PDSD=false:PDNM=BDA3D2");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 10.解析报告文件
- CString szFile;
- szFile.Format("C:\\PD\\IDPMS\\工程\\%s_%s\\BDA3D2.txt", szEquipTypeCode, szEquipCode);
- StaticData data(dwTaskId, szEquipTypeCode, szEquipCode);
- data.LoadDataFromFile(szFile);
-
- // 11.保存到数据库
- data.SaveToDB();
- // 12.生成动态测量驱动TXT文件
-
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :DynamicTaskProc
- 功能描述 :动态任务处理
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DynamicTaskProc(DWORD taskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, LPCTSTR szEquipPlace, DMSResponse *&pRes)
- {
- BOOL bRet = TRUE;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- pComm->Open();
- // 1. 结束当前进程
- CString szCommand;
- szCommand.Format("IDPMS-CD:SET0003");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
-
- // 2. 打开双相机工程
- szCommand.Format("IDPMS-CD:SET0001:C:\\PD\\IDPMS\\工程\\%s_%s_双相机\\%s_%s_双相机.prj",
- szEquipTypeCode, szEquipCode, szEquipTypeCode, szEquipCode);
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 3. 选择分机文件作为驱动
- szCommand.Format("IDCMD0004(PDFN=%s)", szEquipPlace);
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 4.选择多相机模式
- szCommand.Format("IDCMD0036()");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 5. 设置拍摄一次输出一次数据
- szCommand.Format("IDPMS-CD:IDCT:TS0009");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 6. 循环发指令拍摄
- szCommand.Format("IDPMS-CD:SET2901");
- bRet = pComm->SendCommand(szCommand, pRes);
- if (!bRet) {
- pComm->Close();
- delete pComm;
- return FALSE;
- }
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :StartStaticProcThread
- 功能描述 :静态任务处理
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartStaticProcThread(CWnd* pOwner, DWORD taskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode)
- {
- //创建Thread, 先挂起
- StaticTaskThread * pStaticTask = (StaticTaskThread*)AfxBeginThread( RUNTIME_CLASS(StaticTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
- pStaticTask->SetOwner(pOwner);
- pStaticTask->SetTaskId(taskId);
- pStaticTask->SetEquipTypeCode(szEquipTypeCode);
- pStaticTask->SetEquipCode(szEquipCode);
- pStaticTask->ResumeThread();
- pStaticTask->PostThreadMessage(WM_STATIC, NULL,NULL);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :StartStaticProcThread
- 功能描述 :静态任务处理
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartStaticDataProcThread(CWnd* pOwner, DWORD taskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode)
- {
- //创建Thread, 先挂起
- StaticTaskThread * pStaticTask = (StaticTaskThread*)AfxBeginThread(RUNTIME_CLASS(StaticTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
- pStaticTask->SetOwner(pOwner);
- pStaticTask->SetTaskId(taskId);
- pStaticTask->SetEquipTypeCode(szEquipTypeCode);
- pStaticTask->SetEquipCode(szEquipCode);
- pStaticTask->ResumeThread();
- pStaticTask->PostThreadMessage(WM_STATIC_DATA, NULL, NULL);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :StartDynamicProcThread
- 功能描述 :动态任务处理
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::StartDynamicProcThread(CWnd* pOwner, DWORD taskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, LPCTSTR szEquipPlace)
- {
- //创建Thread 先挂起
- m_pDynamicTask = (DynamicTaskThread*) AfxBeginThread( RUNTIME_CLASS(DynamicTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
-
- // 动态测量数据
- if (m_pDynamicData != NULL) {
- m_pDynamicData->Clear();
- delete m_pDynamicData;
- m_pDynamicData = NULL;
- }
- m_pDynamicData = new DynamicData(taskId, szEquipTypeCode, szEquipCode, szEquipPlace);
- m_pDynamicTask->SetOwner(pOwner);
- m_pDynamicTask->SetTaskId(taskId);
- m_pDynamicTask->SetEquipTypeCode(szEquipTypeCode);
- m_pDynamicTask->SetEquipCode(szEquipCode);
- m_pDynamicTask->SetEquipPlace(szEquipPlace);
- m_pDynamicTask->SetDynamicDataPtr(m_pDynamicData);
- m_pDynamicTask->ResumeThread();
- m_pDynamicTask->PostThreadMessage(WM_DYNAMIC, NULL,NULL);
-
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :SetDynamicTaskTimeSpan
- 功能描述 :设置动态测量时间
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::SetDynamicTaskTimeSpan(int iSpan)
- {
- if (m_pDynamicTask != NULL) {
- m_pDynamicTask->SetTimeSpan(iSpan);
- }
- }
- /**************************************************************************************************
- 函 数 名 :StopDynamicTask
- 功能描述 :停止测量
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::StopDynamicTask()
- {
- if (m_pDynamicTask != NULL)
- {
- m_pDynamicTask->Stop();
- }
- }
- /**************************************************************************************************
- 函 数 名 :TerminateDynamicTask
- 功能描述 :终止测量线程
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::TerminateDynamicTask()
- {
- if (m_pDynamicTask != NULL)
- {
- TerminateThread(m_pDynamicTask->m_hThread, 0);
- }
- }
- /**************************************************************************************************
- 函 数 名 :PauseDynamicTask
- 功能描述 :停止测量
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::PauseDynamicTask()
- {
- if (m_pDynamicTask != NULL)
- {
- m_pDynamicTask->Pause();
- }
- }
- /**************************************************************************************************
- 函 数 名 :PauseDynamicTask
- 功能描述 :停止测量
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- void IDPMSManager::ResumeDynamicTask()
- {
- if (m_pDynamicTask != NULL)
- {
- m_pDynamicTask->Resume();
- }
- }
- /**************************************************************************************************
- 函 数 名 :SingleCameraConfigProcThread
- 功能描述 :单相机标定
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::SingleCameraConfigProcThread(CWnd* pOwner, int iCam)
- {
- //创建Thread 先挂起
- CameraTaskThread *pCameraTask = (CameraTaskThread*) AfxBeginThread( RUNTIME_CLASS(CameraTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
- pCameraTask->SetOwner(pOwner);
- pCameraTask->ResumeThread();
- pCameraTask->PostThreadMessage(WM_SINGLE_CAM_CONFIG, iCam,NULL);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :DoubleCameraConfigStep1ProcThread
- 功能描述 :双相机标定:建立工程
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DoubleCameraConfigStep1ProcThread(CWnd* pOwner, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode)
- {
- //创建Thread 先挂起
- CameraTaskThread *pCameraTask = (CameraTaskThread*) AfxBeginThread( RUNTIME_CLASS(CameraTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
-
-
- pCameraTask->SetOwner(pOwner);
- pCameraTask->SetEquipTypeCode(szEquipTypeCode);
- pCameraTask->SetEquipCode(szEquipCode);
- pCameraTask->ResumeThread();
- pCameraTask->PostThreadMessage(WM_DOUBLE_CAM_CONFIG_STEP1, NULL,NULL);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :DoubleCameraConfigStep2ProcThread
- 功能描述 :双相机标定:外参标定
- 输出参数 :略
- 返 回 值 :略
- **************************************************************************************************/
- BOOL IDPMSManager::DoubleCameraConfigStep2ProcThread(CWnd* pOwner, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode)
- {
- //创建Thread 先挂起
- CameraTaskThread *pCameraTask = (CameraTaskThread*) AfxBeginThread( RUNTIME_CLASS(CameraTaskThread),
- THREAD_PRIORITY_NORMAL,
- 0,
- CREATE_SUSPENDED);
-
- pCameraTask->SetOwner(pOwner);
- pCameraTask->SetEquipTypeCode(szEquipTypeCode);
- pCameraTask->m_bAutoDelete = FALSE;
- pCameraTask->SetEquipCode(szEquipCode);
- pCameraTask->ResumeThread();
- pCameraTask->PostThreadMessage(WM_DOUBLE_CAM_CONFIG_STEP2, NULL,NULL);
- return TRUE;
- }
|