diff --git a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp index 57f0461..80d4b3f 100644 --- a/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/AnnealMonitoringMgr.cpp @@ -2833,12 +2833,13 @@ bool CAnnealMonitoringMgr::CheckbExcuteStop() LogInfo.m_FuncName = "CheckbExcuteStop"; //执行停止 if(gStopAllWrokCmd - ||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Pause - ||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Stop - ||gJobQueueMgr->GetCurJobStopType()==_JobStopType_Abort + || _JobStopType_Pause==gJobQueueMgr->GetCurJobStopType() + || _JobStopType_Stop==gJobQueueMgr->GetCurJobStopType() + || _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); return true; } diff --git a/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp b/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp index 3fb88b2..e4800b5 100644 --- a/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/JobQueueMgr.cpp @@ -2237,7 +2237,7 @@ void CJobQueueMgr::OnAutoRunStop() break; } //恢复为无操作 - //SetJobStopType(_JobStopType_Null); + SetJobStopType(_JobStopType_Null); //改变EAP 流程状态(Statr 或者Stop) gSemiSecsCommMgr->ChangeEapFlowStepState(_LoadPortType_Port1); @@ -2591,11 +2591,46 @@ void CJobQueueMgr::CheckNextPjobFirstWafer() if(pWafer && (pWafer->m_WaferState)<=_WaferState_CassetteWating) { 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 的完成状态 //NeedPJobState需要的job 状态 //_PJobState_PROCESSING或者_PJobState_PROCESSING_LAST_WAFER diff --git a/LaiPuLaser/LaiPuLaser/JobQueueMgr.h b/LaiPuLaser/LaiPuLaser/JobQueueMgr.h index 57b38fb..7e3ff7f 100644 --- a/LaiPuLaser/LaiPuLaser/JobQueueMgr.h +++ b/LaiPuLaser/LaiPuLaser/JobQueueMgr.h @@ -278,6 +278,7 @@ public: bool HasNoCompletePJob(); void SetPjobCompleteState(int NeedPJobState); void CheckNextPjobFirstWafer(); + double GetRecipeContTransAlignerAngle(CProcessJob pJob); CString AddPJobHistory(COperateJobPar &OperateJobPar); void SetbCancelQueueJob(bool b){m_bCancelQueueJob = b;}; bool IsbCancelQueueJob(){return m_bCancelQueueJob;}; diff --git a/LaiPuLaser/LaiPuLaser/MotionCtrl_Acs.cpp b/LaiPuLaser/LaiPuLaser/MotionCtrl_Acs.cpp index 395b0f5..e0d35c4 100644 --- a/LaiPuLaser/LaiPuLaser/MotionCtrl_Acs.cpp +++ b/LaiPuLaser/LaiPuLaser/MotionCtrl_Acs.cpp @@ -1153,9 +1153,10 @@ int CMotionCtrl_Acs::AsixXYMultiPointMove(bool LaserBufCtrl,CString HistoryDataP } //结束点才能停止 //手动操作界面或者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); break; } diff --git a/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp b/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp index 20ee53d..689b271 100644 --- a/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp +++ b/LaiPuLaser/LaiPuLaser/TransferArmMgr.cpp @@ -1455,13 +1455,20 @@ void CTransferArmMgr::WaferTransfer_Arm1PosToAligner(CWafer &Wafer,bool bLoad) if(bLoad)//上料的时候使用wafer recipe 第一个区域的准直角度 { AlignerAngle = Wafer.GetAlignerAngle(); + if (m_bTwoJobContinuousTrans&&m_ContTransAlignerAngle>=0) + { + AlignerAngle = m_ContTransAlignerAngle; + m_ContTransAlignerAngle = -1.00;//清除使用连续传片准直角度标志 + } //记录wafer 的准直角度(写入记录用) Wafer.m_AlignerAngle = Db2CString(AlignerAngle); + gLogMgr->WriteDebugLog("WaferTransfer_Arm1PosToAligner:AlignerAngle:"+Wafer.m_AlignerAngle); } else//退料的时候使用指定的准直角度 { AlignerAngle = gAlignerDyhMgr->GetBackAlignerAngle(Wafer.GetLoadPortType()); } + //设置当前的准直角度 gAlignerDyhMgr->SetCurAlignerAngle(AlignerAngle); diff --git a/LaiPuLaser/LaiPuLaser/TransferArmMgr.h b/LaiPuLaser/LaiPuLaser/TransferArmMgr.h index 0019244..18186a3 100644 --- a/LaiPuLaser/LaiPuLaser/TransferArmMgr.h +++ b/LaiPuLaser/LaiPuLaser/TransferArmMgr.h @@ -526,6 +526,7 @@ public: void SetCurMoveToWaferSlot(int Slot){m_CurMoveToWaferSlot = Slot;}; void GetPortWaferSlotVec(eWaferLoadPortType LoadPortType,bool bInvertSelection,ePortWaferState WaferStateStart,ePortWaferState WaferStateEnd,vector &WaferSlotVec); void SetbLoadOrUnload(bool b){m_bLoadOrUnload = b;}; + void SetContTransAlignerAngle(double Val) { m_ContTransAlignerAngle = Val; }; CRobotCoord GetCurRobotCoord(){return m_CurRobotCoord;}; void ClearWaferTimes(eWaferTimesType TimesType); void RobotSevon(); @@ -673,6 +674,8 @@ private: bool m_VacOnBeforeThimbleDown;//顶针下降前先开真空 CRobotCoord m_CurRobotCoord;//机械手的坐标 + double m_ContTransAlignerAngle = -1.00;//连续PJOB传片准直角度设置 + eAlarmType m_CurRobotAlarmType;//当前的报警类型 eRobotCmdType m_CurRobotCmdType;//当前执行的cmd