| SourceCode/Bond/Servo/CEFEM.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEFEM.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGraph2.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Common.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CEFEM.cpp
@@ -1,5 +1,6 @@ #include "stdafx.h" #include "CEFEM.h" #include "Log.h" #define ADD_EQ_CASSETTE_TRANSFER_STATE_STEP(name,ws,index,psd) { \ @@ -56,6 +57,73 @@ if (index < 2) { m_pArmTray[index] = pArmTray; } } int CEFEM::robotCmd(ROBOT_CMD_PARAM& robotCmdParam, ONWRITED onWritedBlock/* = nullptr*/) { SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EFEM_ROBOT_CMD); if (pStep == nullptr) { return -1; } LOGI("<CEFEM-%s>准备发送RobotCmd<%d>", m_strName.c_str(), (int)robotCmdParam.rcmd); if (onWritedBlock != nullptr) { pStep->writeDataEx((const char*)&robotCmdParam, ROBOT_CMD_PARAM_SIZE, onWritedBlock); } else { pStep->writeDataEx((const char*)&robotCmdParam, ROBOT_CMD_PARAM_SIZE, [&](int code) -> int { if (code == WOK) { LOGI("<CEFEM-%s>发送RobotCmd成功.", m_strName.c_str()); } else { LOGI("<CEFEM-%s>发送RobotCmd失败,code:%d", m_strName.c_str(), code); } return 0; }); } return 0; } int CEFEM::robotCmds(ROBOT_CMD_PARAM* robotCmdParam, unsigned int count, ONWRITED onWritedBlock/* = nullptr*/) { SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EFEM_ROBOT_CMD); if (pStep == nullptr) { return -1; } // 平铺到内存中,如果ROBOT_CMD_PARAM不是4的整数倍,只能一个一个复制 std::string strLog = "准备发送RobotCmds<"; char szBuffer[ROBOT_CMD_PARAM_SIZE * 4]; for (int i = 0; i < min(4, count); i++) { memcpy(&szBuffer[i * ROBOT_CMD_PARAM_SIZE], (robotCmdParam + i), ROBOT_CMD_PARAM_SIZE); strLog += std::to_string((robotCmdParam + i)->rcmd); strLog += ","; LOGI("%d", (robotCmdParam + 1)->rcmd); } strLog += ">."; LOGI("<CEFEM-%s>%s", m_strName.c_str(), strLog.c_str()); if (onWritedBlock != nullptr) { pStep->writeDataEx(szBuffer, ROBOT_CMD_PARAM_SIZE * min(4, count), onWritedBlock); } else { pStep->writeDataEx(szBuffer, ROBOT_CMD_PARAM_SIZE * min(4, count), [&](int code) -> int { if (code == WOK) { LOGI("<CEquipment-%s>发送RobotCmdS成功.", m_strName.c_str()); } else { LOGI("<CEquipment-%s>发送RobotCmds失败,code:%d", m_strName.c_str(), code); } return 0; }); } return 0; } void CEFEM::init() @@ -375,6 +443,17 @@ delete pStep; } } { // Robot CMD CEqWriteStep* pStep = new CEqWriteStep(); pStep->setName(STEP_EFEM_ROBOT_CMD); pStep->setWriteSignalDev(0x14D); pStep->setDataDev(0x90a); if (addStep(STEP_ID_ROBOT_CMD_REPLY, pStep) != 0) { delete pStep; } } } int CEFEM::onStepEvent(CStep* pStep, int code) SourceCode/Bond/Servo/CEFEM.h
@@ -37,6 +37,8 @@ void setAligner(CAligner* pAligner); void setFliper(CFliper* pFliper); void setArmTray(unsigned int index, CArmTray* pArmTray); int robotCmd(ROBOT_CMD_PARAM& robotCmdParam, ONWRITED onWritedBlock = nullptr); int robotCmds(ROBOT_CMD_PARAM* robotCmdParam, unsigned int count, ONWRITED onWritedBlock = nullptr); private: CLoadPort* m_pPort[4]; SourceCode/Bond/Servo/CEquipment.h
@@ -73,6 +73,32 @@ Local = 2 }; enum RCMD { Robot_home = 1, Transfer, Move, Get, Put, One_Action_Exchange, Two_Action_Exchange, Command_Clear, Batch_get, Batch_put }; // Robot cmd param #define ROBOT_CMD_PARAM_SIZE 16 /* 防止以后修改ROBOT_CMD_PARAM为不是4的整数倍 */ typedef struct _ROBOT_CMD_PARAM { short sequenceNo; short rcmd; short armNo; short getPosition; short putPosition; short getSlotNo; short putSlotNo; short subCmd; } ROBOT_CMD_PARAM; class CEquipment { public: SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -247,6 +247,35 @@ else if (nCmd == ID_EQSGRAPHITEM_TEST4) { SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData; /* 测试 RobotCMD */ if (pEquipment->getID() == EQ_ID_EFEM) { SERVO::CEFEM* pEFEM = (SERVO::CEFEM*)pEquipment; SERVO::ROBOT_CMD_PARAM cmds[4]; cmds[0].sequenceNo = 1; cmds[0].rcmd = (short)SERVO::RCMD::Move; cmds[0].armNo = 1; cmds[0].getPosition = 1; cmds[0].putPosition = 2; cmds[0].getSlotNo = 3; cmds[0].putSlotNo = 4; cmds[0].subCmd = 5; cmds[1].sequenceNo = 2; cmds[1].rcmd = (short)SERVO::RCMD::Transfer; cmds[1].armNo = 2; cmds[1].getPosition = 6; cmds[1].putPosition = 7; cmds[1].getSlotNo = 8; cmds[1].putSlotNo = 9; cmds[1].subCmd = 10; pEFEM->robotCmds(cmds, 2); } // 测试下发Cim Message /* if (pEquipment->getID() == EQ_ID_Bonder1 SourceCode/Bond/Servo/Common.h
@@ -208,6 +208,7 @@ #define STEP_EQ_STORED_JOB14 _T("EQStoredJobReport14") #define STEP_EQ_STORED_JOB15 _T("EQStoredJobReport15") #define STEP_EQ_DISPATCHINT_MODE_CHANGE _T("EQDispatchingModeChangeCommand") #define STEP_EFEM_ROBOT_CMD _T("EFEMRobotCmd") @@ -330,6 +331,7 @@ #define STEP_ID_PORT4_CASSETTIE_INUSE 0x653 #define STEP_ID_PORT4_CASSETTIE_UNLOAD_READY 0x65b #define STEP_ID_PORT4_CASSETTIE_BLOCKED 0x663 #define STEP_ID_ROBOT_CMD_REPLY 0x6b0 /* base alarm */