增加DVID(工艺Recipe_Body)

main
admin 3 months ago
parent c323f0c18c
commit e2e8c2a7bc

@ -4155,6 +4155,13 @@ void CCommonFlowMgr::CreatSubRecipeAnnealScanCmd(CWorkCmdInvoker &CmdInvoker,CW
pCmd->NotShowLog(); pCmd->NotShowLog();
CmdInvoker.AddCmd(pCmd); CmdInvoker.AddCmd(pCmd);
} }
//设置wafer 的RecipeRecord
{
CWorkCmdExcuteAction *pCmd = new CWorkCmdExcuteAction();
pCmd->SetExcuteAction(_ExcuteAction_UpdateWaferRecipeRecord);
pCmd->BindingPar(pWafer);
CmdInvoker.AddCmd(pCmd);
}
//发送eap 事件 //发送eap 事件
{ {
CSecsEventInfo EventInfo; CSecsEventInfo EventInfo;

@ -979,6 +979,113 @@ CString CSemiSecsCommMgr::GetEquipMDLN()
{ {
return m_SecsCommPar.m_EquipMDLN; return m_SecsCommPar.m_EquipMDLN;
} }
void CSemiSecsCommMgr::UpDataCEIDRecipeRecord(CWafer * pWafer)
{
CRecipe Recipe = pWafer->m_WaferRecipe;
m_CurCEIDRecipeRecord.Recipe_Name = Recipe.m_RecipeName;
m_CurCEIDRecipeRecord.Sub_Recipe_Name = Recipe.GetCurSubRecipeName();
CRecipeParameter RecipePar;
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_FRE);
m_CurCEIDRecipeRecord.Laser1Frequency = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER2_FRE);
m_CurCEIDRecipeRecord.Laser2Frequency = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_PRF2_DELAY);
m_CurCEIDRecipeRecord.TwoPulseDelay = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_CURR_1);
m_CurCEIDRecipeRecord.Laser1Current = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_CURR_2);
m_CurCEIDRecipeRecord.Laser2Current = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_EDI_1);
m_CurCEIDRecipeRecord.Laser1Edi = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_EDI_2);
m_CurCEIDRecipeRecord.Laser2Edi = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_EDI_CHECK_SCOPE);
m_CurCEIDRecipeRecord.EdiCheckScope = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_OVERLAP_RATIO_X);
m_CurCEIDRecipeRecord.OverlapX = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_OVERLAP_RATIO_Y);
m_CurCEIDRecipeRecord.OverlapY = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_FOCUS_ADJUST_VAL);
m_CurCEIDRecipeRecord.FoucsAdjustVal = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_FIX_SCAN_SPEED);
m_CurCEIDRecipeRecord.FixScanSpeed = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_FIX_SCAN_LINE_GAP);
m_CurCEIDRecipeRecord.FixScanLineGap = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_SCAN_AREA);
m_CurCEIDRecipeRecord.ScanArea = RecipePar.m_ParStrVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_AREA_IDX);
m_CurCEIDRecipeRecord.AreaIdx = Int2CString(RecipePar.m_ParIntVal);
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_N2_STATE);
m_CurCEIDRecipeRecord.N2 = RecipePar.m_ParBoolVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_EDI_OFFSET_1);
m_CurCEIDRecipeRecord.Laser1EdiOffset = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_LASER_EDI_OFFSET_2);
m_CurCEIDRecipeRecord.Laser2EdiOffset = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_SCAN_LINE_START_IDX);
m_CurCEIDRecipeRecord.StartScanLineIdx = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_ALIGNER_ANG);
m_CurCEIDRecipeRecord.WaferAlignerAngle = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_OFFSET_TAB);
m_CurCEIDRecipeRecord.OffsetTable = RecipePar.m_ParStrVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_RUNTIMES);
m_CurCEIDRecipeRecord.RunTimes = RecipePar.m_ParIntVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_N2_VAL);
m_CurCEIDRecipeRecord.N2VAL = RecipePar.m_ParDoubleVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_USE_CUR_N2VAL);
m_CurCEIDRecipeRecord.USECURN2VAL = RecipePar.m_ParBoolVal;
}
{
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_CASSETTE_TIER_COUNT);
m_CurCEIDRecipeRecord.CassetteTierCout = RecipePar.m_ParIntVal;
}
}
#endif #endif
#if 1 #if 1
//初始化变量svid //初始化变量svid
@ -1735,6 +1842,36 @@ const char* CSemiSecsCommMgr::OnSecsGetVidVarValue(int varID)
result = gTransferArmMgr->IsCurCassetteLayer(_LoadPortType_Port2) ? ("13") : ("25"); result = gTransferArmMgr->IsCurCassetteLayer(_LoadPortType_Port2) ? ("13") : ("25");
} }
break; break;
//µ±Ç°¹¤ÒÕRecipe
case 50201:result = m_CurCEIDRecipeRecord.Recipe_Name; break;
case 50202:result = m_CurCEIDRecipeRecord.Sub_Recipe_Name; break;
case 50203:result = Db2CString(m_CurCEIDRecipeRecord.Laser1Frequency); break;
case 50204:result = Db2CString(m_CurCEIDRecipeRecord.Laser2Frequency); break;
case 50205:result = Db2CString(m_CurCEIDRecipeRecord.TwoPulseDelay); break;
case 50206:result = Db2CString(m_CurCEIDRecipeRecord.Laser1Current); break;
case 50207:result = Db2CString(m_CurCEIDRecipeRecord.Laser2Current); break;
case 50208:result = Db2CString(m_CurCEIDRecipeRecord.Laser1Edi); break;
case 50209:result = Db2CString(m_CurCEIDRecipeRecord.Laser2Edi); break;
case 50210:result = Db2CString(m_CurCEIDRecipeRecord.EdiCheckScope); break;
case 50211:result = Db2CString(m_CurCEIDRecipeRecord.OverlapX); break;
case 50212:result = Db2CString(m_CurCEIDRecipeRecord.OverlapY); break;
case 50213:result = Db2CString(m_CurCEIDRecipeRecord.FoucsAdjustVal); break;
case 50214:result = Db2CString(m_CurCEIDRecipeRecord.FixScanSpeed); break;
case 50215:result = Db2CString(m_CurCEIDRecipeRecord.FixScanLineGap); break;
case 50216:result = m_CurCEIDRecipeRecord.ScanArea; break;
case 50217:result = m_CurCEIDRecipeRecord.AreaIdx; break;
case 50218:result = Bool2CStringOnOff(m_CurCEIDRecipeRecord.N2); break;
case 50219:result = Db2CString(m_CurCEIDRecipeRecord.Laser1EdiOffset); break;
case 50220:result = Db2CString(m_CurCEIDRecipeRecord.Laser2EdiOffset); break;
case 50221:result = Int2CString(m_CurCEIDRecipeRecord.StartScanLineIdx); break;
case 50222:result = Db2CString(m_CurCEIDRecipeRecord.WaferAlignerAngle); break;
case 50223:result = m_CurCEIDRecipeRecord.OffsetTable; break;
case 50224:result = Int2CString(m_CurCEIDRecipeRecord.RunTimes); break;
case 50225:result = Db2CString(m_CurCEIDRecipeRecord.N2VAL); break;
case 50226:result = Bool2CStringOnOff(m_CurCEIDRecipeRecord.USECURN2VAL); break;
case 50227:result = Int2CString(m_CurCEIDRecipeRecord.CassetteTierCout); break;
#endif//给Event Report 用的值------------END #endif//给Event Report 用的值------------END
default:result.Format("error variable %d, please contact the engineer", varID);//未定义的id default:result.Format("error variable %d, please contact the engineer", varID);//未定义的id
} }

