EAP添加SV参数(SecsProcessState)

main
wyj 3 months ago
parent 90ff11daea
commit ad9f919c33

@ -124,6 +124,12 @@ UINT CtrlSoftWareRunHeartBeatThread(LPVOID pParam)
p->SoftWareRunHeartBeat(); p->SoftWareRunHeartBeat();
return 0; return 0;
} }
UINT UpDataSecsProcessStateThread(LPVOID pParam)
{
CDeviceStateMgr *p = (CDeviceStateMgr *)pParam;
p->UpDataSecsProcessState();
return 0;
}
CDeviceStateMgr *gDeviceStateMgr = new CDeviceStateMgr; CDeviceStateMgr *gDeviceStateMgr = new CDeviceStateMgr;
CDeviceStateMgr::CDeviceStateMgr(void) CDeviceStateMgr::CDeviceStateMgr(void)
{ {
@ -245,6 +251,8 @@ void CDeviceStateMgr::OnAppInitialize()
pThread = AfxBeginThread(ReadAptDeviceStateThread, this); pThread = AfxBeginThread(ReadAptDeviceStateThread, this);
Sleep(100); Sleep(100);
pThread = AfxBeginThread(CtrlSoftWareRunHeartBeatThread, this); pThread = AfxBeginThread(CtrlSoftWareRunHeartBeatThread, this);
Sleep(100);
pThread = AfxBeginThread(UpDataSecsProcessStateThread, this);
} }
void CDeviceStateMgr::OnDeviceInit() void CDeviceStateMgr::OnDeviceInit()
{ {
@ -481,6 +489,58 @@ void CDeviceStateMgr::SoftWareRunHeartBeat()
} }
} }
void CDeviceStateMgr::UpDataSecsProcessState()
{
//第一次检查前的延时
Sleep(FIRST_OPEN_DELAY);
while (1)
{
if (gAllThreadMgr.IsbStopAllThread())
break;
set<ePJobState> StateSet1;
StateSet1.insert(_PJobState_QUEUED);
set<ePJobState> StateSet2;
StateSet2.insert(_PJobState_PROCESSING);
//刷新状态的顺序需要按照紧急级别排列
if (!IsDeviceInitialize())
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_INIT);
}
else if (gCommonFlowMgr->GetJobStopType()>_JobStopType_Null
&&gJobQueueMgr->HasJob())
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_PAUSED);
}
else if (gCmdInvoker_WaferAneal.IsbExcuting()&&gAnnealMonitoringMgr->IsAnnealProcessExt())
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_PROCESSING);
}
else if (gCommonFlowMgr->IsbAutoRunning()&&gJobQueueMgr->HasRunningPJob())
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_SETTING_UP);
}
else if ((gJobQueueMgr->CheckLoadPortJob_ByStateSet(_LoadPortType_Port1, StateSet1)
|| gJobQueueMgr->CheckLoadPortJob_ByStateSet(_LoadPortType_Port2, StateSet1))
&& !gJobQueueMgr->HasRunningPJob())
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_READY);
}
else if (_FoupState_OFF==gFoupLoadPortMgr->GetFoupState(_LoadPortType_Port1)
&& _FoupState_OFF == gFoupLoadPortMgr->GetFoupState(_LoadPortType_Port2)
&&gWarningMgr->HasWarningMsg(_WarningType_Warning))
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_IDLE_WITH_ALARMS);
}
else if (_FoupState_OFF == gFoupLoadPortMgr->GetFoupState(_LoadPortType_Port1)
&& _FoupState_OFF == gFoupLoadPortMgr->GetFoupState(_LoadPortType_Port2)
&& !gWarningMgr->HasWarningMsg(_WarningType_Warning))
{
gSemiSecsCommMgr->SetCurProcessState(_ProcessState_IDLE);
}
Sleep(1000);
}
}
#endif #endif
#if 1 #if 1
//更新常用IO 的状态(这个函数只是读取相应的值,不进行具体的通信操作) //更新常用IO 的状态(这个函数只是读取相应的值,不进行具体的通信操作)

@ -149,6 +149,7 @@ public:
void ReadLoadport2State(); void ReadLoadport2State();
void ReadAptDeviceState(); void ReadAptDeviceState();
void SoftWareRunHeartBeat(); void SoftWareRunHeartBeat();
void UpDataSecsProcessState();
void BeamGageCtrl(); void BeamGageCtrl();
bool CheckStateDuringProcessing(); bool CheckStateDuringProcessing();
void SetIOState(CCommonIOState IOState){m_IOState = IOState;}; void SetIOState(CCommonIOState IOState){m_IOState = IOState;};

