优化工艺中衰减器调整逻辑

main
wyj 3 months ago
parent 3426eccdf3
commit baec0a5dca

@ -3817,30 +3817,7 @@ void CCommonFlowMgr::CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker
} }
//调整SubRecipe 对应的衰减器角度 //调整SubRecipe 对应的衰减器角度
//不复检的时候也要调整 //不复检的时候也要调整
if(!m_bSubRecipeEdiEqualZero && bLaser1EdiZero)//22-12-15 if (!bLaser1CurrZero || !bLaser1EdiZero)//电流或Edi不为0的情况要旋转相应一路衰减器
{
//Edi 为0 的但是电流不为0的情况要旋转到45度避免影响另外一路复检
if(!bLaser1CurrZero)
{
double RotatoDimmer1Ang = POW_ZERO_DIMMER_ANG_45;
//log
{
Log.Format("->RotatoDimmer1Ang = %lf",RotatoDimmer1Ang);
LogInfo.m_LogMsg = Log;
gLogMgr->WriteLogInfo(LogInfo);
}
{
CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
ActionPar.m_DoubleParVal = RotatoDimmer1Ang;
ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser1;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
}
}
else
{ {
double RotatoDimmer1Ang = -1;//表示使用之前的角度 double RotatoDimmer1Ang = -1;//表示使用之前的角度
//功率密度参数有变化的时候 //功率密度参数有变化的时候
@ -3858,7 +3835,6 @@ void CCommonFlowMgr::CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker
LogInfo.m_LogMsg = Log; LogInfo.m_LogMsg = Log;
gLogMgr->WriteLogInfo(LogInfo); gLogMgr->WriteLogInfo(LogInfo);
} }
//if(RotatoDimmer1Ang>=0)
{ {
CExcuteActionPar ActionPar; CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle; ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
@ -3869,38 +3845,15 @@ void CCommonFlowMgr::CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker
CmdInvoker.AddCmd(pCmd); CmdInvoker.AddCmd(pCmd);
} }
} }
//不复检的时候不用转动衰减器(使用之前复检的角度) if (!bLaser2CurrZero || !bLaser2EdiZero)//电流或Edi不为0的情况要旋转相应一路衰减器
if(!m_bSubRecipeEdiEqualZero && bLaser2EdiZero)
{
//Edi 为0 的但是电流不为0的情况要旋转到45度避免影响另外一路复检
if(!bLaser2CurrZero)
{
double RotatoDimmer2Ang = POW_ZERO_DIMMER_ANG_45;
//log
{
Log.Format("->RotatoDimmer2Ang = %lf",RotatoDimmer2Ang);
LogInfo.m_LogMsg = Log;
gLogMgr->WriteLogInfo(LogInfo);
}
{
CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
ActionPar.m_DoubleParVal = RotatoDimmer2Ang;
ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser2;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
}
}
else
{ {
double RotatoDimmer2Ang = -1;//表示使用之前的角度 double RotatoDimmer2Ang = -1;//表示使用之前的角度
//参数变化时转到recipe 设置角度 //功率密度参数有变化的时候
//bLaser2RecipeEdiChange没变就是之前的角度-1(不用旋转) //或者不复检的时候
//(!bCreatRecipeEdiCheckCmd)表示不EDI复检,就需要转到rcp 的角度上 //使用rcp 的计算角度
if (bLaser2RecipeEdiChange || !bCreatRecipeEdiCheckCmd) if (bLaser2RecipeEdiChange || !bCreatRecipeEdiCheckCmd)
{ {
//转到recipe 设置角度(这个角度是用点检结果功率和EDI计算出来的)
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_ROTATO_DIMMER_ANG2); RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_ROTATO_DIMMER_ANG2);
RotatoDimmer2Ang = RecipePar.m_ParDoubleVal; RotatoDimmer2Ang = RecipePar.m_ParDoubleVal;
} }
@ -3970,180 +3923,6 @@ void CCommonFlowMgr::CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker
CmdInvoker.AddCmd(pCmd); CmdInvoker.AddCmd(pCmd);
} }
} }
#if 0
if(!bLaser1EdiZero)
{
//电流和角度设置之后示波器自适应
if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_TekOscilloscope))
{
{
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;// wafer2wafer流程才需要等待 设置true
ActionPar.m_IntParVal = 20;//20秒超时
ActionPar.m_ExcuteAction = _ExcuteAction_AdjustOsiiMaxAmplitudeCheckExcEnd;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
{
//rawata采集
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;//是在工艺中,用于结束条件判断
ActionPar.m_ExcuteAction = _ExcuteAction_OsiiRawDataCollect;
ActionPar.m_pBindingPar = pWafer;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
/*复检时波形 rawdata采集可以同步进行
{
//rawata采集
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;//是在工艺中,用于结束条件判断
ActionPar.m_ExcuteAction = _ExcuteAction_OsiiRawDataCollectCheckExcEnd;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
*/
}
//这个时候laser2 Pow 是0 (LD12一起用的时候衰减角度2是45度)
//检测Laser1 功率密度(不满足rcp 条件时自动调整衰减角度)
//调整后的角度保存在m_Laser1RotatoDimmerAng
{
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteAction(_ExcuteAction_CheckRecipeEdiOnAnnealStart);
pCmd->BindingPar(pWafer);//绑定当前生产的wafer
pCmd->SetIntParVal((int)_LaserDeviceType_MainLaser1);
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd);
}
}
if(!bLaser2EdiZero)//LD2 Edi 不为0
{
if(!bLaser1EdiZero)//LD1 Edi 不为0
{
//先把laser1 的角度转到45 角度
//没复检不会执行这里
{
double RotatoDimmer1Ang = POW_ZERO_DIMMER_ANG_45;
{
Log.Format("->RotatoDimmer1Ang = %lf",RotatoDimmer1Ang);
LogInfo.m_LogMsg = Log;
gLogMgr->WriteLogInfo(LogInfo);
}
CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
ActionPar.m_DoubleParVal = RotatoDimmer1Ang;
ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser1;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteActionPar(ActionPar);
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd);
}
//把laser2 的衰减角度转到测量角度
{
double RotatoDimmer2Ang;
if(bLaser2RecipeEdiChange)//变化的时候使用Recipe 的角度
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_ROTATO_DIMMER_ANG2);
RotatoDimmer2Ang = RecipePar.m_ParDoubleVal;
//log
{
Log.Format("->RotatoDimmer2Ang = %lf",RotatoDimmer2Ang);
LogInfo.m_LogMsg = Log;
gLogMgr->WriteLogInfo(LogInfo);
}
}
else//没有变化的时候使用上一次复检调整的角度
{
RotatoDimmer2Ang = -2;
{
LogInfo.m_LogMsg = "->RotatoDimmer2Ang = AdjustAng";
gLogMgr->WriteLogInfo(LogInfo);
}
}
CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
ActionPar.m_DoubleParVal = RotatoDimmer2Ang;
ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser2;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteActionPar(ActionPar);
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd);
}
}
//电流和角度设置之后示波器自适应
if (gDeviceStateMgr->QueryUsedFunc(_EUsedFunc_TekOscilloscope))
{
{
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;// wafer2wafer流程才需要等待 设置true
ActionPar.m_IntParVal = 20;//20秒超时
ActionPar.m_ExcuteAction = _ExcuteAction_AdjustOsiiMaxAmplitudeCheckExcEnd;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
{
//rawata采集
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;//是在工艺中,用于结束条件判断
ActionPar.m_ExcuteAction = _ExcuteAction_OsiiRawDataCollect;
ActionPar.m_pBindingPar = pWafer;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
/*复检时波形 rawdata采集可以同步进行
{
//rawata采集
CExcuteActionPar ActionPar;
ActionPar.m_BoolParVal = true;//是在工艺中,用于结束条件判断
ActionPar.m_ExcuteAction = _ExcuteAction_OsiiRawDataCollectCheckExcEnd;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
pCmd->SetExcuteActionPar(ActionPar);
CmdInvoker.AddCmd(pCmd);
}
*/
}
//检测Laser2 功率密度(不满足rcp 条件时自动调整)
//调整后的角度保存在m_Laser2RotatoDimmerAng
{
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteAction(_ExcuteAction_CheckRecipeEdiOnAnnealStart);
pCmd->BindingPar(pWafer);//绑定当前生产的wafer
pCmd->SetIntParVal((int)_LaserDeviceType_MainLaser2);
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd);
}
//Laser2 检测好了再把laser1 衰减角度转到之前laser 复合后的角度值
//保存在LastCheckPar中
if(!bLaser1EdiZero)
{
//(Val<0的情况设置为m_LaserRotatoDimmerAng)
double RotatoDimmer1Ang = -2;
{
LogInfo.m_LogMsg = "->RotatoDimmer1Ang = AdjustAng";
gLogMgr->WriteLogInfo(LogInfo);
}
CExcuteActionPar ActionPar;
ActionPar.m_ExcuteAction = _ExcuteAction_RotatoDimmer_ToAngle;
ActionPar.m_DoubleParVal = RotatoDimmer1Ang;
ActionPar.m_IntParVal = (int)_LaserDeviceType_MainLaser1;
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteActionPar(ActionPar);
pCmd->SetbEdiCheckCmd(true);//标记为edi check cmd
CmdInvoker.AddCmd(pCmd);
}
}
#endif
//执行edi 复检 //执行edi 复检
{ {
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction(); CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();

Loading…
Cancel
Save