From 041c85d648906b03f4cccfac2f35ea2347a02bf4 Mon Sep 17 00:00:00 2001 From: wyj <157651241@qq.com> Date: Tue, 25 Jun 2024 15:22:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=89=E6=96=91=E6=A3=80=E6=B5=8B=E5=9B=BA?= =?UTF-8?q?=E5=AE=9A=E7=94=B5=E6=B5=81=E4=B8=8E=E8=A1=B0=E5=87=8F=E8=A7=92?= =?UTF-8?q?=E5=BA=A6=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp | 121 ++++++++++++++++++ LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h | 10 +- LaiPuLaser/LaiPuLaser/CommonFlowMgr.cpp | 77 ++++++++++- 3 files changed, 199 insertions(+), 9 deletions(-) diff --git a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp index 1b40a1a..e1566b0 100644 --- a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp @@ -157,6 +157,11 @@ CAnnealMonitoringMgr::CAnnealMonitoringMgr(void) m_bBeamCheckByYmtc = false;//是否将beam 数据发送给YMTC 检测 + m_BeamCheckSetCur1 = 10; + m_BeamCheckSetCur2 = 10; + m_BeamSetDimmer1 = 38; + m_BeamSetDimmer2 = 38; + m_GateCheck_bUse = true;//是否监控光闸状态 m_GateCheck_MinDataCnt = 540;//最小判断Data数 m_GateCheck_MidDataCnt = 180;//中间判断Data数(需要小于最小点数) @@ -592,6 +597,95 @@ CMFCPropertyGridProperty *CAnnealMonitoringMgr::CreatGridProperty() pGroup1->AddSubItem(p); gDevicePropertieMgr.Insert(p, pPropertie); } + { + //添加属性变量映射 + Name = _T("m_BeamCheckSetCur1");//变量名字 + CPropertie *pPropertie = new CPropertie; + pPropertie->SetpVal((void*)&m_BeamCheckSetCur1); + pPropertie->SetType(_PROP_TYPE_DOUBLE); + pPropertie->SetpModule(this); + pPropertie->SetPath(Path); + pPropertie->SetName(Name); + pPropertie->WriteRead(true);//读取保存的属性 + + //添加属性显示 + PropertyName = _T("Laser1设置电流"); + Description = _T("光斑检测时Laser1设置电流"); + + pPropertie->SetGroupName(GroupName); + pPropertie->SetShowName(PropertyName); + pPropertie->SetModuleName(ModuleName); + CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_BeamCheckSetCur1, Description); + pGroup1->AddSubItem(p); + gDevicePropertieMgr.Insert(p, pPropertie); + } + { + //添加属性变量映射 + Name = _T("m_BeamCheckSetCur2");//变量名字 + CPropertie *pPropertie = new CPropertie; + pPropertie->SetpVal((void*)&m_BeamCheckSetCur2); + pPropertie->SetType(_PROP_TYPE_DOUBLE); + pPropertie->SetpModule(this); + pPropertie->SetPath(Path); + pPropertie->SetName(Name); + pPropertie->WriteRead(true);//读取保存的属性 + + //添加属性显示 + PropertyName = _T("Laser2设置电流"); + Description = _T("光斑检测时Laser2设置电流"); + + pPropertie->SetGroupName(GroupName); + pPropertie->SetShowName(PropertyName); + pPropertie->SetModuleName(ModuleName); + CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_BeamCheckSetCur2, Description); + pGroup1->AddSubItem(p); + gDevicePropertieMgr.Insert(p, pPropertie); + } + { + //添加属性变量映射 + Name = _T("m_BeamSetDimmer1");//变量名字 + CPropertie *pPropertie = new CPropertie; + pPropertie->SetpVal((void*)&m_BeamSetDimmer1); + pPropertie->SetType(_PROP_TYPE_DOUBLE); + pPropertie->SetpModule(this); + pPropertie->SetPath(Path); + pPropertie->SetName(Name); + pPropertie->WriteRead(true);//读取保存的属性 + + //添加属性显示 + PropertyName = _T("Laser1设置衰减角度"); + Description = _T("光斑检测时Laser1设置衰减角度(最小默认30)"); + + pPropertie->SetGroupName(GroupName); + pPropertie->SetShowName(PropertyName); + pPropertie->SetModuleName(ModuleName); + CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_BeamSetDimmer1, Description); + pGroup1->AddSubItem(p); + gDevicePropertieMgr.Insert(p, pPropertie); + } + { + //添加属性变量映射 + Name = _T("m_BeamSetDimmer2");//变量名字 + CPropertie *pPropertie = new CPropertie; + pPropertie->SetpVal((void*)&m_BeamSetDimmer2); + pPropertie->SetType(_PROP_TYPE_DOUBLE); + pPropertie->SetpModule(this); + pPropertie->SetPath(Path); + pPropertie->SetName(Name); + pPropertie->WriteRead(true);//读取保存的属性 + + //添加属性显示 + PropertyName = _T("Laser2设置衰减角度"); + Description = _T("光斑检测时Laser2设置衰减角度(最小默认30)"); + + pPropertie->SetGroupName(GroupName); + pPropertie->SetShowName(PropertyName); + pPropertie->SetModuleName(ModuleName); + CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_BeamSetDimmer2, Description); + pGroup1->AddSubItem(p); + gDevicePropertieMgr.Insert(p, pPropertie); + } + pGroup->AddSubItem(pGroup1); } } @@ -1612,6 +1706,33 @@ void CAnnealMonitoringMgr::BindingCheckList(CListCtrl *Power1List,CListCtrl *Pow m_pLaserBeamCheckList = BeamList; } +double CAnnealMonitoringMgr::GetBeamCheckSetCur(eLaserDeviceType LaserDevice) +{ + if (_LaserDeviceType_MainLaser1 == LaserDevice) + { + return m_BeamCheckSetCur1; + } + else + { + return m_BeamCheckSetCur2; + } +} + +double CAnnealMonitoringMgr::GetBeamSetDimmer(eLaserDeviceType LaserDevice) +{ + double Val; + if (_LaserDeviceType_MainLaser1 == LaserDevice) + { + Val = m_BeamSetDimmer1 > 30 ? m_BeamSetDimmer1 : 30; + return Val; + } + else + { + Val = m_BeamSetDimmer2 > 30 ? m_BeamSetDimmer2 : 30; + return Val; + } +} + void CAnnealMonitoringMgr::InitPrepareWorkVec() { int Cnt = (int)(_AnnealMonitoringType_Max); diff --git a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h index ab64744..be27145 100644 --- a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h +++ b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h @@ -627,8 +627,10 @@ public: void SetUseMFCWork(bool b) { m_bUseMFCWork = b; }; bool IsUseMFCWork() { return m_bUseMFCWork; }; vector> GetMFCScalStrVec() { return MFCScalStrVec; }; -private: - void InitPrepareWorkVec(); + double GetBeamCheckSetCur(eLaserDeviceType LaserDevice); + double GetBeamSetDimmer(eLaserDeviceType LaserDevice); +private: + void InitPrepareWorkVec(); void CreatMonitoringDir(); CPrepareWork *GetPrepareWork(ePrepareWorkType WorkType); bool IsPreviousWorkCompleted(ePrepareWorkType WorkType); @@ -664,6 +666,10 @@ private: bool m_bBeamCheckOnJobStart;//job 开始前检测激光光斑 bool m_bBeamCheckByYmtc;//是否将beam 数据发送给YMTC 检测 + double m_BeamCheckSetCur1;//光斑检测时Laser1设置电流 + double m_BeamCheckSetCur2;//光斑检测时Laser2设置电流 + double m_BeamSetDimmer1;//光斑检测时Laser1设置衰减角度 + double m_BeamSetDimmer2;//光斑检测时Laser2设置衰减角度 bool m_bRecipeEdiCheckOnJobStart;//Pjob 开始前检测recipe 的功率密度(保存值) diff --git a/LaiPuLaser/LaiPuLaser/CommonFlowMgr.cpp b/LaiPuLaser/LaiPuLaser/CommonFlowMgr.cpp index ba54d42..13d4a8b 100644 --- a/LaiPuLaser/LaiPuLaser/CommonFlowMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/CommonFlowMgr.cpp @@ -2128,6 +2128,68 @@ void CCommonFlowMgr::CreatLaserBeamFlowCmd(CWorkCmdInvoker &CmdInvoker,CWafer * pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd CmdInvoker.AddCmd(pCmd); } + if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserBeamMeter) + && gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_RotatoDimmer)) + { + CExcuteActionPar ActionPar; + { + ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle; + ActionPar.m_DoubleParVal = gAnnealMonitoringMgr->GetBeamSetDimmer(_LaserDeviceType_MainLaser1); + ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser1; + CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction(); + pCmd->SetExcuteActionPar(ActionPar); + pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd + CmdInvoker.AddCmd(pCmd); + } + { + ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle; + ActionPar.m_DoubleParVal = gAnnealMonitoringMgr->GetBeamSetDimmer(_LaserDeviceType_MainLaser2); + ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser2; + CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction(); + pCmd->SetExcuteActionPar(ActionPar); + pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd + CmdInvoker.AddCmd(pCmd); + } + } + if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserBeamMeter) + && gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserDeviceCtrl)) + { + CSetMainLaserPar SetLaserPar; + if (pWafer!=NULL)//pWafer不为NULL才能设置频率与双脉冲,防止崩溃 + { + CRecipeParameter RecipePar; + CRecipe Recipe = pWafer->m_WaferRecipe; + { + RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_FRE); + SetLaserPar.m_Laser1_PRF = RecipePar.m_ParDoubleVal; + } + { + RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER2_FRE); + SetLaserPar.m_Laser2_PRF = RecipePar.m_ParDoubleVal; + } + //双脉冲延时 + if (gLaserDevice->IsbTwoLaserLddMode()) + { + RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_PRF2_DELAY); + SetLaserPar.m_PRF2Delay = RecipePar.m_ParDoubleVal;//双脉冲延时 + } + } + { + SetLaserPar.m_Current = gAnnealMonitoringMgr->GetBeamCheckSetCur(_LaserDeviceType_MainLaser1); + SetLaserPar.m_Current2 = gAnnealMonitoringMgr->GetBeamCheckSetCur(_LaserDeviceType_MainLaser2); + } + //要检测功率密度,并且两个laser 都要检测的时候 + //在改变激光电流后等待指定的延时m_WaitCurrChangeDelay + SetLaserPar.m_bWaitCurrChangeDelay = true; + + CExcuteActionPar ActionPar; + ActionPar.m_ExcuteAction = _ExcuteAction_SetMainLaserPar; + ActionPar.m_SetMainLaserPar = SetLaserPar; + CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction(); + pCmd->SetExcuteActionPar(ActionPar); + pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd + CmdInvoker.AddCmd(pCmd); + } //打开BeamGage软件 if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserBeamMeter)) { @@ -2918,13 +2980,14 @@ bool CCommonFlowMgr::ExcuteSimpleFlowType(eExcuteFlowType FlowType,bool bWaitFor } if(MsgBox.ConfirmOkCancel("手动退火开始?")) { - pWafer->m_bNeedFoucsAdjust = true;//需要调整焦距 - pWafer->m_bNeedEdiCheck = true;//需要复检 - CExcuteActionPar ActionPar; - ActionPar.m_ExcuteAction = _ExcuteAction_WaferTransfer_TriggerAnnealProccess; - ActionPar.m_pBindingPar = pWafer;//绑定当前载盘上的wafer - ActionVec.push_back(ActionPar); - bRet = ExcuteInvokerActionFlow(gCmdInvoker_ManualOperation,ActionVec,0,bWaitForThread); + gCommonFlowMgr->SetCurManusal_Anneal_Test_State(true); + pWafer->m_bNeedFoucsAdjust = true;//需要调整焦距 + pWafer->m_bNeedEdiCheck = true;//需要复检 + CExcuteActionPar ActionPar; + ActionPar.m_ExcuteAction = _ExcuteAction_WaferTransfer_TriggerAnnealProccess; + ActionPar.m_pBindingPar = pWafer;//绑定当前载盘上的wafer + ActionVec.push_back(ActionPar); + bRet = ExcuteInvokerActionFlow(gCmdInvoker_ManualOperation, ActionVec, 0, bWaitForThread); } } }