@ -304,7 +304,69 @@ public:
double m_Beam_Check_Dt_Y_865_Count; double m_Beam_Check_Dt_Y_865_Count;
}; };
class CEIDRecipeRecord
{
public:
CEIDRecipeRecord()
{
Recipe_Name = "";//Recipe名称
Sub_Recipe_Name = "";//SubRecipe名称
Laser1Frequency = 0.0;//Laser1脉冲频率
Laser2Frequency = 0.0;//Laser2脉冲频率
TwoPulseDelay = 0.0;//双脉冲延时
Laser1Current = 0.0;//Laser1电流值
Laser2Current = 0.0;//Laser2电流值
Laser1Edi = 0.0;//Laser1功率密度
Laser2Edi = 0.0;//Laser2功率密度
EdiCheckScope = 0.0;//功率密度卡控精度(设置为0时使用config中的默认值)
OverlapX = 0.0;//重叠率X
OverlapY = 0.0;//重叠率Y
FoucsAdjustVal = 0.0;//焦距微调值
FixScanSpeed = 0.0;//固定扫描速度(大于0时不使用重叠率X计算的扫描速度)
FixScanLineGap = 0.0;//固定扫描间隔(大于0时不使用重叠率Y计算的扫描间隔)
ScanArea = "";//扫描区域文件名称
AreaIdx = "";//扫描区域编号
N2 = true;//是否打开氮气
Laser1EdiOffset = 0.0;//Laser1功率密度补偿
Laser2EdiOffset = 0.0;//Laser2功率密度补偿
StartScanLineIdx = 0;//开始扫描线段编号
WaferAlignerAngle = 270;//Rcp wafer准直角度
OffsetTable = "Empty";//OffsetTable文件名称
RunTimes = 1;//Cyclic run的次数
N2VAL = 0;//MFC控制的N2流量值
USECURN2VAL = false;//是否使用Recipe N2流量值
CassetteTierCout = 13;//料盒层数
};
public:
CString Recipe_Name;//Recipe名称
CString Sub_Recipe_Name;//SubRecipe名称
double Laser1Frequency;//Laser1脉冲频率
double Laser2Frequency;//Laser2脉冲频率
double TwoPulseDelay;//双脉冲延时
double Laser1Current;//Laser1电流值
double Laser2Current;//Laser2电流值
double Laser1Edi;//Laser1功率密度
double Laser2Edi;//Laser2功率密度
double EdiCheckScope;//功率密度卡控精度(设置为0时使用config中的默认值)
double OverlapX;//重叠率X
double OverlapY;//重叠率Y
double FoucsAdjustVal;//焦距微调值
double FixScanSpeed;//固定扫描速度(大于0时不使用重叠率X计算的扫描速度)
double FixScanLineGap;//固定扫描间隔(大于0时不使用重叠率Y计算的扫描间隔)
CString ScanArea;//扫描区域文件名称
CString AreaIdx;//扫描区域编号
bool N2;//是否打开氮气
double Laser1EdiOffset;//Laser1功率密度补偿
double Laser2EdiOffset;//Laser2功率密度补偿
int StartScanLineIdx;//开始扫描线段编号
double WaferAlignerAngle;//Rcp wafer准直角度
CString OffsetTable;//OffsetTable文件名称
int RunTimes;//Cyclic run的次数
double N2VAL;//MFC控制的N2流量值
bool USECURN2VAL;//是否使用Recipe N2流量值
int CassetteTierCout;//料盒层数
};
//半导体SEMI 通信协议管理 //半导体SEMI 通信协议管理
@ -372,6 +434,7 @@ public:
CFDCKeepPar &GetFDCKeepPar(){return m_FDCKeepPar;}; CFDCKeepPar &GetFDCKeepPar(){return m_FDCKeepPar;};
void SecsPPCtrl(PP_HANDLE_DATA* pPpHandle); void SecsPPCtrl(PP_HANDLE_DATA* pPpHandle);
CString GetEquipMDLN(); CString GetEquipMDLN();
void UpDataCEIDRecipeRecord(CWafer *pWafer);
private: private:
void SemiSecsCommInit(); void SemiSecsCommInit();
void InitSecsVar(); void InitSecsVar();
@ -462,6 +525,8 @@ private:
CWafer *m_ReportWafer;//当前事件report 的wafer CWafer *m_ReportWafer;//当前事件report 的wafer
eWaferLoadPortType m_ReportPortType;//当前事件report 的PortType eWaferLoadPortType m_ReportPortType;//当前事件report 的PortType
CEIDRecipeRecord m_CurCEIDRecipeRecord;
}; };
extern CSemiSecsCommMgr *gSemiSecsCommMgr; extern CSemiSecsCommMgr *gSemiSecsCommMgr;

