EAP控制料盒层数13/25切换

main
admin 1 month ago
parent 9d0bc03ecb
commit c323f0c18c

@ -41,7 +41,8 @@
#include <Windows.h> #include <Windows.h>
#include <TlHelp32.h> #include <TlHelp32.h>
#include "ThorlabsKCubeMotorCtrlMgr.h" #include "ThorlabsKCubeMotorCtrlMgr.h"
#include "FoupLoadPortMgr.h"
#include <thread>
@ -1723,6 +1724,17 @@ const char* CSemiSecsCommMgr::OnSecsGetVidVarValue(int varID)
case 50006: {if (m_ReportWafer) { result = m_ReportWafer->m_FoupID; }}break; case 50006: {if (m_ReportWafer) { result = m_ReportWafer->m_FoupID; }}break;
case 50007: {if (m_ReportWafer) { result = m_ReportWafer->m_ProcessJobID; }}break; case 50007: {if (m_ReportWafer) { result = m_ReportWafer->m_ProcessJobID; }}break;
case 50008: {if (m_ReportWafer) { result = m_ReportWafer->m_ControlJobID; }}break; case 50008: {if (m_ReportWafer) { result = m_ReportWafer->m_ControlJobID; }}break;
case 50101:
{
result = gTransferArmMgr->IsCurCassetteLayer(_LoadPortType_Port1) ? ("13") : ("25");
}
break;
case 50102:
{
result = gTransferArmMgr->IsCurCassetteLayer(_LoadPortType_Port2) ? ("13") : ("25");
}
break;
#endif//给Event Report 用的值------------END #endif//给Event Report 用的值------------END
default:result.Format("error variable %d, please contact the engineer", varID);//未定义的id default:result.Format("error variable %d, please contact the engineer", varID);//未定义的id
} }
@ -3515,6 +3527,9 @@ void CSemiSecsCommMgr::UpdateEventReportVar(CSecsEventInfo &EventInfo)
CString ReportInfo; CString ReportInfo;
switch(EventInfo.m_EventType) switch(EventInfo.m_EventType)
{ {
case _SecsEvent_Port1_CarrierLayer_Change:
case _SecsEvent_Port2_CarrierLayer_Change:
break;
case _SecsEvent_FoupLoadMap_Start: case _SecsEvent_FoupLoadMap_Start:
case _SecsEvent_FoupLoadMap_End: case _SecsEvent_FoupLoadMap_End:
case _SecsEvent_FoupUnload_Start: case _SecsEvent_FoupUnload_Start:
@ -3613,7 +3628,8 @@ void CSemiSecsCommMgr::GetEventInfo(eSecsEquipEvent SecsEvent,int &EventId,CStri
case _SecsEvent_Wafer_Anneal_End:{EventId=1100034;EventName="Wafer_Anneal_End";}break; case _SecsEvent_Wafer_Anneal_End:{EventId=1100034;EventName="Wafer_Anneal_End";}break;
case _SecsEvent_Beam_Check_Start:{EventId=1100035;EventName="_SecsEvent_Beam_Check_Start";}break; case _SecsEvent_Beam_Check_Start:{EventId=1100035;EventName="_SecsEvent_Beam_Check_Start";}break;
case _SecsEvent_Beam_Check_End:{EventId=1100036;EventName="_SecsEvent_Beam_Check_End";}break; case _SecsEvent_Beam_Check_End:{EventId=1100036;EventName="_SecsEvent_Beam_Check_End";}break;
case _SecsEvent_Port1_CarrierLayer_Change: {EventId = 1200001; EventName = "_SecsEvent_Port1_CarrierLayer_Change"; }break;
case _SecsEvent_Port2_CarrierLayer_Change: {EventId = 1200002; EventName = "_SecsEvent_Port2_CarrierLayer_Change"; }break;
default: default:
break; break;
} }
@ -3720,12 +3736,18 @@ REMOTE_REPLY CSemiSecsCommMgr::OnRemoteCmd(REMOTE_DATA RemoteData)
set<string> CmdSet; set<string> CmdSet;
CmdSet.insert("CANCEL"); CmdSet.insert("CANCEL");
CmdSet.insert("STOP"); CmdSet.insert("STOP");
CmdSet.insert("CARRIERLAYERCHANGE");
if(CmdSet.count(RemoteData.pRCMD)==false) if(CmdSet.count(RemoteData.pRCMD)==false)
return eCOMMAND_NOT_EXIST;//命令不存在 return eCOMMAND_NOT_EXIST;//命令不存在
if(RemoteData.pRCMD=="CANCEL"||RemoteData.pRCMD=="STOP") if (RemoteData.pRCMD == "CANCEL" || RemoteData.pRCMD == "STOP")
return OnRemoteCmd_Cancel(RemoteData); {
return OnRemoteCmd_Cancel(RemoteData);
}
else if("CARRIERLAYERCHANGE"==RemoteData.pRCMD)
{
return OnRemoteCmd_CarrierLayerChange(RemoteData);
}
return eCOMMAND_NOT_EXIST;//命令不存在 return eCOMMAND_NOT_EXIST;//命令不存在
} }
@ -3763,6 +3785,104 @@ REMOTE_REPLY CSemiSecsCommMgr::OnRemoteCmd_Start(REMOTE_DATA RemoteData)
return eCOMMAND_PERFORMED;//执行 return eCOMMAND_PERFORMED;//执行
} }
REMOTE_REPLY CSemiSecsCommMgr::OnRemoteCmd_CarrierLayerChange(REMOTE_DATA RemoteData)
{
CLogInfo LogInfo;
LogInfo.m_ClassName = "CSemiSecsCommMgr";
LogInfo.m_FuncName = "OnRemoteCmd_CarrierLayerChange";
gLogMgr->WriteLogInfo(LogInfo);
std::string sPar1 = RemoteData.mapParam["CP-PORT"];//"1 or 2"
std::string sPar2 = RemoteData.mapParam["CP-CARRIERLAYER"];
//转换为CString
CString CMD = RemoteData.pRCMD.c_str();
CString PORT = sPar1.c_str();
CString CARRIERLAYER = sPar2.c_str();
CString log;
log = CMD;
log += " PORT:[";
log += PORT;
log += "]CARRIERLAYER:[";
log += CARRIERLAYER;
log += "]";
gLogMgr->WriteDebugLog(log);
gLogMgr->InsertPromptList(log);
eWaferLoadPortType CurPort = "1" == PORT ? _LoadPortType_Port1 : _LoadPortType_Port2;
//Port 只能是1或者2
if (PORT != "1" && PORT != "2")
{
CString ErrInfo = "Secs--->eCOMMAND_PARAMETER_IS_INVALID:PORT";
gLogMgr->WriteDebugLog(ErrInfo);
gLogMgr->InsertPromptList(ErrInfo);
return eCOMMAND_PARAMETER_IS_INVALID;//参数错误
}
//CARRIERLAYER 只能是13或者25
if (CARRIERLAYER != "13" && CARRIERLAYER != "25")
{
CString ErrInfo = "Secs--->eCOMMAND_PARAMETER_IS_INVALID:CARRIERLAYER";
gLogMgr->WriteDebugLog(ErrInfo);
gLogMgr->InsertPromptList(ErrInfo);
return eCOMMAND_PARAMETER_IS_INVALID;//参数错误
}
if (gCommonFlowMgr->IsbAutoRunning())
{
CString ErrInfo = "Secs--->COMMAND_REFUSAL_EXECUTE:CURRENT_DEVICE_STATUS_IS_AUTO_RUN";
gLogMgr->WriteDebugLog(ErrInfo);
gLogMgr->InsertPromptList(ErrInfo);
return eCOMMAND_CANNOT_PERFORM_NOW;//命令现在不能执行
}
if (gJobQueueMgr->HasJob())
{
CString ErrInfo = "Secs--->COMMAND_REFUSAL_EXECUTE:DEVICE_HAS_JOB";
gLogMgr->WriteDebugLog(ErrInfo);
gLogMgr->InsertPromptList(ErrInfo);
return eCOMMAND_CANNOT_PERFORM_NOW;//命令现在不能执行
}
CFoupLoadPort &CurFoupLoadPort = gFoupLoadPortMgr->GetFoupLoadPort(CurPort);
if (CurFoupLoadPort.m_bFoupInEquip)
{
CString ErrInfo = "Secs--->COMMAND_REFUSAL_EXECUTE:FOUP_IN_EQUIP";
gLogMgr->WriteDebugLog(ErrInfo);
gLogMgr->InsertPromptList(ErrInfo);
return eCOMMAND_CANNOT_PERFORM_NOW;//命令现在不能执行
}
if ("13" == CARRIERLAYER && !gTransferArmMgr->IsCurCassetteLayer(CurPort))
{
gTransferArmMgr->SwitchCassetteLayer(CurPort);
}
else if ("25" == CARRIERLAYER && gTransferArmMgr->IsCurCassetteLayer(CurPort))
{
gTransferArmMgr->SwitchCassetteLayer(CurPort);
}
else
{
//CString ErrInfo = "Secs--->INVALID OPERATION:PORT"+ PORT +"CARRIERLAYER IS ALREADY"+ CARRIERLAYER;
//gLogMgr->WriteDebugLog(ErrInfo);
//gLogMgr->InsertPromptList(ErrInfo);
//return eCOMMAND_REJECTED;//拒绝,虽然已经满足命令所需状态
auto EventFun = [&](eWaferLoadPortType PortType)
{
Sleep(500);
//Eap 事件
{
CSecsEventInfo EventInfo;
EventInfo.m_EventType = _LoadPortType_Port1 == PortType ? _SecsEvent_Port1_CarrierLayer_Change : _SecsEvent_Port2_CarrierLayer_Change;
EventInfo.m_LoadPortType = PortType;
gSemiSecsCommMgr->SendEventToEap(EventInfo);
}
};
thread tSend(EventFun,CurPort);
tSend.detach();
}
return eCOMMAND_PERFORMED;//执行
}
#endif #endif
#if 1 #if 1