@ -1380,6 +1380,12 @@ void CTdkFoupLoadPortMgr::ClearComBuf()
gCriticalSection_LoadPort2.Unlock(); gCriticalSection_LoadPort2.Unlock();
} }
} }
eFoupState CTdkFoupLoadPortMgr::GetFoupState(eWaferLoadPortType PortType)
{
if (_LoadPortType_Port1 == PortType)
return m_FoupLoadPort1.m_FoupState;
return m_FoupLoadPort2.m_FoupState;
}
bool CTdkFoupLoadPortMgr::ReadLoadPortStateExt(eWaferLoadPortType LoadPortType,eReadLoadPortType ReadLoadPortType) bool CTdkFoupLoadPortMgr::ReadLoadPortStateExt(eWaferLoadPortType LoadPortType,eReadLoadPortType ReadLoadPortType)
{ {
//多次读取失败才算 //多次读取失败才算

@ -312,6 +312,7 @@ public:
void UpdateFoupOnStateExt(eWaferLoadPortType LoadPortType); void UpdateFoupOnStateExt(eWaferLoadPortType LoadPortType);
void FoupStatuReadReaLTimeCtl(bool bStart); void FoupStatuReadReaLTimeCtl(bool bStart);
void ClearComBuf(); void ClearComBuf();
eFoupState GetFoupState(eWaferLoadPortType PortType);
private: private:
CString GetCmdTypeStr(eTdkCmdType CmdType); CString GetCmdTypeStr(eTdkCmdType CmdType);
CString GetCmdStr(eTdkCmdType CmdType); CString GetCmdStr(eTdkCmdType CmdType);

@ -1005,6 +1005,8 @@ void CSemiSecsCommMgr::InitSecsVar()
m_pSecs->VariableSetMethod(k,OnVarValueProc); m_pSecs->VariableSetMethod(k,OnVarValueProc);
for(int k=42101;k<=42119;k++) for(int k=42101;k<=42119;k++)
m_pSecs->VariableSetMethod(k,OnVarValueProc); m_pSecs->VariableSetMethod(k,OnVarValueProc);
for (int k = 42201; k <= 42210; k++)
m_pSecs->VariableSetMethod(k, OnVarValueProc);
for(int k=5000001;k<=5000286;k++)//Ec List for(int k=5000001;k<=5000286;k++)//Ec List
m_pSecs->VariableSetMethod(k,OnVarValueProc); m_pSecs->VariableSetMethod(k,OnVarValueProc);
} }
@ -1703,6 +1705,11 @@ const char* CSemiSecsCommMgr::OnSecsGetVidVarValue(int varID)
result = Db2CString(LaserDeviceState.m_Laser2DevicePower); result = Db2CString(LaserDeviceState.m_Laser2DevicePower);
} }
break; break;
case 42201://ESecsProcessState
{
result = Int2CString(m_CurProcessState);
}
break;
#if 1//¸øEvent Report ÓõÄÖµ------------START #if 1//¸øEvent Report ÓõÄÖµ------------START
case 50001://STP_PORT_NUMBER case 50001://STP_PORT_NUMBER
{ {

@ -60,17 +60,14 @@ enum eSecsEquipEvent
//设备流程状态 //设备流程状态
enum ESecsProcessState enum ESecsProcessState
{ {
_ProcessState_INIT = 0,//初始化中 _ProcessState_INIT = 0,//初始化中或未初始化
_ProcessState_IDLE,//待机状态 _ProcessState_Null,//未定义
_ProcessState_IDLE_WITH_ALARMS,//待机(有报警) _ProcessState_IDLE,//待机状态Loadport无料盒放置
//_ProcessState_READY,//准备完成(收到PP-SELECT 后,然后等待MAP-CASSETTE和START) _ProcessState_PAUSED,//已暂停有Job处于暂停暂停并不能继续终止状态
_ProcessState_SETTING_UP,//加工前准备(job start 之后load 之前的状态,设置激光参数...) _ProcessState_SETTING_UP,//加工前准备(job start 之后工艺之前的状态,传片....)
_ProcessState_LOAD,//上料 _ProcessState_READY,//准备完成(当前机台有队列中的PJOB可以Start)
_ProcessState_PROCESSING,//加工中 _ProcessState_PROCESSING,//加工中
_ProcessState_UNLOAD,//退料 _ProcessState_IDLE_WITH_ALARMS,//待机(有报警)
_ProcessState_PAUSED,//已暂停
_ProcessState_ALARM_PAUSED,//已暂停,并且有报警
_ProcessState_Null,//未定义
}; };
//port 的状态 //port 的状态
enum ESecsPortState enum ESecsPortState
@ -330,6 +327,7 @@ public:
const char* OnSecsGetECVidVarValue(int varID); const char* OnSecsGetECVidVarValue(int varID);
REMOTE_REPLY OnRemoteCmd(REMOTE_DATA rd); REMOTE_REPLY OnRemoteCmd(REMOTE_DATA rd);
ESecsProcessState GetCurProcessState(){return m_CurProcessState;}; ESecsProcessState GetCurProcessState(){return m_CurProcessState;};
void SetCurProcessState(ESecsProcessState State) { m_CurProcessState = State; };
void OnPPSelect(eWaferLoadPortType PortType); void OnPPSelect(eWaferLoadPortType PortType);
void OnCancel(eWaferLoadPortType PortType); void OnCancel(eWaferLoadPortType PortType);
void OnStart(eWaferLoadPortType PortType); void OnStart(eWaferLoadPortType PortType);

Loading…
Cancel
Save