自动生产任务结束后恢复JOB停止状态为NULL,JOB连续传片下一pjob传片前读取Recipe的准直角度

main
admin 3 months ago
parent 32e96e62e8
commit 7554c180e2

@ -2833,12 +2833,13 @@ bool CAnnealMonitoringMgr::CheckbExcuteStop()
LogInfo.m_FuncName = "CheckbExcuteStop"; LogInfo.m_FuncName = "CheckbExcuteStop";
//执行停止 //执行停止
if(gStopAllWrokCmd if(gStopAllWrokCmd
||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Pause || _JobStopType_Pause==gJobQueueMgr->GetCurJobStopType()
||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Stop || _JobStopType_Stop==gJobQueueMgr->GetCurJobStopType()
||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Abort || _JobStopType_Abort==gJobQueueMgr->GetCurJobStopType()
) )
{ {
LogInfo.m_LogMsg = "Excute Stop"; CString str = Bool2CString(gStopAllWrokCmd) + ";" + Int2CString(gJobQueueMgr->GetCurJobStopType());
LogInfo.m_LogMsg = str+"Excute Stop";
gLogMgr->WriteLogInfo(LogInfo); gLogMgr->WriteLogInfo(LogInfo);
return true; return true;
} }

@ -2237,7 +2237,7 @@ void CJobQueueMgr::OnAutoRunStop()
break; break;
} }
//恢复为无操作 //恢复为无操作
//SetJobStopType(_JobStopType_Null); SetJobStopType(_JobStopType_Null);
//改变EAP 流程状态(Statr 或者Stop) //改变EAP 流程状态(Statr 或者Stop)
gSemiSecsCommMgr->ChangeEapFlowStepState(_LoadPortType_Port1); gSemiSecsCommMgr->ChangeEapFlowStepState(_LoadPortType_Port1);
@ -2591,11 +2591,46 @@ void CJobQueueMgr::CheckNextPjobFirstWafer()
if(pWafer && (pWafer->m_WaferState)<=_WaferState_CassetteWating) if(pWafer && (pWafer->m_WaferState)<=_WaferState_CassetteWating)
{ {
gCmdInvoker_WaferTransfer.BindingNextPjobFirstWafer(pWafer); gCmdInvoker_WaferTransfer.BindingNextPjobFirstWafer(pWafer);
double Val = -1.00;
Val = GetRecipeContTransAlignerAngle(NextQueuedPJob);
gTransferArmMgr->SetContTransAlignerAngle(Val);
} }
} }
} }
} }
double CJobQueueMgr::GetRecipeContTransAlignerAngle(CProcessJob pJob)
{
double Ret = -1.00;
CLogInfo LogInfo;
LogInfo.m_ClassName = "CJobQueueMgr";
LogInfo.m_FuncName = "GetRecipeContTransAlignerAngle";
CRecipe Recipe;
LogInfo.m_LogMsg = "ReadRecipeFromFile : " + pJob.m_RecipeName;
gLogMgr->WriteLogInfo(LogInfo);
//¸ù¾ÝPJob.m_RecipeName ¶ÁÈ¡xml Îļþµ½recipe
if (!gRecipeMgr->ReadRecipeFromFile(Recipe, pJob.m_RecipeName))
{
CString s("Recipe Open Failed:");
s += pJob.m_RecipeName;
gLogMgr->InsertPromptList(s);
//Alarm
{
COperateAlarmPar OperateAlarmPar;
OperateAlarmPar.m_OperateAlarmType = _OperateAlarmType_SetAlarmOn;
OperateAlarmPar.m_AlarmType = _AlarmType_Recipe_ReadXmlErr;
OperateAlarmPar.m_AlarmAddInfo = s;
OperateAlarmPar.m_bThowException = false;
gWarningMgr->OperateAlarmState(OperateAlarmPar);
}
return Ret;
}
CRecipeParameter RecipePar;
RecipePar = Recipe.GetRecipePar(RECIPE_PAR_NAME_ALIGNER_ANG);
Ret = RecipePar.m_ParDoubleVal;
return Ret;
}
//设置Pjob 的完成状态 //设置Pjob 的完成状态
//NeedPJobState需要的job 状态 //NeedPJobState需要的job 状态
//_PJobState_PROCESSING或者_PJobState_PROCESSING_LAST_WAFER //_PJobState_PROCESSING或者_PJobState_PROCESSING_LAST_WAFER

@ -278,6 +278,7 @@ public:
bool HasNoCompletePJob(); bool HasNoCompletePJob();
void SetPjobCompleteState(int NeedPJobState); void SetPjobCompleteState(int NeedPJobState);
void CheckNextPjobFirstWafer(); void CheckNextPjobFirstWafer();
double GetRecipeContTransAlignerAngle(CProcessJob pJob);
CString AddPJobHistory(COperateJobPar &OperateJobPar); CString AddPJobHistory(COperateJobPar &OperateJobPar);
void SetbCancelQueueJob(bool b){m_bCancelQueueJob = b;}; void SetbCancelQueueJob(bool b){m_bCancelQueueJob = b;};
bool IsbCancelQueueJob(){return m_bCancelQueueJob;}; bool IsbCancelQueueJob(){return m_bCancelQueueJob;};