@ -53,6 +53,9 @@ enum eSecsEquipEvent
_SecsEvent_Wafer_Anneal_End, _SecsEvent_Wafer_Anneal_End,
_SecsEvent_Beam_Check_Start, _SecsEvent_Beam_Check_Start,
_SecsEvent_Beam_Check_End, _SecsEvent_Beam_Check_End,
//1200001
_SecsEvent_Port1_CarrierLayer_Change,
_SecsEvent_Port2_CarrierLayer_Change,
_SecsEvent_Max, _SecsEvent_Max,
@ -381,6 +384,7 @@ private:
REMOTE_REPLY OnRemoteCmd_Cancel(REMOTE_DATA RemoteData); REMOTE_REPLY OnRemoteCmd_Cancel(REMOTE_DATA RemoteData);
REMOTE_REPLY OnRemoteCmd_CassetteClose(REMOTE_DATA RemoteData); REMOTE_REPLY OnRemoteCmd_CassetteClose(REMOTE_DATA RemoteData);
REMOTE_REPLY OnRemoteCmd_Start(REMOTE_DATA RemoteData); REMOTE_REPLY OnRemoteCmd_Start(REMOTE_DATA RemoteData);
REMOTE_REPLY OnRemoteCmd_CarrierLayerChange(REMOTE_DATA RemoteData);
void UpdateEventReportVar(CSecsEventInfo &EventInfo); void UpdateEventReportVar(CSecsEventInfo &EventInfo);
bool EnableGem300(); bool EnableGem300();
void InitCMS(); void InitCMS();

