diff --git a/LaiPuLaser/CameraHawkvis.h b/LaiPuLaser/CameraHawkvis.h index bf165b4..d0c6237 100644 --- a/LaiPuLaser/CameraHawkvis.h +++ b/LaiPuLaser/CameraHawkvis.h @@ -18,11 +18,11 @@ public: bool SwitchCamera(long CamIndex); //根据相机索引 0、1 切换相机。由相机控件所在对话框Timmer检测当前索引,切换相机;跨线程直接切换会崩溃。 void OpenTemp(); - // unsigned char GetCurShapeModelID() { return m_CurShapeModelID; }; - // void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; }; + unsigned char GetCurShapeModelID() { return m_CurShapeModelID; }; + void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; }; - unsigned char GetCurShapeModelID() { return 0; }; - void SetCurShapeModelID(int ID) { m_CurShapeModelID = 0; }; + //unsigned char GetCurShapeModelID() { return 0; }; + //void SetCurShapeModelID(int ID) { m_CurShapeModelID = 0; }; public: CHawkvisctrlctrl1 *m_HawkvisCtrl;//霍克视觉的ocx 控件 diff --git a/LaiPuLaser/CommonFlowMgr.cpp b/LaiPuLaser/CommonFlowMgr.cpp index 267aef8..bb3e90b 100644 --- a/LaiPuLaser/CommonFlowMgr.cpp +++ b/LaiPuLaser/CommonFlowMgr.cpp @@ -1064,6 +1064,7 @@ bool CCommonFlowMgr::NormalMarkByPciCard(bool bSel, int times, int CyclicTimes) gLogMgr->WriteDebugLog("Fuc---->NormalMarkByPciCard : bSel = " + Bool2Str(bSel)); //临时Product CProduct Product; + Product.m_bManualMark = true; //创建一个临时的area CMarkArea MarkArea(Dbxy(0, 0), DbSize(100, 100)); //收集加工数据 @@ -1140,7 +1141,18 @@ bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel) MoveToFirstArea(Product.GetProductBasePt()); //搜集加工数据(这里比较耗费时间) - gMarkAreaMgr->CollectWorkData(bSel, Product); + try + { + gMarkAreaMgr->CollectWorkData(bSel, Product); + } + catch (CExceptionMsg msg) + { + gTrackWorkFlow1.RadAlamOnOff(true);//报警提示 + AfxMessageBox(msg.GetMsgStr()); + gTrackWorkFlow1.RadAlamOnOff(false);//报警提示 + return false; + } + if (!gMarkAreaMgr->HasWorkData()) return false; //是否需要自动回原点 diff --git a/LaiPuLaser/DlgDnCutCamera.cpp b/LaiPuLaser/DlgDnCutCamera.cpp index d1b41a4..b2f345f 100644 --- a/LaiPuLaser/DlgDnCutCamera.cpp +++ b/LaiPuLaser/DlgDnCutCamera.cpp @@ -113,14 +113,16 @@ BOOL DlgHawkvisCamera::OnInitDialog() //观察平台坐标的变化 void DlgHawkvisCamera::UpdateInfo() { - /*//换文件时,自动换模板 + //换文件时,自动换模板 if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID) { m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID(); OnBnClickedLoadCatchTemp(); - }*/ + } + if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex()) return; + if (gCameraHawkvis->GetCamIndex() == 0) OnBnClickedToCam1(); @@ -254,8 +256,8 @@ void DlgHawkvisCamera::OnBnClickedHkZoomOut() void DlgHawkvisCamera::OnBnClickedCreatCatchTemp() { //调用控件接口,创建基于形状的模板,输入参数为模板ID号。控件最多支持创建100个模板,即模板号为0~99 - m_HawkvisCtrl.CreateShapeModel(0); - //m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID()); + //m_HawkvisCtrl.CreateShapeModel(0); + m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID()); } void DlgHawkvisCamera::OnBnClickedTestCatchTemp() { diff --git a/LaiPuLaser/KnownFileNameVec b/LaiPuLaser/KnownFileNameVec index 07ac80d..47f0ffd 100644 Binary files a/LaiPuLaser/KnownFileNameVec and b/LaiPuLaser/KnownFileNameVec differ diff --git a/LaiPuLaser/Product.cpp b/LaiPuLaser/Product.cpp index b0e9839..29eadae 100644 --- a/LaiPuLaser/Product.cpp +++ b/LaiPuLaser/Product.cpp @@ -507,45 +507,43 @@ void CProduct::TheoryDataToRealData(vector &vec, Dbxy &AreaCenter, Dbxy Cu { vector::iterator iter = vec.begin(); vector::iterator iter_end = vec.end(); - - Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt(); for (;iter != iter_end;iter++) { - //(*iter) = (*iter) - DataCenter; //移动至以(0,0)点为原点 - - /* //抓取偏移(整图) - auto x = (*iter).x+m_CatchMark1Oft.x; - auto y = (*iter).y + m_CatchMark1Oft.y;*/ - auto x = (*iter).x; auto y = (*iter).y; //计算变换 double retx = m_p00*x + m_p01*y + m_p02; double rety = m_p10*x + m_p11*y + m_p12; - //强制的微调旋转量 - /*double retx2 = m_rp00*retx + m_rp01*rety + m_rp02; - double rety2 = m_rp10*retx + m_rp11*rety + m_rp12;*/ - - (*iter).x = retx;//2; - (*iter).y = rety;//2; + (*iter).x = retx; + (*iter).y = rety; auto temp = AreaCenter;//-DataCenter;//以区域中心为原点 (*iter) = (*iter) - temp; - //(*iter) = (*iter) - AreaCenter; - //振镜缩放 - Dbxy Scale = gProgram_SZ_XL->GetJig1Scale(); - if (gCameraHawkvis->GetCamIndex() == 1) + if (!m_bManualMark) { - Scale = gProgram_SZ_XL->GetJig3Scale(); + Dbxy Scale = gProgram_SZ_XL->GetJig1Scale(); + if (gCameraHawkvis->GetCamIndex() == 1) + { + Scale = gProgram_SZ_XL->GetJig3Scale(); + } + (*iter).x *= Scale.x; + (*iter).y *= Scale.y; + //区域内其他的偏移调整 + (*iter).x += CutAdjust.x; + (*iter).y += CutAdjust.y; + } + + if ( (abs(iter->x)>40) || (abs(iter->y)>40) ) + { + CExceptionMsg Msg; + Msg.SetMsg(CString("标刻数据错数!超出标刻范围!")); + throw Msg;//抛出异常 + //AfxMessageBox("标刻数据错数!超出标刻范围!"); } - (*iter).x *= Scale.x; - (*iter).y *= Scale.y; - //区域内其他的偏移调整 - (*iter).x +=CutAdjust.x; - (*iter).y += CutAdjust.y; + } } diff --git a/LaiPuLaser/Product.h b/LaiPuLaser/Product.h index fb6300b..38a7977 100644 --- a/LaiPuLaser/Product.h +++ b/LaiPuLaser/Product.h @@ -67,6 +67,7 @@ private: bool m_bHasMarkPt3;//是否有mark3 bool m_bNewAddProduct = false;//是否是改造后新增的那块产品(201910) public: + bool m_bManualMark = false;//是否是手动标刻(PCIMark按钮) //用于定位的两个定位点--------------------------- Dbxy m_TheoryMarkPt1;//理论坐标(layer 中的坐标) mm Dbxy m_TheoryMarkPt2; diff --git a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp index f62e7f3..d4a60bd 100644 --- a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp +++ b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp @@ -749,6 +749,10 @@ bool CTrackWorkFlow::PushJigOut() bool CTrackWorkFlow::IsJigOK() { +#ifdef CUSTOM_TXD_2_XL + return true; +#endif + if (gLogMgr->IsDebuging()) { return true; @@ -1515,17 +1519,167 @@ void CTrackWorkFlow::UnLoad() //如果另外一个轴在unload ,要等待其unload 完成 if (gProgram_SZ_XL->IsbAutoWorkMode()) { + while (!gExitApp) + { + Sleep(200); + //获取另外一个轴的状态 + ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType); + if (OtherTrackWorkStep != _ETrack_Step_Unload) + { + break; + } + } + } + + if (m_bAutoWorking)//自动运行中 + { + if (gProgram_SZ_XL->IsbAutoWorkMode())//自动模式 + { + //通知下料机下料 + if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Unload, true) == false) + { + SetCurTrackWorkStep(_ETrack_Step_Unload_Err); + Log = m_TrackName + " unload Err"; + gLogMgr->WriteDebugLog(Log); + return; + } + //等待拉走载具 + CString str = "轨道1"; + if (m_TrackType == _ETrackType_Track_2) + str = "轨道2"; + CString logstr; + logstr.Format("等待[%s]拉走载具.", str); + gLogMgr->WriteDebugLog(logstr); + + m_bPullJigOut = false; + int cnt = 0; + while (!m_bPullJigOut&&cnt < 400) + { + Sleep(300); + cnt++; + } + if (cnt == 400) + { + SetCurTrackWorkStep(_ETrack_Step_Unload_Err); + Log = m_TrackName + " 拉出治具 超时!"; + gLogMgr->WriteDebugLog(Log); + AfxMessageBox("拉出治具超时!请手动下料!"); + return; + } + + Sleep(30000); + + //平台移动到 送回空治具的位置 + MoveToPos(_ETrack_Step_WaitBack); + gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到位 + m_bLoadProduct = false;//轨道上是否load 了产品 + } + else//手动模式直接跳过下料步骤 + { + SetCurTrackWorkStep(_ETrack_Step_Unload_End); + } + } + else + { + if (AfxMessageBox("确认手动下料?", MB_YESNO) != IDYES) + { + SetCurTrackWorkStep(_ETrack_Step_NULL); + return; + } + //通知下料机下料 + if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Unload, true) == false) + { + SetCurTrackWorkStep(_ETrack_Step_Unload_Err); + Log = m_TrackName + " unload Err"; + gLogMgr->WriteDebugLog(Log); + return; + } + //等待拉走载具 + CString str = "轨道1"; + if (m_TrackType == _ETrackType_Track_2) + str = "轨道2"; + CString logstr; + logstr.Format("等待[%s]拉走载具.", str); + gLogMgr->WriteDebugLog(logstr); + + m_bPullJigOut = false; int cnt = 0; + while (!m_bPullJigOut&&cnt < 400) + { + Sleep(300); + cnt++; + } + if (cnt == 400) + { + SetCurTrackWorkStep(_ETrack_Step_Unload_Err); + Log = m_TrackName + " 拉出治具 超时!"; + gLogMgr->WriteDebugLog(Log); + AfxMessageBox("拉出治具超时!请手动下料!"); + return; + } + Sleep(30000); + //平台移动到 送回空治具的位置 + MoveToPos(_ETrack_Step_WaitBack); + gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到位 + m_bLoadProduct = false;//轨道上是否load 了产品 + } +} + +/* +//下料 +void CTrackWorkFlow::UnLoad() +{ + //设置当前步骤 + SetCurTrackWorkStep(_ETrack_Step_Unload); + //检查下料机的状态 + if (gProgram_SZ_XL->IsbCheckUnloadState()) + { + //如果另外一个轨道没有在下料,下料机在轨道上的时候判断为unload错误 + if (gMotionCard_PCI1245->CheckUnloadState() == false) + { + //获取另外一个轴的状态 + ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType); + if (OtherTrackWorkStep != _ETrack_Step_Unload) + { + SetCurTrackWorkStep(_ETrack_Step_Unload_Err); + CMsgBox MsgBox; + MsgBox.Show("下料机位置异常!"); + return; + } + } + } + //平台移动到下料位置 + MoveToPos(_ETrack_Step_Unload); + //自动打开载盘 + ProductCarrierOpenClose(true); + + //通知下料 + CString Log = m_TrackName + " UnLoad"; + gLogMgr->WriteDebugLog(Log); + + if (gProgram_SZ_XL->IsbShieldUnLoad())//屏蔽下料 + { + if (m_bAutoWorking)//自动运行中 + SetCurTrackWorkStep(_ETrack_Step_Unload_End); + else + SetCurTrackWorkStep(_ETrack_Step_Stop); + return; + } + + //如果另外一个轴在unload ,要等待其unload 完成 + if (gProgram_SZ_XL->IsbAutoWorkMode()) + { + //int cnt = 0; while (!gExitApp) { Sleep(500); //获取另外一个轴的状态 ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType); - if ((OtherTrackWorkStep != _ETrack_Step_Unload)||cnt>10) + if ((OtherTrackWorkStep != _ETrack_Step_Unload))//||cnt>10) { break; } - cnt++; + //cnt++; } } @@ -1552,7 +1706,7 @@ void CTrackWorkFlow::UnLoad() { Sleep(300); } - /*if (cnt == 400) + / *if (cnt == 400) { Log = m_TrackName + " [下料机] 运动至下载具位 超时!"; gLogMgr->WriteDebugLog(Log); @@ -1561,7 +1715,7 @@ void CTrackWorkFlow::UnLoad() gTrackWorkFlow1.RadAlamOnOff(false); SetCurTrackWorkStep(_ETrack_Step_Unload_Err); return; - }*/ + }* / if (!PushJigOut())//推出治具 { @@ -1603,6 +1757,9 @@ void CTrackWorkFlow::UnLoad() FunctionUnload(); } } +*/ + + //移动Y 轴到安全区域 void CTrackWorkFlow::MoveMotorYToSafePos() { diff --git a/LaiPuLaser/stdafx.h b/LaiPuLaser/stdafx.h index 3c5f8b4..c0f1eeb 100644 --- a/LaiPuLaser/stdafx.h +++ b/LaiPuLaser/stdafx.h @@ -71,6 +71,8 @@ //#define __PROGRESS_DLG__ //是否显示进度条对话框 #define __CUSTOM_SW_XL__ //客户:汕尾信利 +#define CUSTOM_TXD_2_XL //同兴达改信利 + //#define USE_Virtual_CCD_DATA //使用虚拟(自定义的)CCD数据 #define _USE_LAIPU_SUPERDOG //使用莱普加密狗 //#define Create_MarkPos_MarkData //生成每个区域的加工位置文本文件;生成最后一个区域的打印数据文本文件