diff --git a/.gitignore b/.gitignore index 78eae31..95cba1f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ /LaipuDrawing/hlp/LaiPuLaser.chm /LaiPuLaser/LaiPuLaser/Debug /LaiPuLaser/Debug +*.ipch diff --git a/LaipuDrawing/DlgChildRecipe.cpp b/LaipuDrawing/DlgChildRecipe.cpp index ccab957..6275acb 100644 --- a/LaipuDrawing/DlgChildRecipe.cpp +++ b/LaipuDrawing/DlgChildRecipe.cpp @@ -67,6 +67,7 @@ BEGIN_MESSAGE_MAP(CDlgChildRecipe, CMyDlgView) ON_BN_CLICKED(IDC_RCP_HISTORY_BTN, &CDlgChildRecipe::OnBnClickedRcpHistoryBtn) ON_BN_CLICKED(IDC_RCP_OFFSET_TAB, &CDlgChildRecipe::OnBnClickedRcpOffsetTab) ON_BN_CLICKED(NEW_UPDATE_RECIPE_BTN, &CDlgChildRecipe::OnBnClickedUpdateRecipeBtn) + ON_NOTIFY(NM_CLICK, NEW_EDIT_RECIPE_INFO_LIST, &CDlgChildRecipe::OnNMClickEditRecipeInfoList) END_MESSAGE_MAP() @@ -575,6 +576,11 @@ void CDlgChildRecipe::OnNMClickEditRecipeList(NMHDR *pNMHDR, LRESULT *pResult) } } } + //响应参数详细信息 + { + CString Str = gRecipeMgr->GetShowParText(Row); + GetDlgItem(IDC_ShowSubRcpInfo)->SetWindowText(Str); + } } } //Edit 离焦的时候更新为list 的值 @@ -701,3 +707,21 @@ void CDlgChildRecipe::OnBnClickedUpdateRecipeBtn() OnCbnSelchangeNewRecipeGroupCombo(); } } + + +void CDlgChildRecipe::OnNMClickEditRecipeInfoList(NMHDR *pNMHDR, LRESULT *pResult) +{ + LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); + // TODO: 在此添加控件通知处理程序代码 + *pResult = 0; + NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; + int Row = pNMListView->iItem; + if (Row >= 0)//行号 + { + //响应参数详细信息 + { + CString Str = gRecipeMgr->GetShowParText(Rcp_CalInfo_Start_Idx + Row); + GetDlgItem(IDC_ShowSubRcpInfo)->SetWindowText(Str); + } + } +} diff --git a/LaipuDrawing/DlgChildRecipe.h b/LaipuDrawing/DlgChildRecipe.h index c832d9d..43a65d9 100644 --- a/LaipuDrawing/DlgChildRecipe.h +++ b/LaipuDrawing/DlgChildRecipe.h @@ -99,4 +99,5 @@ public: afx_msg void OnBnClickedRcpHistoryBtn(); afx_msg void OnBnClickedRcpOffsetTab(); afx_msg void OnBnClickedUpdateRecipeBtn(); + afx_msg void OnNMClickEditRecipeInfoList(NMHDR *pNMHDR, LRESULT *pResult); }; diff --git a/LaipuDrawing/LaiPuLaser.aps b/LaipuDrawing/LaiPuLaser.aps index 4c50405..42aece2 100644 Binary files a/LaipuDrawing/LaiPuLaser.aps and b/LaipuDrawing/LaiPuLaser.aps differ diff --git a/LaipuDrawing/LaiPuLaser.rc b/LaipuDrawing/LaiPuLaser.rc index c2d65dc..ad14f14 100644 Binary files a/LaipuDrawing/LaiPuLaser.rc and b/LaipuDrawing/LaiPuLaser.rc differ diff --git a/LaipuDrawing/RecipeMgr.cpp b/LaipuDrawing/RecipeMgr.cpp index ca94737..128d003 100644 --- a/LaipuDrawing/RecipeMgr.cpp +++ b/LaipuDrawing/RecipeMgr.cpp @@ -89,6 +89,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 1000;//默认值 RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_FRE); + RecipePar.m_DetailInfo = "激光1频率:一秒内激光脉冲个数"; m_RecipeParVec.push_back(RecipePar); } { @@ -100,6 +101,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 1000;//默认值 RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_FRE); + RecipePar.m_DetailInfo = "激光2频率:一秒内激光脉冲个数"; m_RecipeParVec.push_back(RecipePar); } { @@ -111,6 +113,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_PULSE_DELAY); + RecipePar.m_DetailInfo = "双脉冲延时:激光器脉冲延时时间"; m_RecipeParVec.push_back(RecipePar); } { @@ -122,6 +125,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_CURR_1); + RecipePar.m_DetailInfo = "Laser1电流值:工艺设置电流值"; m_RecipeParVec.push_back(RecipePar); } { @@ -133,6 +137,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_CURR_2); + RecipePar.m_DetailInfo = "Laser2电流值:工艺设置电流值"; m_RecipeParVec.push_back(RecipePar); } { @@ -144,6 +149,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_EDI_1); + RecipePar.m_DetailInfo = "Laser1目标功率密度 :最终的edi还要加上Laser Edi Offset和补偿表中的Laser Edi Offset值"; m_RecipeParVec.push_back(RecipePar); } { @@ -155,6 +161,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_EDI_2); + RecipePar.m_DetailInfo = "Laser2目标功率密度 :最终的edi还要加上Laser Edi Offset和补偿表中的Laser Edi Offset值"; m_RecipeParVec.push_back(RecipePar); } { @@ -166,6 +173,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = -2; RecipePar.m_DoubleMaxVal = 2; + RecipePar.m_DetailInfo = "Laser1目标功率密度补偿"; m_RecipeParVec.push_back(RecipePar); } { @@ -177,6 +185,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = -2; RecipePar.m_DoubleMaxVal = 2; + RecipePar.m_DetailInfo = "Laser2目标功率密度补偿"; m_RecipeParVec.push_back(RecipePar); } { @@ -188,6 +197,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = 5; + RecipePar.m_DetailInfo = "功率密度复检卡控范围:等于0表示不进行复检,大于表示要进行复检且复检调整后的功率密度在这个误差范围之内"; m_RecipeParVec.push_back(RecipePar); } { @@ -199,6 +209,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = 99; + RecipePar.m_DetailInfo = "X方向光斑重叠率:会影响X方向扫描速度的计算值"; m_RecipeParVec.push_back(RecipePar); } { @@ -210,6 +221,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = 99; + RecipePar.m_DetailInfo = "Y方向光斑重叠率:会影响Y方向移动间隔"; m_RecipeParVec.push_back(RecipePar); } { @@ -221,6 +233,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MIN_FOCUS_ADJUST); RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_FOCUS_ADJUST); + RecipePar.m_DetailInfo = "Z轴焦距微调值:用于工艺前Z轴在目前设置的激光焦距点上下进行微调"; m_RecipeParVec.push_back(RecipePar); } { @@ -232,6 +245,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MIN_SCAN_SPEED); RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_SCAN_SPEED); + RecipePar.m_DetailInfo = "固定扫描速度:等于0时无效,大于0时X方向光斑重叠率无效,工艺过程中将使用这个速度值作为X方向的扫描速度"; m_RecipeParVec.push_back(RecipePar); } { @@ -243,6 +257,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_FIX_SCAN_LINE_GAP); + RecipePar.m_DetailInfo = "固定扫描间隔:等于0时无效,大于0时Y方向光斑重叠率无效,工艺过程中将使用这个值作为Y方向的扫描移动间隔"; m_RecipeParVec.push_back(RecipePar); } { @@ -254,6 +269,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 0; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = 100000; + RecipePar.m_DetailInfo = "扫描线的起始索引值:表示从第几根线开始扫描,用于补打wafer"; m_RecipeParVec.push_back(RecipePar); } { @@ -265,6 +281,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = 270; RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = 360; + RecipePar.m_DetailInfo = "wafer准直角度:用于控制wafer放到stage上的notch方向,多subrcp的情况第一个sub的值为有效值"; m_RecipeParVec.push_back(RecipePar); } { @@ -284,6 +301,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParDoubleVal = m_MinVal; RecipePar.m_DoubleMinVal = m_MinVal; RecipePar.m_DoubleMaxVal = m_MaxVal; + RecipePar.m_DetailInfo = "MFC流量控制值:MFC控制N2流量值"; m_RecipeParVec.push_back(RecipePar); } //下拉框参数------------------------------------------------ @@ -292,6 +310,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParName = RECIPE_PAR_NAME_SCAN_AREA; RecipePar.m_ParShowName = "Scan Area"; RecipePar.m_ParType = _RecipeParType_CString;//参数的类型 + RecipePar.m_DetailInfo = "扫描区域文件名称:用于指定扫描区域的图形文件,确定扫描的范围"; m_RecipeParVec.push_back(RecipePar); } { @@ -300,6 +319,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParShowName = "Area Idx"; RecipePar.m_ParType = _RecipeParType_Int;//参数的类型 RecipePar.m_ParIntVal = 1; + RecipePar.m_DetailInfo = "扫描区域编号:扫描区域文件中包含多个扫描区域时,每个sub rcp只能选择一个区域编号进行工艺"; m_RecipeParVec.push_back(RecipePar); } { @@ -308,6 +328,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParShowName = "N2"; RecipePar.m_ParType = _RecipeParType_Bool;//参数的类型 RecipePar.m_ParBoolVal = true; + RecipePar.m_DetailInfo = "N2开关控制,退火过程中是否自动打开N2"; m_RecipeParVec.push_back(RecipePar); } { @@ -316,6 +337,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParShowName = "Use CurN2Val"; RecipePar.m_ParType = _RecipeParType_Bool;//参数的类型 RecipePar.m_ParBoolVal = false; + RecipePar.m_DetailInfo = "MFC控制开关:是否使用recipe的MFC流量控制值"; m_RecipeParVec.push_back(RecipePar); } #ifdef __OFFSET_TABLE__ @@ -325,6 +347,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParShowName = "Offset Table"; RecipePar.m_ParType = _RecipeParType_CString;//参数的类型 RecipePar.m_ParStrVal = RECIPE_OFFSET_TBL_NULL; + RecipePar.m_DetailInfo = "补偿表的名称:用于link指定的补偿表,可以补偿edi和激光电流值"; m_RecipeParVec.push_back(RecipePar); } #endif @@ -335,6 +358,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParShowName = "Run Times"; RecipePar.m_ParType = _RecipeParType_Int;//参数的类型 RecipePar.m_ParIntVal = 1;//默认值 + RecipePar.m_DetailInfo = "工艺运行次数:正常设置为1,大于1时表示跑cycle,多subrcp的情况第一个sub的值为有效值"; m_RecipeParVec.push_back(RecipePar); } @@ -350,6 +374,8 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_POW_1); RecipePar.m_bRcpInfoPar = true;//是否为计算参数(不能被编辑) + //RecipePar.m_DetailInfo = "Laser1功率值:1.Laser固定电流为0时,根据edi自动计算 2.Laser固定电流大于0时,在功率点检表中查找对应的功率值,用于计算衰减角度"; + RecipePar.m_DetailInfo = "Laser1功率值:在功率点检表中查找对应的功率值,用于计算衰减角度"; m_RecipeParVec.push_back(RecipePar); } { @@ -362,6 +388,8 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_LASER_POW_2); RecipePar.m_bRcpInfoPar = true;//是否为计算参数(不能被编辑) + //RecipePar.m_DetailInfo = "Laser2功率值:1.Laser固定电流为0时,根据edi自动计算 2.Laser固定电流大于0时,在功率点检表中查找对应的功率值,用于计算衰减角度"; + RecipePar.m_DetailInfo = "Laser2功率值:在功率点检表中查找对应的功率值,用于计算衰减角度"; m_RecipeParVec.push_back(RecipePar); } { @@ -374,6 +402,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_DoubleMinVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MIN_SCAN_SPEED); RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_SCAN_SPEED); RecipePar.m_bRcpInfoPar = true;//是否为计算参数(不能被编辑) + RecipePar.m_DetailInfo = "X方向扫描速度:固定扫描速度等于0时,由X方向重叠率计算得出,固定扫描速度大于0时,等于固定扫描速度"; m_RecipeParVec.push_back(RecipePar); } { @@ -386,6 +415,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_DIMMER_ANG_1); RecipePar.m_bRcpInfoPar = true;//是否为计算参数(不能被编辑) + RecipePar.m_DetailInfo = "Laser1衰减角度:由edi,频率,功率计算得出的衰减器角度,固定电流值大于0才会生效"; m_RecipeParVec.push_back(RecipePar); } { @@ -398,6 +428,7 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_DoubleMinVal = 0; RecipePar.m_DoubleMaxVal = gCommonParaMgr->GetCommonParaVal(RECIPE_PAR_MAX_DIMMER_ANG_2); RecipePar.m_bRcpInfoPar = true;//是否为计算参数(不能被编辑) + RecipePar.m_DetailInfo = "Laser2衰减角度:由edi,频率,功率计算得出的衰减器角度,固定电流值大于0才会生效"; m_RecipeParVec.push_back(RecipePar); } #endif @@ -2467,4 +2498,17 @@ CString CRecipeMgr::GetOffsetTablePath(CString TabName) } #endif +CString CRecipeMgr::GetShowParText(int Row) +{ + CString str = ""; + vector &SubRecipeVec = m_CurEditRecipe.GetSubRecipeVec(); + int size = SubRecipeVec.size(); + if (size <= 0) + { + str = "无有效Recipe"; + } + str = SubRecipeVec[0].m_RecipeParVec[Row].m_DetailInfo; + return str; +} + #endif diff --git a/LaipuDrawing/RecipeMgr.h b/LaipuDrawing/RecipeMgr.h index 70e4147..da80e88 100644 --- a/LaipuDrawing/RecipeMgr.h +++ b/LaipuDrawing/RecipeMgr.h @@ -68,6 +68,7 @@ public: m_ListItemWidht = 100;//列表宽度 m_bRcpInfoPar = false;//是否为计算参数(不能被编辑) m_ParUnit = "/";//参数的单位,用于显示 + m_DetailInfo = "未定义"; }; CString GetParStr(); void SetValByStr(CString s); @@ -90,6 +91,8 @@ public: bool m_bRcpInfoPar;//是否为计算参数(不能被编辑) CString m_ParUnit;//参数的单位,用于显示 + CString m_DetailInfo;//详细参数信息 + }; class CRecipeCtrlItem @@ -267,6 +270,7 @@ public: void UpdateLaserFocusProp(); void UpdateRecipeGroupInfo(); CString GetOffsetTablePath(CString TabName); + CString GetShowParText(int Row); private: CString GetGroupDirPath(int GroupIdx); CString GetRecipeNameListPath(); diff --git a/LaipuDrawing/resource.h b/LaipuDrawing/resource.h index 7f0887e..54d687c 100644 Binary files a/LaipuDrawing/resource.h and b/LaipuDrawing/resource.h differ