@ -37,6 +37,7 @@
#include "JobQueueMgr.h" #include "JobQueueMgr.h"
#include "OtherMonitorDevMgr.h" #include "OtherMonitorDevMgr.h"
#include "ThimbleMgr.h" #include "ThimbleMgr.h"
#include <thread>
#define ArmInSmifMaxDis 44 #define ArmInSmifMaxDis 44
@ -3786,6 +3787,19 @@ void CTransferArmMgr::SwitchCassetteLayer(eWaferLoadPortType LoadPortType)
int PortSlotCnt = bChange ? (int)13 : (int)25; int PortSlotCnt = bChange ? (int)13 : (int)25;
m_Port2SlotCnt = PortSlotCnt; m_Port2SlotCnt = PortSlotCnt;
} }
auto EventFun = [&](eWaferLoadPortType PortType)
{
Sleep(500);
//Eap ʼþ
{
CSecsEventInfo EventInfo;
EventInfo.m_EventType = _LoadPortType_Port1 == PortType ? _SecsEvent_Port1_CarrierLayer_Change : _SecsEvent_Port2_CarrierLayer_Change;
EventInfo.m_LoadPortType = PortType;
gSemiSecsCommMgr->SendEventToEap(EventInfo);
}
};
thread tSend(EventFun, LoadPortType);
tSend.detach();
} }
bool CTransferArmMgr::CheckCassetteLayerChange(eWaferLoadPortType LoadPortType) bool CTransferArmMgr::CheckCassetteLayerChange(eWaferLoadPortType LoadPortType)

Loading…
Cancel
Save