From aa3b74d46f9aa9d02ed9250aeeb6aea495fe296c Mon Sep 17 00:00:00 2001 From: wklyj <157651241@qq.com> Date: Tue, 16 Apr 2024 09:25:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=93=9D=E8=89=B2=E8=BD=AF=E4=BB=B6Recipe?= =?UTF-8?q?=E6=96=99=E7=9B=92=E5=B1=82=E6=95=B0=EF=BC=8C=E6=9A=82=E5=81=9C?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp | 5 +++ LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h | 2 ++ LaiPuLaser/LaiPuLaser/CommonFlowMgr.h | 4 +++ LaiPuLaser/LaiPuLaser/GlobalDefine.h | 1 + LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp | 36 +++++++++++++++++-- LaiPuLaser/LaiPuLaser/JobQueueMgr.h | 8 +++++ LaiPuLaser/LaiPuLaser/RecipeMgr.cpp | 11 ++++++ LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp | 14 ++++++++ LaiPuLaser/LaiPuLaser/TransferArmMgr.h | 1 + LaiPuLaser/LaiPuLaser/WarningMgr.cpp | 7 ++++ LaiPuLaser/LaiPuLaser/WarningMgr.h | 2 ++ 11 files changed, 88 insertions(+), 3 deletions(-) diff --git a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp index c248b0e..1b40a1a 100644 --- a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp @@ -3796,6 +3796,11 @@ void CAnnealMonitoringMgr::SaveSubRcpParData(CString DataPath,CWafer &Wafer) AddWaferMonitorData(_MonitorData_SubRcp_USE_CUR_N2VAL, Bool2CStringOnOff(RecipePar.m_ParBoolVal)); SaveParVec.push_back(_MonitorData_SubRcp_USE_CUR_N2VAL); } + { + RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_CASSETTE_TIER_COUNT); + AddWaferMonitorData(_MonitorData_SubRcp_Cassette_TierCount, Int2CString(RecipePar.m_ParIntVal)); + SaveParVec.push_back(_MonitorData_SubRcp_Cassette_TierCount); + } //补偿表名称 { RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_OFFSET_TAB); diff --git a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h index 50f75bf..ab64744 100644 --- a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h +++ b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.h @@ -401,6 +401,8 @@ enum eMonitorDataType _MonitorData_SubRcp_RotatoDimmerAngle,//6>衰减器1角度° _MonitorData_SubRcp_RotatoDimmerAngle2,//7>衰减器2角度° + _MonitorData_SubRcp_Cassette_TierCount,//料盒层数 + _MonitorData_SubRcp_FixScanSpeed, _MonitorData_SubRcp_FixScanLineGap, diff --git a/LaiPuLaser/LaiPuLaser/CommonFlowMgr.h b/LaiPuLaser/LaiPuLaser/CommonFlowMgr.h index 73477dc..330b28a 100644 --- a/LaiPuLaser/LaiPuLaser/CommonFlowMgr.h +++ b/LaiPuLaser/LaiPuLaser/CommonFlowMgr.h @@ -206,6 +206,8 @@ public: void SetCurManusal_Anneal_Test_State(bool b) { m_bIsManusal_Anneal_Test = b; }; bool IsCurManusal_Anneal_Test_State() { return m_bIsManusal_Anneal_Test; }; bool IsCheckAutoDoorSign() { return m_bCheckAutoDoorSign; }; + void SetJobStopType(eJobStopType StopType) { m_CurJobStopType = StopType; }; + eJobStopType GetJobStopType() { return m_CurJobStopType; }; private: void CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer,int SubRecipeIdx); void CreatAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer); @@ -284,6 +286,8 @@ private: eJobRunMode m_CurJobRunMode;//当前的运行模式 bool m_bIsManusal_Anneal_Test;//是否为手动退火测试 + + eJobStopType m_CurJobStopType;//当前Job停止类型 }; extern CCommonFlowMgr *gCommonFlowMgr; diff --git a/LaiPuLaser/LaiPuLaser/GlobalDefine.h b/LaiPuLaser/LaiPuLaser/GlobalDefine.h index bc39a4f..3ecea2f 100644 --- a/LaiPuLaser/LaiPuLaser/GlobalDefine.h +++ b/LaiPuLaser/LaiPuLaser/GlobalDefine.h @@ -153,6 +153,7 @@ using namespace std;/*使 #define RECIPE_PAR_NAME_RUNTIMES "RECIPE_PAR_NAME_RUNTIMES" //执行次数 +#define RECIPE_PAR_NAME_CASSETTE_TIER_COUNT "RECIPE_PAR_NAME_CASSETTE_TIER_COUNT" //料盒层数 diff --git a/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp b/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp index 1526fe2..21dd677 100644 --- a/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp @@ -26,6 +26,7 @@ #include "SemiSecsCommMgr.h" #include "DeviceStateMgr.h" #include "WorkCmdInvoker.h" +#include "CommonFlowMgr.h" #define Max_ProcessJob_cnt 100 //最大的Pjob 数量 @@ -2052,6 +2053,12 @@ bool CJobQueueMgr::CreatPJobDataExt() } //Recipe 保存到PJob (运行时使用PJob 中的recipe) PJob.m_Recipe = Recipe; + + //取rcp 层数 + { + CRecipeParameter RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_CASSETTE_TIER_COUNT); + PJob.m_nCassetteTierCount = RecipePar.m_ParIntVal; + } //设置PJOB 的cyc 信息 CRecipeParameter RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_RUNTIMES); @@ -2071,9 +2078,29 @@ bool CJobQueueMgr::CreatPJobDataExt() } CyclicModePar.m_CurCyclicTimes = abs(PJob.m_CurCyclicTimes); CyclicModePar.m_CurCyclicWaferTimes = abs(PJob.m_CurCyclicWaferTimes); - gTransferArmMgr->SetCyclicModePar(CyclicModePar); - - m_JobCreatDataState = _CreatDataState_Ok; + //暂停重新开始Job,不设置cyc次数 + if (gCommonFlowMgr->GetJobStopType() != _JobStopType_Pause) { + gTransferArmMgr->SetCyclicModePar(CyclicModePar); + } + gCommonFlowMgr->SetJobStopType(_JobStopType_Null); + if ((_LoadPortType_Port1 == PJob.m_LoadPortType && PJob.m_nCassetteTierCount != gTransferArmMgr->GetCassetteTierCout(PJob.m_LoadPortType)) + || (_LoadPortType_Port2 == PJob.m_LoadPortType && PJob.m_nCassetteTierCount != gTransferArmMgr->GetCassetteTierCout(PJob.m_LoadPortType))) + { + m_JobCreatDataState = _CreatDataState_Err; + CString s("Rcp Cassette 和当前 Cassette 层数不匹配"); + gLogMgr->InsertPromptList(s); + { + COperateAlarmPar OperateAlarmPar; + OperateAlarmPar.m_OperateAlarmType = _OperateAlarmType_SetAlarmOn; + OperateAlarmPar.m_AlarmType = _AlarmType_CreatJob_RcpCassettemismatch; + OperateAlarmPar.m_bThowException = false; + gWarningMgr->OperateAlarmState(OperateAlarmPar); + } + } + else + { + m_JobCreatDataState = _CreatDataState_Ok; + } return true; } @@ -2246,6 +2273,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType) //OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING_LAST_WAFER); OperateJobPar.m_PjobChangeState = _PJobState_PAUSING; OperateJob(OperateJobPar); + gCommonFlowMgr->SetJobStopType(_JobStopType_Pause); } break; case _JobStopType_Stop: @@ -2261,6 +2289,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType) OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING); OperateJobPar.m_PjobChangeState = _PJobState_STOPPING; OperateJob(OperateJobPar); + gCommonFlowMgr->SetJobStopType(_JobStopType_Stop); } break; case _JobStopType_Abort: @@ -2276,6 +2305,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType) OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING); OperateJobPar.m_PjobChangeState = _PJobState_ABORTING; OperateJob(OperateJobPar); + gCommonFlowMgr->SetJobStopType(_JobStopType_Abort); } break; default: diff --git a/LaiPuLaser/LaiPuLaser/JobQueueMgr.h b/LaiPuLaser/LaiPuLaser/JobQueueMgr.h index 3618e8a..57b38fb 100644 --- a/LaiPuLaser/LaiPuLaser/JobQueueMgr.h +++ b/LaiPuLaser/LaiPuLaser/JobQueueMgr.h @@ -5,6 +5,11 @@ #include "TransferArmMgr.h" +enum E_CassetteTierCount { + E_CASSETTE_THIRTEEN, + E_CASSETTE_TWENTYFIVE +}; + //一片wafer 的状态 enum ePWaferState { @@ -143,6 +148,7 @@ public: m_CurCyclicTimes = 0; m_CurCyclicWaferTimes = 0; m_bCyclicReCreatWaferTransferCmd = false; + m_nCassetteTierCount = E_CASSETTE_THIRTEEN; }; void CreatProcessWaferVec(vector SlotVec); vector GetSlotVec(); @@ -171,6 +177,8 @@ public: int m_CurCyclicTimes;//当前cyc 次数 int m_CurCyclicWaferTimes;//当前cyclic 的wafer 数量 + int m_nCassetteTierCount;//cassette 层数 + bool m_bCyclicReCreatWaferTransferCmd;//Cyclic是否重新创建cmd CString m_PjobHistoryDirPath;//Pjob History路径 diff --git a/LaiPuLaser/LaiPuLaser/RecipeMgr.cpp b/LaiPuLaser/LaiPuLaser/RecipeMgr.cpp index 1e3509a..c8e2f37 100644 --- a/LaiPuLaser/LaiPuLaser/RecipeMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/RecipeMgr.cpp @@ -321,6 +321,17 @@ void CSubRecipe::IntiRecipeParVec() RecipePar.m_ParBoolVal = false;//默认值 m_RecipeParVec.push_back(RecipePar); } + { + CRecipeParameter RecipePar; + RecipePar.m_ParName = RECIPE_PAR_NAME_CASSETTE_TIER_COUNT; + RecipePar.m_ParShowName = "Cassette Tier Cout"; + RecipePar.m_ParUnit = ""; + RecipePar.m_ParType = _RecipeParType_Int;//参数的类型 + RecipePar.m_ParDoubleVal = 13;//默认值 + RecipePar.m_DoubleMinVal = 13; + RecipePar.m_DoubleMaxVal = 25; + m_RecipeParVec.push_back(RecipePar); + } //不能被编辑的参数--------------------------------------------------------------- #if 1 { diff --git a/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp b/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp index d3c214e..445c637 100644 --- a/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp @@ -3845,6 +3845,20 @@ void CTransferArmMgr::UnLoadCheckArm1Pos() } } +int CTransferArmMgr::GetCassetteTierCout(eWaferLoadPortType LoadPortType) +{ + int nRet = E_CASSETTE_THIRTEEN; + if (_LoadPortType_Port1 == LoadPortType) + { + nRet = m_Port1SlotCnt; + } + else if (_LoadPortType_Port2 == LoadPortType) + { + nRet = m_Port2SlotCnt; + } + return nRet; +} + void CTransferArmMgr::DealAlarm(eAlarmType CurAlarmType, bool bThrow, CString ErrInfo) { COperateAlarmPar OperateAlarmPar; diff --git a/LaiPuLaser/LaiPuLaser/TransferArmMgr.h b/LaiPuLaser/LaiPuLaser/TransferArmMgr.h index 96353ac..0019244 100644 --- a/LaiPuLaser/LaiPuLaser/TransferArmMgr.h +++ b/LaiPuLaser/LaiPuLaser/TransferArmMgr.h @@ -541,6 +541,7 @@ public: bool CheckCassetteLayerChange(eWaferLoadPortType LoadPortType); bool QueryArm1Coord(double & Val); void UnLoadCheckArm1Pos(); + int GetCassetteTierCout(eWaferLoadPortType LoadPortType); void DealAlarm(eAlarmType CurAlarmType, bool bThrow, CString ErrInfo); private: void InitWaferState(); diff --git a/LaiPuLaser/LaiPuLaser/WarningMgr.cpp b/LaiPuLaser/LaiPuLaser/WarningMgr.cpp index d7a8fc5..a4a3a62 100644 --- a/LaiPuLaser/LaiPuLaser/WarningMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/WarningMgr.cpp @@ -2962,6 +2962,13 @@ void CWarningMgr::InitAlarmStateVec() WarningState.m_bNeedInitDevice = false; WarningState.m_WarningType = _WarningType_StopJobFlow; } + { + CWarningState &WarningState = GetAlarmState(_AlarmType_CreatJob_RcpCassettemismatch); + WarningState.m_SecsAlarmId = 37396; + WarningState.m_Description = "Recipe 料盒层数不匹配"; + WarningState.m_bNeedInitDevice = false; + WarningState.m_WarningType = _WarningType_StopJobFlow; + } } CWarningState &CWarningMgr::GetAlarmState(eAlarmType AlarmType) { diff --git a/LaiPuLaser/LaiPuLaser/WarningMgr.h b/LaiPuLaser/LaiPuLaser/WarningMgr.h index 38adea9..9d1b855 100644 --- a/LaiPuLaser/LaiPuLaser/WarningMgr.h +++ b/LaiPuLaser/LaiPuLaser/WarningMgr.h @@ -134,6 +134,8 @@ enum eAlarmType _AlarmType_CreatEapPJob_Failed,//创建Pjob 失败 _AlarmType_CreatEapCJob_Failed,//创建Cjob 失败 _AlarmType_Secs_WaferInfoNotCommit,//Eap 没有在Map commit 的时候设置wafer 的信息,Pjob 又有这片wafer + + _AlarmType_CreatJob_RcpCassettemismatch,//recipe层数不匹配 //准直器 _AlarmType_Aligner_CommunicationErr,//通信异常