蓝色软件Recipe料盒层数,暂停工艺优化

main
wklyj 6 months ago
parent 7efd1ba6a4
commit aa3b74d46f

@ -3796,6 +3796,11 @@ void CAnnealMonitoringMgr::SaveSubRcpParData(CString DataPath,CWafer &Wafer)
AddWaferMonitorData(_MonitorData_SubRcp_USE_CUR_N2VAL, Bool2CStringOnOff(RecipePar.m_ParBoolVal)); AddWaferMonitorData(_MonitorData_SubRcp_USE_CUR_N2VAL, Bool2CStringOnOff(RecipePar.m_ParBoolVal));
SaveParVec.push_back(_MonitorData_SubRcp_USE_CUR_N2VAL); 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); RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_OFFSET_TAB);

@ -401,6 +401,8 @@ enum eMonitorDataType
_MonitorData_SubRcp_RotatoDimmerAngle,//6>衰减器1角度° _MonitorData_SubRcp_RotatoDimmerAngle,//6>衰减器1角度°
_MonitorData_SubRcp_RotatoDimmerAngle2,//7>衰减器2角度° _MonitorData_SubRcp_RotatoDimmerAngle2,//7>衰减器2角度°
_MonitorData_SubRcp_Cassette_TierCount,//料盒层数
_MonitorData_SubRcp_FixScanSpeed, _MonitorData_SubRcp_FixScanSpeed,
_MonitorData_SubRcp_FixScanLineGap, _MonitorData_SubRcp_FixScanLineGap,

@ -206,6 +206,8 @@ public:
void SetCurManusal_Anneal_Test_State(bool b) { m_bIsManusal_Anneal_Test = b; }; void SetCurManusal_Anneal_Test_State(bool b) { m_bIsManusal_Anneal_Test = b; };
bool IsCurManusal_Anneal_Test_State() { return m_bIsManusal_Anneal_Test; }; bool IsCurManusal_Anneal_Test_State() { return m_bIsManusal_Anneal_Test; };
bool IsCheckAutoDoorSign() { return m_bCheckAutoDoorSign; }; bool IsCheckAutoDoorSign() { return m_bCheckAutoDoorSign; };
void SetJobStopType(eJobStopType StopType) { m_CurJobStopType = StopType; };
eJobStopType GetJobStopType() { return m_CurJobStopType; };
private: private:
void CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer,int SubRecipeIdx); void CreatSubRecipeAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer,int SubRecipeIdx);
void CreatAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer); void CreatAnnealPrepareCmd(CWorkCmdInvoker &CmdInvoker,CWafer *pWafer);
@ -284,6 +286,8 @@ private:
eJobRunMode m_CurJobRunMode;//当前的运行模式 eJobRunMode m_CurJobRunMode;//当前的运行模式
bool m_bIsManusal_Anneal_Test;//是否为手动退火测试 bool m_bIsManusal_Anneal_Test;//是否为手动退火测试
eJobStopType m_CurJobStopType;//µ±Ç°JobÍ£Ö¹ÀàÐÍ
}; };
extern CCommonFlowMgr *gCommonFlowMgr; extern CCommonFlowMgr *gCommonFlowMgr;