@ -474,6 +474,9 @@ bool CWorkCmdExcuteAction::Excute()
case _ExcuteAction_UpdateWaferAnnealState: case _ExcuteAction_UpdateWaferAnnealState:
gTransferArmMgr->UpdateWaferAnnealState(*pWafer); gTransferArmMgr->UpdateWaferAnnealState(*pWafer);
break; break;
case _ExcuteAction_UpdateWaferRecipeRecord:
gSemiSecsCommMgr->UpDataCEIDRecipeRecord(pWafer);
break;
case _ExcuteAction_CheckManualOnPlatWafer: case _ExcuteAction_CheckManualOnPlatWafer:
gTransferArmMgr->CheckManualOnPlatWafer(); gTransferArmMgr->CheckManualOnPlatWafer();
break; break;

@ -82,6 +82,8 @@ enum ExcuteAction
_ExcuteAction_UpdateWaferAnnealState,//更新退火完成状态 _ExcuteAction_UpdateWaferAnnealState,//更新退火完成状态
_ExcuteAction_UpdateWaferRecipeRecord,//更新wafer工艺RecipeRecord
_ExcuteAction_CheckManualOnPlatWafer,//检测手动放到载盘上的wafer _ExcuteAction_CheckManualOnPlatWafer,//检测手动放到载盘上的wafer

Loading…
Cancel
Save