@ -1153,9 +1153,10 @@ int CMotionCtrl_Acs::AsixXYMultiPointMove(bool LaserBufCtrl,CString HistoryDataP
} }
//结束点才能停止 //结束点才能停止
//手动操作界面或者job 的停止状态为Abort //手动操作界面或者job 的停止状态为Abort
if(gCmdInvoker_WaferAneal.IsbExcutingStop()||(gJobQueueMgr->GetCurJobStopType()==_JobStopType_Abort)) if(gCmdInvoker_WaferAneal.IsbExcutingStop()||(_JobStopType_Abort==gJobQueueMgr->GetCurJobStopType()))
{ {
LogInfo.m_LogMsg = "Abort"; CString str = Bool2CString(gCmdInvoker_WaferAneal.IsbExcutingStop()) + ";" + Int2CString(gJobQueueMgr->GetCurJobStopType());
LogInfo.m_LogMsg = str+ "Abort";
gLogMgr->WriteLogInfo(LogInfo); gLogMgr->WriteLogInfo(LogInfo);
break; break;
} }

@ -1455,13 +1455,20 @@ void CTransferArmMgr::WaferTransfer_Arm1PosToAligner(CWafer &Wafer,bool bLoad)
if(bLoad)//上料的时候使用wafer recipe 第一个区域的准直角度 if(bLoad)//上料的时候使用wafer recipe 第一个区域的准直角度
{ {
AlignerAngle = Wafer.GetAlignerAngle(); AlignerAngle = Wafer.GetAlignerAngle();
if (m_bTwoJobContinuousTrans&&m_ContTransAlignerAngle>=0)
{
AlignerAngle = m_ContTransAlignerAngle;
m_ContTransAlignerAngle = -1.00;//清除使用连续传片准直角度标志
}
//记录wafer 的准直角度(写入记录用) //记录wafer 的准直角度(写入记录用)
Wafer.m_AlignerAngle = Db2CString(AlignerAngle); Wafer.m_AlignerAngle = Db2CString(AlignerAngle);
gLogMgr->WriteDebugLog("WaferTransfer_Arm1PosToAligner:AlignerAngle:"+Wafer.m_AlignerAngle);
} }
else//退料的时候使用指定的准直角度 else//退料的时候使用指定的准直角度
{ {
AlignerAngle = gAlignerDyhMgr->GetBackAlignerAngle(Wafer.GetLoadPortType()); AlignerAngle = gAlignerDyhMgr->GetBackAlignerAngle(Wafer.GetLoadPortType());
} }
//设置当前的准直角度 //设置当前的准直角度
gAlignerDyhMgr->SetCurAlignerAngle(AlignerAngle); gAlignerDyhMgr->SetCurAlignerAngle(AlignerAngle);

@ -526,6 +526,7 @@ public:
void SetCurMoveToWaferSlot(int Slot){m_CurMoveToWaferSlot = Slot;}; void SetCurMoveToWaferSlot(int Slot){m_CurMoveToWaferSlot = Slot;};
void GetPortWaferSlotVec(eWaferLoadPortType LoadPortType,bool bInvertSelection,ePortWaferState WaferStateStart,ePortWaferState WaferStateEnd,vector<int> &WaferSlotVec); void GetPortWaferSlotVec(eWaferLoadPortType LoadPortType,bool bInvertSelection,ePortWaferState WaferStateStart,ePortWaferState WaferStateEnd,vector<int> &WaferSlotVec);
void SetbLoadOrUnload(bool b){m_bLoadOrUnload = b;}; void SetbLoadOrUnload(bool b){m_bLoadOrUnload = b;};
void SetContTransAlignerAngle(double Val) { m_ContTransAlignerAngle = Val; };
CRobotCoord GetCurRobotCoord(){return m_CurRobotCoord;}; CRobotCoord GetCurRobotCoord(){return m_CurRobotCoord;};
void ClearWaferTimes(eWaferTimesType TimesType); void ClearWaferTimes(eWaferTimesType TimesType);
void RobotSevon(); void RobotSevon();
@ -673,6 +674,8 @@ private:
bool m_VacOnBeforeThimbleDown;//顶针下降前先开真空 bool m_VacOnBeforeThimbleDown;//顶针下降前先开真空
CRobotCoord m_CurRobotCoord;//机械手的坐标 CRobotCoord m_CurRobotCoord;//机械手的坐标
double m_ContTransAlignerAngle = -1.00;//Á¬ÐøPJOB´«Æ¬×¼Ö±½Ç¶ÈÉèÖÃ
eAlarmType m_CurRobotAlarmType;//当前的报警类型 eAlarmType m_CurRobotAlarmType;//当前的报警类型
eRobotCmdType m_CurRobotCmdType;//当前执行的cmd eRobotCmdType m_CurRobotCmdType;//当前执行的cmd

Loading…
Cancel
Save