@ -153,6 +153,7 @@ using namespace std;/*ʹ
#define RECIPE_PAR_NAME_RUNTIMES "RECIPE_PAR_NAME_RUNTIMES" //执行次数 #define RECIPE_PAR_NAME_RUNTIMES "RECIPE_PAR_NAME_RUNTIMES" //执行次数
#define RECIPE_PAR_NAME_CASSETTE_TIER_COUNT "RECIPE_PAR_NAME_CASSETTE_TIER_COUNT" //料盒层数

@ -26,6 +26,7 @@
#include "SemiSecsCommMgr.h" #include "SemiSecsCommMgr.h"
#include "DeviceStateMgr.h" #include "DeviceStateMgr.h"
#include "WorkCmdInvoker.h" #include "WorkCmdInvoker.h"
#include "CommonFlowMgr.h"
#define Max_ProcessJob_cnt 100 //最大的Pjob 数量 #define Max_ProcessJob_cnt 100 //最大的Pjob 数量
@ -2052,6 +2053,12 @@ bool CJobQueueMgr::CreatPJobDataExt()
} }
//Recipe 保存到PJob (运行时使用PJob 中的recipe) //Recipe 保存到PJob (运行时使用PJob 中的recipe)
PJob.m_Recipe = Recipe; PJob.m_Recipe = Recipe;
//取rcp 层数
{
CRecipeParameter RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_CASSETTE_TIER_COUNT);
PJob.m_nCassetteTierCount = RecipePar.m_ParIntVal;
}
//设置PJOB 的cyc 信息 //设置PJOB 的cyc 信息
CRecipeParameter RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_RUNTIMES); CRecipeParameter RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_RUNTIMES);
@ -2071,9 +2078,29 @@ bool CJobQueueMgr::CreatPJobDataExt()
} }
CyclicModePar.m_CurCyclicTimes = abs(PJob.m_CurCyclicTimes); CyclicModePar.m_CurCyclicTimes = abs(PJob.m_CurCyclicTimes);
CyclicModePar.m_CurCyclicWaferTimes = abs(PJob.m_CurCyclicWaferTimes); CyclicModePar.m_CurCyclicWaferTimes = abs(PJob.m_CurCyclicWaferTimes);
gTransferArmMgr->SetCyclicModePar(CyclicModePar); //暂停重新开始Job不设置cyc次数
if (gCommonFlowMgr->GetJobStopType() != _JobStopType_Pause) {
m_JobCreatDataState = _CreatDataState_Ok; 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; return true;
} }
@ -2246,6 +2273,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType)
//OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING_LAST_WAFER); //OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING_LAST_WAFER);
OperateJobPar.m_PjobChangeState = _PJobState_PAUSING; OperateJobPar.m_PjobChangeState = _PJobState_PAUSING;
OperateJob(OperateJobPar); OperateJob(OperateJobPar);
gCommonFlowMgr->SetJobStopType(_JobStopType_Pause);
} }
break; break;
case _JobStopType_Stop: case _JobStopType_Stop:
@ -2261,6 +2289,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType)
OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING); OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING);
OperateJobPar.m_PjobChangeState = _PJobState_STOPPING; OperateJobPar.m_PjobChangeState = _PJobState_STOPPING;
OperateJob(OperateJobPar); OperateJob(OperateJobPar);
gCommonFlowMgr->SetJobStopType(_JobStopType_Stop);
} }
break; break;
case _JobStopType_Abort: case _JobStopType_Abort:
@ -2276,6 +2305,7 @@ void CJobQueueMgr::SetJobStopType(eJobStopType StopType)
OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING); OperateJobPar.m_PjobStateSet.insert(_PJobState_PROCESSING);
OperateJobPar.m_PjobChangeState = _PJobState_ABORTING; OperateJobPar.m_PjobChangeState = _PJobState_ABORTING;
OperateJob(OperateJobPar); OperateJob(OperateJobPar);
gCommonFlowMgr->SetJobStopType(_JobStopType_Abort);
} }
break; break;
default: default:

@ -5,6 +5,11 @@
#include "TransferArmMgr.h" #include "TransferArmMgr.h"
enum E_CassetteTierCount {
E_CASSETTE_THIRTEEN,
E_CASSETTE_TWENTYFIVE
};
//一片wafer 的状态 //一片wafer 的状态
enum ePWaferState enum ePWaferState
{ {
@ -143,6 +148,7 @@ public:
m_CurCyclicTimes = 0; m_CurCyclicTimes = 0;
m_CurCyclicWaferTimes = 0; m_CurCyclicWaferTimes = 0;
m_bCyclicReCreatWaferTransferCmd = false; m_bCyclicReCreatWaferTransferCmd = false;
m_nCassetteTierCount = E_CASSETTE_THIRTEEN;
}; };
void CreatProcessWaferVec(vector<int> SlotVec); void CreatProcessWaferVec(vector<int> SlotVec);
vector<int> GetSlotVec(); vector<int> GetSlotVec();
@ -171,6 +177,8 @@ public:
int m_CurCyclicTimes;//当前cyc 次数 int m_CurCyclicTimes;//当前cyc 次数
int m_CurCyclicWaferTimes;//当前cyclic 的wafer 数量 int m_CurCyclicWaferTimes;//当前cyclic 的wafer 数量
int m_nCassetteTierCount;//cassette ²ãÊý
bool m_bCyclicReCreatWaferTransferCmd;//Cyclic是否重新创建cmd bool m_bCyclicReCreatWaferTransferCmd;//Cyclic是否重新创建cmd
CString m_PjobHistoryDirPath;//Pjob History路径 CString m_PjobHistoryDirPath;//Pjob History路径

@ -321,6 +321,17 @@ void CSubRecipe::IntiRecipeParVec()
RecipePar.m_ParBoolVal = false;//默认值 RecipePar.m_ParBoolVal = false;//默认值
m_RecipeParVec.push_back(RecipePar); 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 #if 1
{ {

@ -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) void CTransferArmMgr::DealAlarm(eAlarmType CurAlarmType, bool bThrow, CString ErrInfo)
{ {
COperateAlarmPar OperateAlarmPar; COperateAlarmPar OperateAlarmPar;

@ -541,6 +541,7 @@ public:
bool CheckCassetteLayerChange(eWaferLoadPortType LoadPortType); bool CheckCassetteLayerChange(eWaferLoadPortType LoadPortType);
bool QueryArm1Coord(double & Val); bool QueryArm1Coord(double & Val);
void UnLoadCheckArm1Pos(); void UnLoadCheckArm1Pos();
int GetCassetteTierCout(eWaferLoadPortType LoadPortType);
void DealAlarm(eAlarmType CurAlarmType, bool bThrow, CString ErrInfo); void DealAlarm(eAlarmType CurAlarmType, bool bThrow, CString ErrInfo);
private: private:
void InitWaferState(); void InitWaferState();

@ -2962,6 +2962,13 @@ void CWarningMgr::InitAlarmStateVec()
WarningState.m_bNeedInitDevice = false; WarningState.m_bNeedInitDevice = false;
WarningState.m_WarningType = _WarningType_StopJobFlow; 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) CWarningState &CWarningMgr::GetAlarmState(eAlarmType AlarmType)
{ {

@ -134,6 +134,8 @@ enum eAlarmType
_AlarmType_CreatEapPJob_Failed,//创建Pjob 失败 _AlarmType_CreatEapPJob_Failed,//创建Pjob 失败
_AlarmType_CreatEapCJob_Failed,//创建Cjob 失败 _AlarmType_CreatEapCJob_Failed,//创建Cjob 失败
_AlarmType_Secs_WaferInfoNotCommit,//Eap 没有在Map commit 的时候设置wafer 的信息Pjob 又有这片wafer _AlarmType_Secs_WaferInfoNotCommit,//Eap 没有在Map commit 的时候设置wafer 的信息Pjob 又有这片wafer
_AlarmType_CreatJob_RcpCassettemismatch,//recipe层数不匹配
//准直器 //准直器
_AlarmType_Aligner_CommunicationErr,//通信异常 _AlarmType_Aligner_CommunicationErr,//通信异常

Loading…
Cancel
Save