| SourceCode/Bond/Servo/CEquipment.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipmentPage2.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipmentPage2.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CLoadPort.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Context.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CEquipment.cpp
@@ -47,7 +47,6 @@ for (int i = 0; i < SLOT_MAX; i++) { CContext* pContext = m_slot[i].getContext(); if (pContext != nullptr) { pContext->release(); m_slot[i].setContext(nullptr); } } @@ -1237,6 +1236,21 @@ return TRUE; } int CEquipment::removeGlass(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 -1; pSlot->setContext(nullptr); return 0; } short CEquipment::decodeRecipeListReport(const char* pszData, size_t size) { return m_recipesManager.decodeRecipeListReport(pszData, size); SourceCode/Bond/Servo/CEquipment.h
@@ -185,6 +185,8 @@ // 指定槽位是否可以放置玻璃 BOOL canPlaceGlassInSlot(const short slotIndex); // 手动移除物料 int removeGlass(int slotNo); // 以下为从CC-Link读取到的Bit标志位检测函数 public: SourceCode/Bond/Servo/CEquipmentPage2.cpp
@@ -82,24 +82,7 @@ ASSERT(m_pEquipment); for (int i = 0; i < SLOT_MAX; i++) { SERVO::CSlot* pSlot = m_pEquipment->getSlot(i); if (pSlot != nullptr && pSlot->isEnable()) { int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), _T("")); m_listCtrl.SetItemData(index, (DWORD_PTR)pSlot); m_listCtrl.SetItemText(index, 1, std::to_string(pSlot->getNo()).c_str()); m_listCtrl.SetItemText(index, 2, pSlot->getName().c_str()); SERVO::CGlass* pGlass = (SERVO::CGlass*)pSlot->getContext(); if (pGlass != nullptr) { m_listCtrl.SetItemText(index, 3, pGlass->getID().c_str()); SERVO::CGlass* pBuddy = pGlass->getBuddy(); if (pBuddy != nullptr) { m_listCtrl.SetItemText(index, 4, pBuddy->getID().c_str()); } } } } UpdateSlots(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE @@ -173,16 +156,37 @@ void CEquipmentPage2::OnBnClickedButtonRemove() { /* int index = GetSelectedItemIndex(); if (index >= 0) { SERVO::CGlass* pGlass = (SERVO::CGlass*)m_listCtrl.GetItemData(index); ASSERT(m_pEquipment); BOOL bRet = m_pEquipment->removeClass(pGlass); if (bRet) { pGlass->release(); m_listCtrl.DeleteItem(index); SERVO::CSlot* pSlot = (SERVO::CSlot*)m_listCtrl.GetItemData(index); ASSERT(pSlot); int bRet = m_pEquipment->removeGlass(pSlot->getNo()); if (bRet == 0) { UpdateSlots(); } } */ } void CEquipmentPage2::UpdateSlots() { m_listCtrl.DeleteAllItems(); for (int i = 0; i < SLOT_MAX; i++) { SERVO::CSlot* pSlot = m_pEquipment->getSlot(i); if (pSlot != nullptr && pSlot->isEnable()) { int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), _T("")); m_listCtrl.SetItemData(index, (DWORD_PTR)pSlot); m_listCtrl.SetItemText(index, 1, std::to_string(pSlot->getNo()).c_str()); m_listCtrl.SetItemText(index, 2, pSlot->getName().c_str()); SERVO::CGlass* pGlass = (SERVO::CGlass*)pSlot->getContext(); if (pGlass != nullptr) { m_listCtrl.SetItemText(index, 3, pGlass->getID().c_str()); SERVO::CGlass* pBuddy = pGlass->getBuddy(); if (pBuddy != nullptr) { m_listCtrl.SetItemText(index, 4, pBuddy->getID().c_str()); } } } } } SourceCode/Bond/Servo/CEquipmentPage2.h
@@ -18,6 +18,7 @@ private: int GetSelectedItemIndex(); void UpdateSlots(); private: SERVO::CEquipment* m_pEquipment; SourceCode/Bond/Servo/CLoadPort.cpp
@@ -1103,7 +1103,6 @@ pGlass->setJobDataB(&jb); pGlass->setType(type); pGlass->setJobDataS(&js); pGlass->addRef(); m_slot[i].setContext(pGlass); } SourceCode/Bond/Servo/Context.cpp
@@ -1,7 +1,34 @@ #include "stdafx.h" #include "Context.h" #include <dbghelp.h> #pragma comment(lib, "dbghelp.lib") void PrintStackTrace() { void* stack[62]; // 最多抓62层 USHORT frames = CaptureStackBackTrace(0, 62, stack, NULL); HANDLE process = GetCurrentProcess(); SymInitialize(process, NULL, TRUE); for (USHORT i = 0; i < frames; ++i) { DWORD64 address = (DWORD64)(stack[i]); char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)]; PSYMBOL_INFO symbol = (PSYMBOL_INFO)buffer; symbol->SizeOfStruct = sizeof(SYMBOL_INFO); symbol->MaxNameLen = MAX_SYM_NAME; if (SymFromAddr(process, address, 0, symbol)) { TRACE(">>>> name:%s\n", symbol->Name); } else { TRACE(">>>> name:%s\n", "SymFromAddr failed"); } } SymCleanup(process); } CContext::CContext() { m_onReleaseCallback = nullptr;