diff --git a/LaiPuLaser/CommonFlowMgr.cpp b/LaiPuLaser/CommonFlowMgr.cpp index 8be1891..282b85b 100644 --- a/LaiPuLaser/CommonFlowMgr.cpp +++ b/LaiPuLaser/CommonFlowMgr.cpp @@ -1075,10 +1075,26 @@ void CCommonFlowMgr::MoveToFirstArea() //大幅面拼接打标(平台移动,振镜拼接,数据为obj 对象) (bSel ==true 的时候为选择打标) bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel) { - gLogMgr->WriteDebugLog("Fuc---->MultipleAreaMark : bSel = " + Bool2Str(bSel)); + gLogMgr->WriteDebugLog("Fuc---->MultipleAreaMa/rk : bSel = " + Bool2Str(bSel)); //搜集加工数据(这里比较耗费时间) - gMarkAreaMgr->CollectWorkData(bSel, Product); + + try + { + gMarkAreaMgr->CollectWorkData(bSel, Product); + } + catch (CExceptionMsg msg) + { + AfxMessageBox(msg.GetMsgStr()); + gServer->BroadCast("副机收集数据异常!Exception! "); + return false; + } + gServer->m_bLogicErr = false; + CString str = "READY"; + gServer->BroadCast(str); + gLogMgr->WriteDebugLog(str); + + if (!gMarkAreaMgr->HasWorkData()) return false; diff --git a/LaiPuLaser/CommonFlowMgr.h b/LaiPuLaser/CommonFlowMgr.h index 2a10796..9c13c5f 100644 --- a/LaiPuLaser/CommonFlowMgr.h +++ b/LaiPuLaser/CommonFlowMgr.h @@ -119,6 +119,7 @@ private: bool m_bUseLaser;//是否开关激光 //振镜校准参数-------------------------------------------------------------- double m_CalibrationPointGap;//打点之间的间隔mm +public: double m_CalibrationRange;//振镜校准范围mm }; diff --git a/LaiPuLaser/DlgSW_XL_Flow.cpp b/LaiPuLaser/DlgSW_XL_Flow.cpp index 5966ee6..c42de68 100644 --- a/LaiPuLaser/DlgSW_XL_Flow.cpp +++ b/LaiPuLaser/DlgSW_XL_Flow.cpp @@ -474,10 +474,10 @@ void CDlgSW_XL_Flow::UpdateCutPar() m_MarkAreaCutCount = gCommonFlowMgr->GetAreaCycleCnt();//循环次数 m_Jig2PrtOft_x = gCommonFlowMgr->m_Jig2PrtOft.x;//针对产品的切割偏移 - m_Jig2PrtOft_x = gCommonFlowMgr->m_Jig2PrtOft.x;//针对产品的切割偏移 + m_Jig2PrtOft_y = gCommonFlowMgr->m_Jig2PrtOft.y;//针对产品的切割偏移 - m_Jig2PrtOft_x = gCommonFlowMgr->m_Jig4PrtOft.x;//针对产品的切割偏移 - m_Jig2PrtOft_x = gCommonFlowMgr->m_Jig4PrtOft.x;//针对产品的切割偏移 + m_Jig4PrtOft_x = gCommonFlowMgr->m_Jig4PrtOft.x;//针对产品的切割偏移 + m_Jig4PrtOft_y = gCommonFlowMgr->m_Jig4PrtOft.y;//针对产品的切割偏移 { CString path; @@ -489,10 +489,10 @@ void CDlgSW_XL_Flow::UpdateCutPar() ar + m_Jig4PrtOft_y; gCommonFlowMgr->m_Jig2PrtOft.x= m_Jig2PrtOft_x;//针对产品的切割偏移 - gCommonFlowMgr->m_Jig2PrtOft.x = m_Jig2PrtOft_y;//针对产品的切割偏移 + gCommonFlowMgr->m_Jig2PrtOft.y = m_Jig2PrtOft_y;//针对产品的切割偏移 gCommonFlowMgr->m_Jig4PrtOft.x = m_Jig4PrtOft_x;//针对产品的切割偏移 - gCommonFlowMgr->m_Jig4PrtOft.x = m_Jig4PrtOft_y;//针对产品的切割偏移 + gCommonFlowMgr->m_Jig4PrtOft.y = m_Jig4PrtOft_y;//针对产品的切割偏移 } diff --git a/LaiPuLaser/DxfReadMgr.cpp b/LaiPuLaser/DxfReadMgr.cpp index 63868af..81723c3 100644 --- a/LaiPuLaser/DxfReadMgr.cpp +++ b/LaiPuLaser/DxfReadMgr.cpp @@ -382,6 +382,7 @@ bool CDxfReadMgr::OpenDxfFileDlg(double Angle) if (!fp) { gLogMgr->WriteDebugLog("Func : ReadDxfFile ---->Dxf File Open Error!"); + //"D:\紫外切割机\同兴达双头-推治具\LaiPuLaser\Debug\TempMarkData\D287.dxf" return false; } m_LINE.Empty(); diff --git a/LaiPuLaser/ObjComponentMgr.cpp b/LaiPuLaser/ObjComponentMgr.cpp index c89a0e0..8ec3466 100644 --- a/LaiPuLaser/ObjComponentMgr.cpp +++ b/LaiPuLaser/ObjComponentMgr.cpp @@ -1008,18 +1008,16 @@ void CObjComponentMgr::CreatObjByLayerObj() //从obj 中分析出两个定位mark 的位置 void CObjComponentMgr::AnalyseMarkPt() { - return; + //return; //vector MarkVec; //先找出圆形对象 { vector::iterator iter = m_ComponentVec.begin(); vector::iterator iter_end = m_ComponentVec.end(); - for(;iter!=iter_end;) + for(;iter!=iter_end;iter++) { - if ((*iter).IsCircle()) - m_ComponentVec.erase(iter); - else - iter++; + if ((*iter).IsCircle()) + iter->SetbMarkObj(true); } } /* diff --git a/LaiPuLaser/Product.cpp b/LaiPuLaser/Product.cpp index 512da30..1459d9f 100644 --- a/LaiPuLaser/Product.cpp +++ b/LaiPuLaser/Product.cpp @@ -470,7 +470,16 @@ void CProduct::TheoryDataToRealData(vector &vec, Dbxy &AreaCenter, Dbxy Cu (*iter).y += CutAdjust.y; } - + auto DataRange = gCommonFlowMgr->m_CalibrationRange / 2; + if (abs(iter->x)>DataRange||abs(iter->y)>DataRange) + { + CExceptionMsg msg; + CString str; + str.Format("x=%.4f y=%.4f \r\n其中偏移调整: dx=%.4f,dy=%.4f", iter->x, iter->y,CutAdjust.x,CutAdjust.y); + msg.SetMsg(CString("标刻数据异常,超出校准范围!\r\n")+str); + + throw msg; + } } } diff --git a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp index d729fa0..7cf7172 100644 --- a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp +++ b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.cpp @@ -146,7 +146,9 @@ void CTrackWorkFlow::ExecuteCurStep() CatchMark();//抓取定位 break;*/ case _ETrack_Step_Catch_mark_End://等待加工 + { MarkProcess();//计算,收集加工数据(服务端) + } break; /*case _ETrack_Step_Mark_End://加工完成 ThrowEdge();//去边框 @@ -811,15 +813,12 @@ void CTrackWorkFlow::MarkProcess() gWorkTime.StartRecordTime();//计时开始 //设置当前的工作步骤 - SetCurTrackWorkStep(_ETrack_Step_Marking); + //SetCurTrackWorkStep(_ETrack_Step_Marking); //XY 组切换 MarkProcessExt(); - CString str = "READY"; - gServer->BroadCast(str); - gLogMgr->WriteDebugLog(str); - + //设置当前的工作步骤 - SetCurTrackWorkStep(_ETrack_Step_Marking); + //SetCurTrackWorkStep(_ETrack_Step_Marking); //数据移动回默认的位置 /* gProgramCutMgr->MoveObjData(Dbxy(0, 0)); gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));*/ diff --git a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.h b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.h index 1ffeb82..da28b47 100644 --- a/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.h +++ b/LaiPuLaser/Program_SZ_XL_TrackWorkFlow.h @@ -87,8 +87,9 @@ private: void MoveToWaitPos(); void MoveToPos(ETrackWorkStep WorkStep); void MarkProcess(); +public: bool MarkProcessExt(); - +private: void ReadPlcMsgExt(); void AnalyzeRecvCmd(char *buf,int len); void ThrowEdge(); diff --git a/LaiPuLaser/ServerMgr.cpp b/LaiPuLaser/ServerMgr.cpp index 0f28ba1..698be60 100644 --- a/LaiPuLaser/ServerMgr.cpp +++ b/LaiPuLaser/ServerMgr.cpp @@ -202,18 +202,32 @@ void CServerMgr::OnReceive(int nErrorCode) gServer->m_RcvProduct.m_p11 = dvec[4]; gServer->m_RcvProduct.m_p12 = dvec[5]; + //gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End); + + gTrackWorkFlow1.MarkProcessExt(); - gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End); + if (!m_bLogicErr ) + { + CString str = "EXECMD_OK;"; + Send(str, str.GetLength()); + gLogMgr->WriteDebugLog("Send: " + str); + } + return CSocket::OnReceive(nErrorCode); + } if (RcvStr.Find(ACTION_COLLECT) != -1) //收集数据. { + gServer->m_bLogicErr = true; gMarkAreaMgr->CollectOrgWorkData(gProgram_SZ_XL->IsbSelMarkMode(), gServer->m_RcvProduct); gLogMgr->WriteDebugLog(ACTION_COLLECT + "OK"); } if (RcvStr.Find(ACTION_STARTWORK) != -1) //启动加工 { + if (m_bLogicErr) + return CSocket::OnReceive(nErrorCode); + int sPos = RcvStr.ReverseFind(';'); int ePos = RcvStr.GetLength(); CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1); @@ -259,7 +273,7 @@ void CServerMgr::OnReceive(int nErrorCode) if (rcvcnt!= arryCnt*(sizeof(int))) { - gLogMgr->WriteDebugLog("接收已选中Obj索引数组错误。"); + gLogMgr->WriteDebugLog("接收已选中Obj索引数组错误."); } int idx; diff --git a/LaiPuLaser/ServerMgr.h b/LaiPuLaser/ServerMgr.h index 6a1c999..cdf816a 100644 --- a/LaiPuLaser/ServerMgr.h +++ b/LaiPuLaser/ServerMgr.h @@ -87,6 +87,7 @@ public: int m_RcvCurTrackIndex; //接收到的当前加工轨道 int m_curAreaDataCnt = 0; //当前加工区域数据量. static vector ServerVec;//服务员的容器 + bool m_bLogicErr = true; private: virtual void OnAccept(int nErrorCode); virtual void OnClose(int nErrorCode); diff --git a/LaiPuLaser/hlp/LaiPuLaser.chm b/LaiPuLaser/hlp/LaiPuLaser.chm index a8ad621..ae703e7 100644 Binary files a/LaiPuLaser/hlp/LaiPuLaser.chm and b/LaiPuLaser/hlp/LaiPuLaser.chm differ