| | |
| | | |
| | | CEquipment::CEquipment() : m_nID(0), m_strName(""), m_strDescription(""), m_station(0, 255) |
| | | { |
| | | m_listener = { nullptr, nullptr }; |
| | | m_listener = { nullptr, nullptr, nullptr }; |
| | | m_alive = {FALSE, 0, FALSE}; |
| | | m_bCimState = FALSE; |
| | | m_bUpstreamInline = FALSE; |
| | |
| | | |
| | | CEquipment::~CEquipment() |
| | | { |
| | | for (auto item : m_glassList) { |
| | | item->release(); |
| | | } |
| | | m_glassList.clear(); |
| | | |
| | | for (auto item : m_mapStep) { |
| | | delete item.second; |
| | | } |
| | |
| | | { |
| | | m_listener.onAlive = listener.onAlive; |
| | | m_listener.onCimStateChanged = listener.onCimStateChanged; |
| | | m_listener.onDataChanged = listener.onDataChanged; |
| | | } |
| | | |
| | | void CEquipment::setCcLink(CCCLinkIEControl* pCcLink) |
| | |
| | | std::to_string((int)item->getType()).c_str(), "")); |
| | | } |
| | | |
| | | for (auto item : m_panelList) { |
| | | attrubutes.addAttribute(new CAttribute("Panel", |
| | | for (auto item : m_glassList) { |
| | | attrubutes.addAttribute(new CAttribute("Glass", |
| | | item->getID().c_str(), "")); |
| | | } |
| | | } |
| | |
| | | |
| | | void CEquipment::serialize(CArchive& ar) |
| | | { |
| | | |
| | | if (ar.IsStoring()) { |
| | | Lock(); |
| | | int count = (int)m_glassList.size(); |
| | | ar << count; |
| | | for (auto item : m_glassList) { |
| | | item->serialize(ar); |
| | | } |
| | | Unlock(); |
| | | } |
| | | else { |
| | | Lock(); |
| | | int count; |
| | | ar >> count; |
| | | for (int i = 0; i < count; i++) { |
| | | CGlass* pGlass = new CGlass(); |
| | | pGlass->serialize(ar); |
| | | addGlassToList(pGlass); |
| | | } |
| | | Unlock(); |
| | | } |
| | | } |
| | | |
| | | void CEquipment::onReceiveLBData(const char* pszData, size_t size) |
| | |
| | | |
| | | // 物料 |
| | | if (code == FLOW_MOVE_MATERIAL) { |
| | | CPanel* pPanel = (CPanel*)pIntent->getContext(); |
| | | ASSERT(pPanel); |
| | | if (!glassWillArrive(pPanel)) { |
| | | CGlass* pGlass = (CGlass*)pIntent->getContext(); |
| | | ASSERT(pGlass); |
| | | if (!glassWillArrive(pGlass)) { |
| | | return FLOW_REJECT; |
| | | } |
| | | return glassArrived(pPanel); |
| | | return glassArrived(pGlass); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | // 模拟取出第一张Panel,传送到下一环节 |
| | | ULONGLONG time = CToolUnits::getTimestamp(); |
| | | Lock(); |
| | | CPanel* pContext = m_panelList.front(); |
| | | if (m_glassList.empty()) { |
| | | Unlock(); |
| | | return -2; |
| | | } |
| | | CGlass* pContext = m_glassList.front(); |
| | | pContext->addRef(); |
| | | |
| | | CIntent intent(FLOW_MOVE_MATERIAL, "", pContext); |
| | |
| | | LOGE("<CEquipment>对方拒绝接收Intent."); |
| | | } |
| | | else if (nRet == FLOW_ACCEPT) { |
| | | m_panelList.pop_front(); |
| | | CPath* pPath = pContext->getPathWithSiteID(m_nID); |
| | | if (pPath != nullptr) { |
| | | pPath->setOutTime(time); |
| | | } |
| | | m_glassList.pop_front(); |
| | | pContext->release(); // 添加到列队时addRef, 取出时release |
| | | if (m_listener.onDataChanged != nullptr) { |
| | | m_listener.onDataChanged(this, 0); |
| | | } |
| | | } |
| | | |
| | | pContext->release(); |
| | |
| | | return 0; |
| | | } |
| | | |
| | | BOOL CEquipment::glassWillArrive(CPanel* pPanel) |
| | | BOOL CEquipment::glassWillArrive(CGlass* pGlass) |
| | | { |
| | | return TRUE; |
| | | } |
| | | |
| | | int CEquipment::glassArrived(CPanel* pPanel) |
| | | int CEquipment::glassArrived(CGlass* pGlass) |
| | | { |
| | | Lock(); |
| | | pPanel->addRef(); |
| | | m_panelList.push_back(pPanel); |
| | | pGlass->addPath(m_nID); |
| | | pGlass->addRef(); |
| | | m_glassList.push_back(pGlass); |
| | | Unlock(); |
| | | |
| | | if (m_listener.onDataChanged != nullptr) { |
| | | m_listener.onDataChanged(this, 0); |
| | | } |
| | | |
| | | return FLOW_ACCEPT; |
| | | } |
| | | |
| | | void CEquipment::addPanelToList(CPanel* pPanel) |
| | | void CEquipment::addGlassToList(CGlass* pGlass) |
| | | { |
| | | ASSERT(pPanel); |
| | | ASSERT(pGlass); |
| | | |
| | | Lock(); |
| | | pPanel->addRef(); |
| | | m_panelList.push_back(pPanel); |
| | | pGlass->addRef(); |
| | | m_glassList.push_back(pGlass); |
| | | Unlock(); |
| | | |
| | | if (m_listener.onDataChanged != nullptr) { |
| | | m_listener.onDataChanged(this, 0); |
| | | } |
| | | } |
| | | |
| | | CGlass* CEquipment::getFrontGlass() |
| | | { |
| | | CGlass* pGlass = nullptr; |
| | | |
| | | Lock(); |
| | | if (!m_glassList.empty()) { |
| | | pGlass = m_glassList.front(); |
| | | } |
| | | Unlock(); |
| | | |
| | | return pGlass; |
| | | } |
| | | } |