| | |
| | | m_bLocalAlarm = FALSE; |
| | | m_bAutoRecipeChange = FALSE; |
| | | m_bVCREnable[0] = FALSE; |
| | | memset(m_bLinkSignal, 0, sizeof(m_bLinkSignal)); |
| | | memset(m_bLinkSignalToUpstream, 0, sizeof(m_bLinkSignalToUpstream)); |
| | | memset(m_bLinkSignalToDownstream, 0, sizeof(m_bLinkSignalToDownstream)); |
| | | m_pCclink = nullptr; |
| | | m_nBaseAlarmId = 0; |
| | | m_pArm = nullptr; |
| | |
| | | BOOL bFlag; |
| | | int index = 0; |
| | | for (int i = 0; i < 8; i++) { |
| | | m_bLinkSignal[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0); |
| | | m_bLinkSignal[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1); |
| | | m_bLinkSignal[i][SIGNAL_INTERLOCK] = isBitOn(pszData, size, index + 2); |
| | | m_bLinkSignal[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3); |
| | | m_bLinkSignalToUpstream[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0); |
| | | m_bLinkSignalToUpstream[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1); |
| | | m_bLinkSignalToUpstream[i][SIGNAL_INTERLOCK] = isBitOn(pszData, size, index + 2); |
| | | m_bLinkSignalToUpstream[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3); |
| | | index += 0x40; |
| | | } |
| | | if(m_bLinkSignal[0][SIGNAL_SEND_ABLE]) { |
| | | if(m_bLinkSignalToUpstream[0][SIGNAL_SEND_ABLE]) { |
| | | onSendAble(); |
| | | } |
| | | |
| | | for (int i = 0; i < 8; i++) { |
| | | m_bLinkSignalToDownstream[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0); |
| | | m_bLinkSignalToDownstream[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1); |
| | | m_bLinkSignalToDownstream[i][SIGNAL_INTERLOCK] = isBitOn(pszData, size, index + 2); |
| | | m_bLinkSignalToDownstream[i][SIGNAL_RECEIVE_ABLE] = isBitOn(pszData, size, index + 3); |
| | | index += 0x40; |
| | | } |
| | | if (m_bLinkSignalToDownstream[0][SIGNAL_RECEIVE_ABLE]) { |
| | | onSendAble(); |
| | | } |
| | | |
| | |
| | | |
| | | // robot cmd reply |
| | | CHECK_WRITE_STEP_SIGNAL(STEP_ID_ROBOT_CMD_REPLY, pszData, size); |
| | | |
| | | |
| | | // Indexer Operation Mode Change |
| | | CHECK_WRITE_STEP_SIGNAL(STEP_ID_IN_OP_CMD_REPLY, pszData, size); |
| | | |
| | | // Panel Data Report |
| | | CHECK_WRITE_STEP_SIGNAL(STEP_ID_PANEL_DATA_REPORT, pszData, size); |
| | | |
| | | // Panel Data Request |
| | | CHECK_WRITE_STEP_SIGNAL(STEP_ID_PANEL_DATA_REQUEST, pszData, size); |
| | | |
| | | // Job Data Request |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_JOB_DATA_REQUEST, pszData, size); |
| | | } |
| | | |
| | | BOOL CEquipment::isBitOn(const char* pszData, size_t size, int index) |
| | |
| | | return m_bVCREnable[index]; |
| | | } |
| | | |
| | | BOOL CEquipment::isLinkSignalOn(unsigned int path, unsigned int signal) |
| | | BOOL CEquipment::isLinkSignalUpstreamOn(unsigned int path, unsigned int signal) |
| | | { |
| | | if (path >= PATH_MAX) return FALSE; |
| | | if (signal >= SIGNAL_MAX) return FALSE; |
| | | return m_bLinkSignal[path][signal]; |
| | | return m_bLinkSignalToUpstream[path][signal]; |
| | | } |
| | | |
| | | void CEquipment::setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn) |
| | | BOOL CEquipment::isLinkSignalDownstreamOn(unsigned int path, unsigned int signal) |
| | | { |
| | | if (path >= PATH_MAX) return FALSE; |
| | | if (signal >= SIGNAL_MAX) return FALSE; |
| | | return m_bLinkSignalToDownstream[path][signal]; |
| | | } |
| | | |
| | | void CEquipment::setLinkSignalUpstream(unsigned int path, unsigned int signal, BOOL bOn) |
| | | { |
| | | if (path >= PATH_MAX) return; |
| | | if (signal >= SIGNAL_MAX) return; |
| | | m_bLinkSignal[path][signal] = bOn; |
| | | m_bLinkSignalToUpstream[path][signal] = bOn; |
| | | } |
| | | |
| | | void CEquipment::setLinkSignalBlock(unsigned int path, BOOL* pSignal) |
| | | void CEquipment::setLinkSignalUpstreamBlock(unsigned int path, BOOL* pSignal) |
| | | { |
| | | if (path >= PATH_MAX) return; |
| | | for (int i = 0; i < SIGNAL_MAX; i++) { |
| | | m_bLinkSignal[path][i] = pSignal[i]; |
| | | m_bLinkSignalToUpstream[path][i] = pSignal[i]; |
| | | } |
| | | } |
| | | |
| | | void CEquipment::setLinkSignalDownstream(unsigned int path, unsigned int signal, BOOL bOn) |
| | | { |
| | | if (path >= PATH_MAX) return; |
| | | if (signal >= SIGNAL_MAX) return; |
| | | m_bLinkSignalToDownstream[path][signal] = bOn; |
| | | } |
| | | |
| | | void CEquipment::setLinkSignalDownstreamBlock(unsigned int path, BOOL* pSignal) |
| | | { |
| | | if (path >= PATH_MAX) return; |
| | | for (int i = 0; i < SIGNAL_MAX; i++) { |
| | | m_bLinkSignalToDownstream[path][i] = pSignal[i]; |
| | | } |
| | | } |
| | | |
| | |
| | | std::vector<CPin*>& CEquipment::getOutputPins() |
| | | { |
| | | return m_outputPins; |
| | | } |
| | | |
| | | CRecipeList* CEquipment::getRecipeList(int unitNo) |
| | | { |
| | | return m_recipesManager.getRecipeList(unitNo); |
| | | } |
| | | |
| | | int CEquipment::recvIntent(CPin* pPin, CIntent* pIntent) |
| | |
| | | return pGlass; |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | CGlass* CEquipment::getGlassFromSlot(int slotNo) |
| | | { |
| | | CSlot* pSlot = nullptr; |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | if (!m_slot[i].isEnable()) continue; |
| | | if (m_slot[i].getNo() != slotNo) continue; |
| | | pSlot = &m_slot[i]; |
| | | break; |
| | | } |
| | | |
| | | if (pSlot != nullptr) { |
| | | return (CGlass*)pSlot->getContext(); |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | CGlass* CEquipment::getGlassWithCassette(int cassetteSequenceNo, int jobSequenceNo) |
| | | { |
| | | CSlot* pSlot = nullptr; |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | if (!m_slot[i].isEnable()) continue; |
| | | CGlass* pGlass = (CGlass*)m_slot[i].getContext(); |
| | | if (pGlass == nullptr) continue; |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | ASSERT(pJobDataS); |
| | | if (pJobDataS->getCassetteSequenceNo() == cassetteSequenceNo |
| | | && pJobDataS->getJobSequenceNo() == jobSequenceNo) { |
| | | return pGlass; |
| | | } |
| | | } |
| | | |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | CJobDataS* CEquipment::getJobDataSWithCassette(int cassetteSequenceNo, int jobSequenceNo) |
| | | { |
| | | CSlot* pSlot = nullptr; |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | if (!m_slot[i].isEnable()) continue; |
| | | CGlass* pGlass = (CGlass*)m_slot[i].getContext(); |
| | | if (pGlass == nullptr) continue; |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | ASSERT(pJobDataS); |
| | | if (pJobDataS->getCassetteSequenceNo() == cassetteSequenceNo |
| | | && pJobDataS->getJobSequenceNo() == jobSequenceNo) { |
| | | return pJobDataS; |
| | | } |
| | | } |
| | | |
| | | |
| | | return nullptr; |
| | | } |
| | |
| | | |
| | | unsigned short operationMode = (unsigned short)((unsigned short)mode + getIndexerOperationModeBaseValue()); |
| | | LOGI("<CEquipment-%s>准备设置indexerOperationMode<%d>", m_strName.c_str(), (int)mode); |
| | | pStep->writeShort(operationMode, [&, mode, onWritedRetBlock](int code) -> int { |
| | | pStep->writeShort(operationMode, [&, pStep, mode, onWritedRetBlock](int code) -> int { |
| | | int retCode = 0; |
| | | if (code == WOK) { |
| | | LOGI("<CEquipment-%s>设置indexerOperationMode成功.", m_strName.c_str()); |
| | | const char* pszRetData = nullptr; |
| | | pStep->getReturnData(pszRetData); |
| | | ASSERT(pszRetData); |
| | | retCode = (unsigned int)CToolUnits::toInt16(pszRetData); |
| | | retCode = (unsigned int)CToolUnits::toInt16(pszRetData); |
| | | LOGI("<CEquipment-%s>返回值: %d", m_strName.c_str(), retCode); |
| | | } |
| | | else { |
| | | LOGI("<CEquipment-%s>设置indexerOperationMode失败,code:%d", m_strName.c_str(), code); |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::masterRecipeListRequest(short unitNo) |
| | | int CEquipment::masterRecipeListRequest(short unitNo, ONSYNCINGSTATECHANGED block) |
| | | { |
| | | SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EQ_MASTER_RECIPE_LIST_REQ); |
| | | if (pStep == nullptr) { |
| | |
| | | } |
| | | |
| | | LOGI("<CEquipment-%s>正在请求单元<%d>主配方列表", m_strName.c_str(), unitNo); |
| | | m_recipesManager.setOnSyncingStateChanged(block); |
| | | if (m_recipesManager.syncing() != 0) { |
| | | return -2; |
| | | } |
| | |
| | | if (!m_slot[i].isEnable()) continue; |
| | | if (m_slot[i].isLock()) continue; |
| | | if (!m_slot[i].isEmpty()) continue; |
| | | int lsPath = m_slot[i].getLinkSignalPath(); |
| | | if (!m_bLinkSignalToDownstream[lsPath][SIGNAL_UPSTREAM_INLINE] |
| | | || m_bLinkSignalToDownstream[lsPath][SIGNAL_UPSTREAM_TROUBLE] |
| | | || !m_bLinkSignalToDownstream[lsPath][SIGNAL_INTERLOCK] |
| | | || !m_bLinkSignalToDownstream[lsPath][SIGNAL_RECEIVE_ABLE]) continue; |
| | | |
| | | MaterialsType slotType = m_slot[i].getType(); |
| | | if (type == MaterialsType::G1 && slotType == MaterialsType::G2) continue; |
| | |
| | | CGlass* pGlass = (CGlass*)m_slot[i].getContext(); |
| | | if (pGlass == nullptr) continue; |
| | | int lsPath = m_slot[i].getLinkSignalPath(); |
| | | if(!m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_INLINE] |
| | | || m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_TROUBLE] |
| | | || !m_bLinkSignal[lsPath][SIGNAL_INTERLOCK] |
| | | || !m_bLinkSignal[lsPath][SIGNAL_SEND_ABLE] ) continue; |
| | | if(!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE] |
| | | || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE] |
| | | || !m_bLinkSignalToUpstream[lsPath][SIGNAL_INTERLOCK] |
| | | || !m_bLinkSignalToUpstream[lsPath][SIGNAL_SEND_ABLE] ) continue; |
| | | |
| | | MaterialsType glassType = pGlass->getType(); |
| | | if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue; |
| | |
| | | CGlass* pGlass = (CGlass*)m_slot[i].getContext(); |
| | | if (pGlass == nullptr) continue; |
| | | int lsPath = m_slot[i].getLinkSignalPath(); |
| | | if (!m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_INLINE] |
| | | || m_bLinkSignal[lsPath][SIGNAL_UPSTREAM_TROUBLE] |
| | | || !m_bLinkSignal[lsPath][SIGNAL_INTERLOCK] |
| | | || !m_bLinkSignal[lsPath][SIGNAL_SEND_ABLE]) continue; |
| | | if (!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE] |
| | | || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE] |
| | | || !m_bLinkSignalToUpstream[lsPath][SIGNAL_INTERLOCK] |
| | | || !m_bLinkSignalToUpstream[lsPath][SIGNAL_SEND_ABLE]) continue; |
| | | |
| | | MaterialsType glassType = pGlass->getType(); |
| | | if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue; |
| | |
| | | { |
| | | if (index >= SLOT_MAX) return nullptr; |
| | | return &m_slot[index]; |
| | | } |
| | | |
| | | CGlass* CEquipment::getGlassFromSlot(int slotNo) |
| | | { |
| | | CSlot* pSlot = nullptr; |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | if (!m_slot[i].isEnable()) continue; |
| | | if (m_slot[i].getNo() != slotNo) continue; |
| | | pSlot = &m_slot[i]; |
| | | break; |
| | | } |
| | | |
| | | if (pSlot != nullptr) { |
| | | return (CGlass*)pSlot->getContext(); |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | CGlass* CEquipment::getAnyGlass() |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::decodePanelDataRequest(CStep* pStep, const char* pszData, size_t size) |
| | | int CEquipment::decodeJobDataRequest(CStep* pStep, const char* pszData, size_t size) |
| | | { |
| | | int index = 0; |
| | | short cassetteSequenceNo, jobSequenceNo; |
| | |
| | | index += sizeof(short); |
| | | memcpy(&jobSequenceNo, &pszData[index], sizeof(short)); |
| | | index += sizeof(short); |
| | | |
| | | |
| | | // efme, 获取数据后返回 |
| | | // Cassette Sequence No 1W |
| | | // Job Sequence No 1W |
| | | // Job DataS 256W |
| | | |
| | | cassetteSequenceNo = 4000; |
| | | jobSequenceNo = 1; |
| | | |
| | | |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::onRecieveAble() |
| | | { |
| | | LOGI("<CEquipment-%s>onRecieveAble.", m_strName.c_str()); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::onProcessStateChanged(PROCESS_STATE state) |
| | | { |
| | | return 0; |
| | |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | void CEquipment::printDebugString001() |
| | | { |
| | | for (int i = 0; i < 8; i++) { |
| | | LOGI("<CEquipment-%s>Link Signal to UP stream Path#%d, Signal:%s, %s, %s, %s", |
| | | m_strName.c_str(), i, |
| | | m_bLinkSignalToUpstream[i][SIGNAL_UPSTREAM_INLINE] ? "ON" : "OFF", |
| | | m_bLinkSignalToUpstream[i][SIGNAL_UPSTREAM_TROUBLE] ? "ON" : "OFF", |
| | | m_bLinkSignalToUpstream[i][SIGNAL_INTERLOCK] ? "ON" : "OFF", |
| | | m_bLinkSignalToUpstream[i][SIGNAL_SEND_ABLE] ? "ON" : "OFF" |
| | | ); |
| | | } |
| | | for (int i = 0; i < 8; i++) { |
| | | LOGI("<CEquipment-%s>Link Signal to Down stream Path#%d, Signal:%s, %s, %s, %s", |
| | | m_strName.c_str(), i, |
| | | m_bLinkSignalToDownstream[i][SIGNAL_UPSTREAM_INLINE] ? "ON" : "OFF", |
| | | m_bLinkSignalToDownstream[i][SIGNAL_UPSTREAM_TROUBLE] ? "ON" : "OFF", |
| | | m_bLinkSignalToDownstream[i][SIGNAL_INTERLOCK] ? "ON" : "OFF", |
| | | m_bLinkSignalToDownstream[i][SIGNAL_SEND_ABLE] ? "ON" : "OFF" |
| | | ); |
| | | } |
| | | } |
| | | } |