| | |
| | | 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(); |
| | | } |
| | | |
| | | index += 0x40 * 2; |
| | | 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]) { |
| | | onReceiveAble(); |
| | | } |
| | | |
| | | // 其它信号及响应 |
| | |
| | | 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 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; |
| | | } |
| | |
| | | } |
| | | |
| | | CSlot* CEquipment::getAvailableSlotForGlass(MaterialsType type) |
| | | { |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | 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; |
| | | if (type == MaterialsType::G2 && slotType == MaterialsType::G1) continue; |
| | | |
| | | return &m_slot[i]; |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | CSlot* CEquipment::getAvailableSlotForGlassExcludeSignal(MaterialsType type) |
| | | { |
| | | 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; |
| | | 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; |
| | |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | ASSERT(pJobDataS); |
| | | if (!compareJobData(pJobDataB, pJobDataS)) { |
| | | LOGE("<CFliper-%s>onPreFetchedOutJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(), |
| | | LOGE("<CEquipemnt-%s>onPreFetchedOutJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo(), |
| | | pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo()); |
| | | return FALSE; |
| | |
| | | |
| | | // 如果没有可用位置,报错 |
| | | Lock(); |
| | | CSlot* pSlot = getAvailableSlotForGlass((MaterialsType)pJobDataS->getMaterialsType()); |
| | | CSlot* pSlot = getAvailableSlotForGlassExcludeSignal((MaterialsType)pJobDataS->getMaterialsType()); |
| | | if (pSlot == nullptr) { |
| | | Unlock(); |
| | | LOGE("<CFliper-%s>onPreFetchedOutJob,找不到匹配的Slot,不能进料,请注意风险!", m_strName.c_str()); |
| | | LOGE("<CEquipemnt-%s>onPreFetchedOutJob,找不到匹配的Slot,不能进料,请注意风险!", m_strName.c_str()); |
| | | return FALSE; |
| | | } |
| | | Unlock(); |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::onReceiveAble() |
| | | { |
| | | LOGI("<CEquipment-%s>onReceiveAble.", 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" |
| | | ); |
| | | } |
| | | } |
| | | } |