You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

619 lines
17 KiB
C++

#include "JELOperate.h"
JELOperate::JELOperate()
{
}
JELOperate::~JELOperate()
{
}
bool JELOperate::InitJEL()
{
m_RobotComm.SetWorkMode(FALSE, 100);
std::string strCom = std::to_string(m_nBaud) + ",N,8,1";
m_nPort = 2;
if (m_RobotComm.Open(m_nPort, (char*)strCom.c_str()))
{
//m_RobotComm.SetWnd(gChildPCS_WaferTransfer->GetSafeHwnd());
m_RobotComm.SetNotify(std::bind(&JELOperate::OnRobotCommRecv, this));
CRobotCmdInfo RobotCmd;
RobotCmd.m_RobotCmdType = _RobotCmd_ResetErr;
SendRobotCmd(RobotCmd);
Sleep(500);
RobotCmd.m_RobotCmdType = _RobotCmd_Org;
RobotCmd.m_WaitCmdTime = 60;
bool issuccess = SendRobotCmd(RobotCmd);
if (!issuccess)
{
return false;
}
/*if (!issuccess)
{
CRobotCmdInfo RobotCmd2;
RobotCmd2.m_RobotCmdType = _RobotCmd_ResetErr;
SendRobotCmd(RobotCmd2);
Sleep(500);
SendRobotCmd(RobotCmd2);
Sleep(500);
RobotCmd2.m_RobotCmdType = _RobotCmd_Org;
bool issuccess = SendRobotCmd(RobotCmd2);
}*/
Sleep(500);
//<2F><>ʼ<EFBFBD><CABC>׼ֱ<D7BC><D6B1>
RobotCmd.m_RobotCmdType = _RobotCmd_Init_Align;
issuccess = SendRobotCmd(RobotCmd);
if (!issuccess)
{
return false;
}
}
else
{
return false;
}
return true;
}
bool JELOperate::InitAlign()
{
m_RobotComm.SetWorkMode(FALSE, 100);
std::string strCom = std::to_string(m_nBaud) + ",N,8,1";
m_nPort = 2;
if (m_RobotComm.Open(m_nPort, (char*)strCom.c_str()))
{
//<2F><>ʼ<EFBFBD><CABC>׼ֱ<D7BC><D6B1>
CRobotCmdInfo RobotCmd;
RobotCmd.m_RobotCmdType = _RobotCmd_Init_Align;
return SendRobotCmd(RobotCmd);
}
return false;
}
bool JELOperate::SendRobotCmd(CRobotCmdInfo& RobotCmd)
{
int m_nSlot = 0;
//ȡ<><C8A1>
/*CRobotCmdInfo RobotCmd;
RobotCmd.m_RobotCmdType = _RobotCmd_TransferWafer;
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;
RobotCmd.m_Slot = m_nSlot + 1;
RobotCmd.m_FromPos = _WaferPos_Cassette;
RobotCmd.m_ToPos = _WaferPos_Arm1;*/
eGlobalVariableType AlarmType = _GlobalVar_NULL;
//if (!m_RobotComm.IsOpen())
//{
// //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Ϣ
// RobotCmd.m_ErrStr = "Com Port Not Open";
// //return _GlobalVar_Alarm_Robot_ComPortNotOpen;
// return false;
//}
std::string InfoStr = GetRobotCmdInfoStr(RobotCmd);
//m_CurRobotCmdType = RobotCmd.m_RobotCmdType;
//<2F>ȰѴ<C8B0><D1B4>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1>
{
char Buf[256];
memset(Buf, 0, 256);
m_RobotComm.ReadBuf(Buf, 256);
}
bool m_IsbJelCommRecv = false;//<2F>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ
RobotJel_GetSendCmd(RobotCmd);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Ϣ
if (RobotCmd.m_SendCmdStr == "")
{
RobotCmd.m_ErrStr = "GetSendCmd Failed";
//return _GlobalVar_Alarm_Robot_CmdNak;
return false;
}
//robot<6F>˶<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>foup <20><>
/*bool bLoadPortSafetyLock = (m_CurRobotCmdType == _RobotCmd_TransferWafer || m_CurRobotCmdType == _RobotCmd_ToWaitPos || m_CurRobotCmdType == _RobotCmd_Org);
if (bLoadPortSafetyLock)
{
gLogMgr->WriteDebugLog("LoadPortSafety-->Lock");
}*/
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD>robot(<28><><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣)
AlarmType = RobotJel_SendCmdToRobotExt(RobotCmd);
/*if (bLoadPortSafetyLock)
{
gLogMgr->WriteDebugLog("LoadPortSafety-->Unlock");
}*/
//<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1>ȡrobot <20><>aligner<65>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
if (AlarmType != _GlobalVar_NULL && RobotCmd.m_RobotCmdSendType == _RobotCmdSendType_WaitCmdEnd)
{
CheckRobotErrState(RobotCmd);
return false;
}
return true;
}
std::string JELOperate::GetRobotCmdInfoStr(CRobotCmdInfo &RobotCmd)
{
std::string InfoStr;
switch (RobotCmd.m_RobotCmdType)
{
case _RobotCmd_TransferWafer:
case _RobotCmd_ToWaitPos:
{
InfoStr = "TransferWafer : ";
//InfoStr += GetWaferPosTypeStr(RobotCmd.m_FromPos);
InfoStr += " -> ";
//InfoStr += GetWaferPosTypeStr(RobotCmd.m_ToPos);
if (RobotCmd.m_FromPos == _WaferPos_Cassette || RobotCmd.m_ToPos == _WaferPos_Cassette)
{
InfoStr += " Slot: ";
InfoStr += std::to_string(RobotCmd.m_Slot);
}
}
break;
case _RobotCmd_ResetErr:
InfoStr = "_RobotCmd_ResetErr";
break;
case _RobotCmd_Arm1Arm2MergePos:
InfoStr = "_RobotCmd_Arm1Arm2MergePos";
break;
case _RobotCmd_QueryState:
InfoStr = "_RobotCmd_QueryState";
break;
case _RobotCmd_QueryCoord1:
InfoStr = "_RobotCmd_QueryCoord1";
break;
case _RobotCmd_QueryCoord2:
InfoStr = "_RobotCmd_QueryCoord2";
break;
case _RobotCmd_QueryCoord3:
InfoStr = "_RobotCmd_QueryCoord3";
break;
case _RobotCmd_AlignerExt:
InfoStr = "_RobotCmd_AlignerExt";
break;
case _RobotCmd_AlignerOrg:
InfoStr = "_RobotCmd_AlignerOrg";
break;
case _RobotCmd_AlignerVacOn:
InfoStr = "_RobotCmd_AlignerVacOn";
break;
case _RobotCmd_AlignerVacOff:
InfoStr = "_RobotCmd_AlignerVacOff";
break;
case _RobotCmd_AlignerSetPar:
InfoStr = "_RobotCmd_AlignerSetPar";
break;
default:
break;
}
return InfoStr;
}
void JELOperate::RobotJel_GetSendCmd(CRobotCmdInfo &RobotCmd)
{
int RobotCmdWaitTime = m_nWaitTime;
if (RobotCmd.m_RobotCmdType == _RobotCmd_RunToCassMappingPoint)
{
if (RobotCmd.LoadportId == LOADPORT_LEFT)
{
RobotCmd.m_SendCmdStr = "$1G300";
}
else if (RobotCmd.LoadportId == LOADPORT_CENTER)
{
RobotCmd.m_SendCmdStr = "$1G301";
}
else if (RobotCmd.LoadportId == LOADPORT_RIGHT)
{
RobotCmd.m_SendCmdStr = "$1G302";
}
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
return;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_ReadMappingData)
{
RobotCmd.m_SendCmdStr = "$1G35";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
return;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_Mapping)
{
if (RobotCmd.LoadportId == LOADPORT_LEFT)
{
RobotCmd.m_SendCmdStr = "$1G7";
}
else if (RobotCmd.LoadportId == LOADPORT_CENTER)
{
RobotCmd.m_SendCmdStr = "$1G8";
}
else if (RobotCmd.LoadportId == LOADPORT_RIGHT)
{
RobotCmd.m_SendCmdStr = "$1G9";
}
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
return;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_Check_ARM_EXIST_WAFER)
{
if (RobotCmd.m_armPos == "up")
{
RobotCmd.m_SendCmdStr = "$1CS4";
}
else if (RobotCmd.m_armPos == "down")
{
RobotCmd.m_SendCmdStr = "$1CS8";
}
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
return;
}
if (RobotCmd.m_RobotCmdType == _RObotCmd_RotateToWaferIdPos)
{
RobotCmd.m_SendCmdStr = "$1G310";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_Init_Align)
{
RobotCmd.m_SendCmdStr = "$1G299";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
if (RobotCmd.m_RobotCmdType == _RObotCmd_Switch_bank)
{
if (RobotCmd.m_Slot == 1)
{
RobotCmd.m_SendCmdStr = "$1G5";
}
else
{
RobotCmd.m_SendCmdStr = "$1G4";
}
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_AlignerOrg)//reset err->org->ȡ<><C8A1>λ<EFBFBD><CEBB>
{
RobotCmd.m_SendCmdStr = "$1G112";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_Port1Org)//reset err->org->ȡ<><C8A1>λ<EFBFBD><CEBB>
{
RobotCmd.m_SendCmdStr = "$1G105";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
if (RobotCmd.m_RobotCmdType == _RobotCmd_Port2Org)//reset err->org->ȡ<><C8A1>λ<EFBFBD><CEBB>
{
RobotCmd.m_SendCmdStr = "$1G106";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AlignerExt)//ִ<><D6B4>׼ֱ
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = 20;
RobotCmd.m_SendCmdStr = "$1G294";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AlignerVacOn)//aligner<65><72><EFBFBD><EFBFBD>on
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$2WUC";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AlignerVacOff)//aligner<65><72><EFBFBD><EFBFBD>off
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$2WDF";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AlignerSetPar)//<2F><><EFBFBD><EFBFBD>aligner<65>Ƕ<EFBFBD>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
std::string str = "$2WOP" + std::to_string(m_nAligner);
RobotCmd.m_SendCmdStr = str;
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_ResetErr)//Robot<6F><74><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1RD";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_QueryState)//<2F><>ѯ״̬
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitFeedback;//<2F><><EFBFBD>ͺ<EFBFBD>ֻ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><
RobotCmd.m_SendCmdStr = "$1ER";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Org)//ROBOT ORG
{
RobotCmd.m_SendCmdStr = "$1G3";
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_QueryCoord1)//Robot<6F><74>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>(ͬ<><CDAC>)
RobotCmd.m_SendCmdStr = "$16X";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_QueryCoord2)//Robot<6F><74>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>(ͬ<><CDAC>)
RobotCmd.m_SendCmdStr = "$16R";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_QueryCoord3)//Robot<6F><74>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_ImmediateReadFeedback;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>(ͬ<><CDAC>)
RobotCmd.m_SendCmdStr = "$16Y";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm1VacOff)//Arm1<6D><31><EFBFBD><EFBFBD>off
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1DS20";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm2VacOff)//Arm2<6D><32><EFBFBD><EFBFBD>off
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1DS10";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm1VacOn)//Arm1<6D><31><EFBFBD><EFBFBD>on
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1DS21";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm2VacOn)//Arm2<6D><32><EFBFBD><EFBFBD>on
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1DS11";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AdsVacOn)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1G91";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_AdsVacOff)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1G82";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_InitSet)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_SendOnly;//ֻ<><D6BB><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1G80";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm_Check)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//ֻ<><D6BB><EFBFBD><EFBFBD>
if (RobotCmd.m_FromPos == _WaferPos_Arm1)
RobotCmd.m_SendCmdStr = "$1G36";
else
RobotCmd.m_SendCmdStr = "$1G37";
}
else if (RobotCmd.m_RobotCmdType == _RobotCmd_TransferWafer)//Robot<6F><74><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
//<2F><><EFBFBD><EFBFBD>ָȡ_WaferPos_Cassette
if (RobotCmd.m_FromPos == _WaferPos_Cassette && RobotCmd.m_ToPos == _WaferPos_Arm1)
{
//<2F>Ϻ<EFBFBD>1ȡ<31><C8A1>Բָ<D4B2>$1G10->$1G34<33><34><EFBFBD>Ϻ<EFBFBD>2ȡ<32><C8A1>Բָ<D4B2>$1G80->$1G104
std::string cmdStr = "$1G";
int cmdIndex = 0;
RobotCmd.m_cassIndex == 1 ? cmdIndex = RobotCmd.m_Slot + 9 : cmdIndex = RobotCmd.m_Slot + 79;
cmdStr += std::to_string(cmdIndex);
RobotCmd.m_SendCmdStr = cmdStr;
}
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>_WaferPos_Cassette
if (RobotCmd.m_FromPos == _WaferPos_Arm1 && RobotCmd.m_ToPos == _WaferPos_Cassette)
{
//<2F>Ϻ<EFBFBD>1<EFBFBD>ž<EFBFBD>Բָ<D4B2>$1G40->$1G64<36><34><EFBFBD>Ϻ<EFBFBD>2ȡ<32><C8A1>Բָ<D4B2>$1G110->$1G134
std::string cmdStr = "$1G";
int cmdIndex = 0;
RobotCmd.m_cassIndex == 1 ? cmdIndex = RobotCmd.m_Slot + 39 : cmdIndex = RobotCmd.m_Slot + 109;
cmdStr += std::to_string(cmdIndex);
RobotCmd.m_SendCmdStr = cmdStr;
}
//<2F><>ָȡ<D6B8><C8A1>Aligner
if (RobotCmd.m_FromPos == _WaferPos_Arm1 && RobotCmd.m_ToPos == _WaferPos_Aligner)
{
RobotCmd.m_SendCmdStr = "$1G291";
}
if (RobotCmd.m_FromPos == _WaferPos_Aligner && RobotCmd.m_ToPos == _WaferPos_Arm1)
{
RobotCmd.m_SendCmdStr = "$1G290";
}
if (RobotCmd.m_FromPos == _WaferPos_Aligner && RobotCmd.m_ToPos == _WaferPos_Arm2)
{
RobotCmd.m_SendCmdStr = "$1G292";
}
if (RobotCmd.m_FromPos == _WaferPos_Arm2 && RobotCmd.m_ToPos == _WaferPos_Aligner)
{
RobotCmd.m_SendCmdStr = "$1G293";
}
//<2F><>ָȡ<D6B8><C8A1>HotPlate
if (RobotCmd.m_FromPos == _WaferPos_Arm2 && RobotCmd.m_ToPos == _WaferPos_HotPlate)
{
RobotCmd.m_SendCmdStr = "$1G298";
}
if (RobotCmd.m_FromPos == _WaferPos_HotPlate && RobotCmd.m_ToPos == _WaferPos_Arm2)
{
RobotCmd.m_SendCmdStr = "$1G297";
}
}
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ȴ<EFBFBD>λ<EFBFBD><CEBB>
else if (RobotCmd.m_RobotCmdType == _RobotCmd_ToWaitPos)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_WaitCmdTime = RobotCmdWaitTime;
//Arm2<6D>ƶ<EFBFBD><C6B6><EFBFBD>ȡaligner <20>ȴ<EFBFBD>λ
if (RobotCmd.m_FromPos == _WaferPos_Aligner && RobotCmd.m_ToPos == _WaferPos_Arm2)
{
RobotCmd.m_SendCmdStr = "$1G287";
}
//Arm2<6D>ƶ<EFBFBD><C6B6><EFBFBD>ȡpreheater <20>ȴ<EFBFBD>λ
if (RobotCmd.m_FromPos == _WaferPos_HotPlate && RobotCmd.m_ToPos == _WaferPos_Arm2)
{
RobotCmd.m_SendCmdStr = "$1G289";
}
}
//Arm1<6D><31>Arm2<6D>ϲ<EFBFBD>λ<EFBFBD><CEBB>
else if (RobotCmd.m_RobotCmdType == _RobotCmd_Arm1Arm2MergePos)
{
RobotCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitCmdEnd;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
RobotCmd.m_SendCmdStr = "$1G295";
RobotCmd.m_WaitCmdTime = 20;
}
}
eGlobalVariableType JELOperate::RobotJel_SendCmdToRobotExt(CRobotCmdInfo &RobotCmd)
{
std::string RetStr;
std::string SendCmd = RobotCmd.m_SendCmdStr;
//gLogMgr->WriteDebugLog("ROBOT SEND:" + SendCmd);
bool bOvertime = false;
std::string ErrMsg;
{
int len = SendCmd.length();
SendCmd += " ";//<2F><><EFBFBD><EFBFBD>2 <20>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CR><LF>
char *pStr = (char*)SendCmd.c_str();
pStr[len++] = 0x0d;//<CR>
pStr[len++] = 0x0a;//<LF>
char Buf[COM_BUF_LEN];
memset(Buf, 0, COM_BUF_LEN);
memcpy(Buf, pStr, len);
m_RobotComm.WriteBuf(Buf, len);
if (RobotCmd.m_RobotCmdSendType == _RobotCmdSendType_SendOnly)//ֻ<><D6BB><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
{
return _GlobalVar_NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (RobotCmd.m_RobotCmdSendType == _RobotCmdSendType_ImmediateReadFeedback)
{
m_armIsExistWafer = false;
Sleep(1000);
m_IsbJelCommRecv = false;//<2F><><EFBFBD><EFBFBD>
memset(Buf, 0, COM_BUF_LEN);
m_RobotComm.ReadBuf(Buf, COM_BUF_LEN);
std::string RetStr(Buf);
//>$10<31><30>ʾ<EFBFBD><CABE><EFBFBD>ϣ<EFBFBD>>$11<31><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
int findIndex = 0;
findIndex = RetStr.find(">$11");
findIndex >= 0 ? m_armIsExistWafer = true : m_armIsExistWafer = false;
if (RetStr.find(">") != -1)//<2F><><EFBFBD><EFBFBD>">"<22><>ʾִ<CABE><D6B4><EFBFBD><EFBFBD>
{
RobotCmd.m_RevStr = RetStr;
}
else
{
ErrMsg = "Read Feed back Err";
}
}
else//<2F>첽<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ȡ
{
int WaitDelay = RobotCmd.m_WaitCmdTime * 1000;//<2F>ܹ<EFBFBD><DCB9>ȴ<EFBFBD><C8B4><EFBFBD>ʱ<EFBFBD><CAB1>ms
int CheckDelay = 200;//ÿ<><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ʱ
int CurDelay = 0;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
bOvertime = false;
ErrMsg = "";
while (1)
{
if (m_IsbJelCommRecv)//<2F>յ<EFBFBD><D5B5>µ<EFBFBD><C2B5><EFBFBD>Ϣʱ<CFA2><CAB1>ȥ<EFBFBD><C8A5>ȡ
{
Sleep(CheckDelay);
m_IsbJelCommRecv = false;//<2F><><EFBFBD><EFBFBD>
memset(Buf, 0, COM_BUF_LEN);
m_RobotComm.ReadBuf(Buf, COM_BUF_LEN);
std::string RetStr(Buf);
if (RetStr.find(">") != -1)//<2F><><EFBFBD><EFBFBD>">"<22><>ʾִ<CABE><D6B4><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD>ͺ<EFBFBD>ֻ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><
if (RobotCmd.m_RobotCmdSendType == _RobotCmdSendType_WaitFeedback)
{
RobotCmd.m_RevStr = RetStr;
break;
}
}
//RobotCmd.m_RobotCmdSendType == _RobotCmdSendType_WaitCmdEnd
if (RetStr.find(RobotCmd.m_SendCmdStr) != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cmd<6D><64>ʾִ<CABE>н<EFBFBD><D0BD><EFBFBD>
{
//gLogMgr->WriteDebugLog("REV_STR END");
break;
}
else if (RetStr.find("ERROR") != -1)
{
//gLogMgr->WriteDebugLog("REV_STR ERROR");
ErrMsg = "<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
}
}
CurDelay += CheckDelay;
if (CurDelay > WaitDelay)
{
bOvertime = true;
break;
}
Sleep(CheckDelay);
}
}
}
if (bOvertime)//<2F><><EFBFBD>ⳬʱ
{
std::string AddInfo;
AddInfo = "Cmd Over Time:";
AddInfo += RobotCmd.m_SendCmdStr;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
RobotCmd.m_ErrStr = AddInfo;
return _GlobalVar_Alarm_Robot_CmdOverTime;
}
}
//ERR:code:Description
if (ErrMsg != "")//ִ<>д<EFBFBD><D0B4><EFBFBD>
{
std::string AddInfo = RobotCmd.m_SendCmdStr;
AddInfo += "Cmd Execute Error:";
AddInfo += ErrMsg;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
RobotCmd.m_ErrStr = AddInfo;
return _GlobalVar_Alarm_Robot_StateErr;
}
}
return _GlobalVar_NULL;
}
eGlobalVariableType JELOperate::CheckRobotErrState(CRobotCmdInfo &RobotCmd)
{
eGlobalVariableType AlarmType = _GlobalVar_NULL;
{
CRobotCmdInfo TempCmd;
TempCmd.m_SendCmdStr = "$1ERLG";//robot ״̬
TempCmd.m_RobotCmdSendType = _RobotCmdSendType_WaitFeedback;
AlarmType = RobotJel_SendCmdToRobotExt(TempCmd);
}
return _GlobalVar_NULL;
}
void JELOperate::OnRobotCommRecv()
{
m_IsbJelCommRecv = true;//<2F>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
}