光斑检测固定电流与衰减角度检测

main
wyj 3 months ago
parent 496f3bd643
commit 041c85d648

@ -157,6 +157,11 @@ CAnnealMonitoringMgr::CAnnealMonitoringMgr(void)
m_bBeamCheckByYmtc = false;//是否将beam 数据发送给YMTC 检测 m_bBeamCheckByYmtc = false;//是否将beam 数据发送给YMTC 检测
m_BeamCheckSetCur1 = 10;
m_BeamCheckSetCur2 = 10;
m_BeamSetDimmer1 = 38;
m_BeamSetDimmer2 = 38;
m_GateCheck_bUse = true;//是否监控光闸状态 m_GateCheck_bUse = true;//是否监控光闸状态
m_GateCheck_MinDataCnt = 540;//最小判断Data数 m_GateCheck_MinDataCnt = 540;//最小判断Data数
m_GateCheck_MidDataCnt = 180;//中间判断Data数(需要小于最小点数) m_GateCheck_MidDataCnt = 180;//中间判断Data数(需要小于最小点数)
@ -592,6 +597,95 @@ CMFCPropertyGridProperty *CAnnealMonitoringMgr::CreatGridProperty()
pGroup1->AddSubItem(p); pGroup1->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie); 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); pGroup->AddSubItem(pGroup1);
} }
} }
@ -1612,6 +1706,33 @@ void CAnnealMonitoringMgr::BindingCheckList(CListCtrl *Power1List,CListCtrl *Pow
m_pLaserBeamCheckList = BeamList; 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() void CAnnealMonitoringMgr::InitPrepareWorkVec()
{ {
int Cnt = (int)(_AnnealMonitoringType_Max); int Cnt = (int)(_AnnealMonitoringType_Max);

@ -627,8 +627,10 @@ public:
void SetUseMFCWork(bool b) { m_bUseMFCWork = b; }; void SetUseMFCWork(bool b) { m_bUseMFCWork = b; };
bool IsUseMFCWork() { return m_bUseMFCWork; }; bool IsUseMFCWork() { return m_bUseMFCWork; };
vector<vector<CString>> GetMFCScalStrVec() { return MFCScalStrVec; }; vector<vector<CString>> GetMFCScalStrVec() { return MFCScalStrVec; };
double GetBeamCheckSetCur(eLaserDeviceType LaserDevice);
double GetBeamSetDimmer(eLaserDeviceType LaserDevice);
private: private:
void InitPrepareWorkVec(); void InitPrepareWorkVec();
void CreatMonitoringDir(); void CreatMonitoringDir();
CPrepareWork *GetPrepareWork(ePrepareWorkType WorkType); CPrepareWork *GetPrepareWork(ePrepareWorkType WorkType);
bool IsPreviousWorkCompleted(ePrepareWorkType WorkType); bool IsPreviousWorkCompleted(ePrepareWorkType WorkType);
@ -664,6 +666,10 @@ private:
bool m_bBeamCheckOnJobStart;//job 开始前检测激光光斑 bool m_bBeamCheckOnJobStart;//job 开始前检测激光光斑
bool m_bBeamCheckByYmtc;//是否将beam 数据发送给YMTC 检测 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 的功率密度(保存值) bool m_bRecipeEdiCheckOnJobStart;//Pjob 开始前检测recipe 的功率密度(保存值)

@ -2128,6 +2128,68 @@ void CCommonFlowMgr::CreatLaserBeamFlowCmd(CWorkCmdInvoker &CmdInvoker,CWafer *
pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd pCmd->SetbEdiCheckCmd(bEdiCheckCmd);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd); 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软件 //打开BeamGage软件
if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserBeamMeter)) if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_LaserBeamMeter))
{ {
@ -2918,13 +2980,14 @@ bool CCommonFlowMgr::ExcuteSimpleFlowType(eExcuteFlowType FlowType,bool bWaitFor
} }
if(MsgBox.ConfirmOkCancel("手动退火开始?")) if(MsgBox.ConfirmOkCancel("手动退火开始?"))
{ {
pWafer->m_bNeedFoucsAdjust = true;//需要调整焦距 gCommonFlowMgr->SetCurManusal_Anneal_Test_State(true);
pWafer->m_bNeedEdiCheck = true;//需要复检 pWafer->m_bNeedFoucsAdjust = true;//需要调整焦距
CExcuteActionPar ActionPar; pWafer->m_bNeedEdiCheck = true;//需要复检
ActionPar.m_ExcuteAction = _ExcuteAction_WaferTransfer_TriggerAnnealProccess; CExcuteActionPar ActionPar;
ActionPar.m_pBindingPar = pWafer;//绑定当前载盘上的wafer ActionPar.m_ExcuteAction = _ExcuteAction_WaferTransfer_TriggerAnnealProccess;
ActionVec.push_back(ActionPar); ActionPar.m_pBindingPar = pWafer;//绑定当前载盘上的wafer
bRet = ExcuteInvokerActionFlow(gCmdInvoker_ManualOperation,ActionVec,0,bWaitForThread); ActionVec.push_back(ActionPar);
bRet = ExcuteInvokerActionFlow(gCmdInvoker_ManualOperation, ActionVec, 0, bWaitForThread);
} }
} }
} }

Loading…
Cancel
Save