LAPTOP-SNT8I5JK\Boounion
2025-03-21 4eaefee05c987e352dd6d761e601aa450f7f92b4
1.添加其它机器并连接,显示连接图;
已修改12个文件
241 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CAligner.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CBakeCooling.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CFliper.cpp 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CLoadPort.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGraph2.cpp 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGraph2.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CVacuumBake.cpp 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Common.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/EqsGraphWnd.cpp 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/EqsGraphWnd.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CAligner.cpp
@@ -33,6 +33,10 @@
    {
        // 加入Pin初始化代码
        LOGI("<CAligner>initPins");
        addPin(SERVO::PinType::INPUT, _T("In1"));
        addPin(SERVO::PinType::INPUT, _T("In2"));
        addPin(SERVO::PinType::OUTPUT, _T("Out1"));
        addPin(SERVO::PinType::OUTPUT, _T("Out2"));
    }
    void CAligner::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/CBakeCooling.cpp
@@ -33,6 +33,10 @@
    {
        // 加入Pin初始化代码
        LOGI("<CBakeCooling>initPins");
        addPin(SERVO::PinType::INPUT, _T("In1"));
        addPin(SERVO::PinType::INPUT, _T("In2"));
        addPin(SERVO::PinType::OUTPUT, _T("Out1"));
        addPin(SERVO::PinType::OUTPUT, _T("Out2"));
    }
    void CBakeCooling::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/CFliper.cpp
@@ -33,6 +33,9 @@
    {
        // 加入Pin初始化代码
        LOGI("<CFliper>initPins");
        addPin(SERVO::PinType::INPUT, _T("In1"));
        addPin(SERVO::PinType::INPUT, _T("In2"));
        addPin(SERVO::PinType::OUTPUT, _T("Out"));
    }
    void CFliper::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -35,7 +35,8 @@
        // 加入Pin初始化代码
        LOGI("<CLoadPort>initPins");
        addPin(SERVO::PinType::INPUT, _T("In"));
        addPin(SERVO::PinType::OUTPUT, _T("Out"));
        addPin(SERVO::PinType::OUTPUT, _T("Out1"));
        addPin(SERVO::PinType::OUTPUT, _T("Out2"));
    }
    void CLoadPort::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/CMaster.cpp
@@ -76,9 +76,13 @@
        addLoadPort(1, listener);
        addLoadPort(2, listener);
        addLoadPort(3, listener);
        addFliper(listener);
        addVacuumBake(listener);
        addAligner(listener);
        addEFEM(listener);
        addBonder(0, listener);
        addBonder(1, listener);
        addBakeCooling(listener);
        connectEquipments();
@@ -155,6 +159,57 @@
        LOGE("已添加“%s”.", pEquipment->getName().c_str());
        return 0;
    }
    int CMaster::addFliper(StepListener& listener)
    {
        CFliper* pEquipment = new CFliper();
        pEquipment->setID(EQ_ID_FLIPER);
        pEquipment->setBaseAlarmId(BASE_ALARM_EFEM);
        pEquipment->setName("Fliper");
        pEquipment->setDescription("Fliper.");
        pEquipment->setReadBitBlock(0x4000, 0x45ff);
        pEquipment->setStation(0, 255);
        addToEquipmentList(pEquipment);
        pEquipment->init();
        LOGE("已添加“Fliper”.");
        return 0;
    }
    int CMaster::addVacuumBake(StepListener& listener)
    {
        CVacuumBake* pEquipment = new CVacuumBake();
        pEquipment->setID(EQ_ID_VACUUMBAKE);
        pEquipment->setBaseAlarmId(BASE_ALARM_EFEM);
        pEquipment->setName("VacuumBake");
        pEquipment->setDescription("VacuumBake.");
        pEquipment->setReadBitBlock(0x4000, 0x45ff);
        pEquipment->setStation(0, 255);
        addToEquipmentList(pEquipment);
        pEquipment->init();
        LOGE("已添加“VacuumBake”.");
        return 0;
    }
    int CMaster::addAligner(StepListener& listener)
    {
        CAligner* pEquipment = new CAligner();
        pEquipment->setID(EQ_ID_ALIGNER);
        pEquipment->setBaseAlarmId(BASE_ALARM_EFEM);
        pEquipment->setName("Aligner");
        pEquipment->setDescription("Aligner.");
        pEquipment->setReadBitBlock(0x4000, 0x45ff);
        pEquipment->setStation(0, 255);
        addToEquipmentList(pEquipment);
        pEquipment->init();
        LOGE("已添加“Aligner”.");
        return 0;
    }
@@ -474,6 +529,23 @@
        return 0;
    }
    int CMaster::addBakeCooling(StepListener& listener)
    {
        CBakeCooling* pEquipment = new CBakeCooling();
        pEquipment->setID(EQ_ID_BAKE_COOLING);
        pEquipment->setBaseAlarmId(BASE_ALARM_EFEM);
        pEquipment->setName("BakeCooling");
        pEquipment->setDescription("BakeCooling.");
        pEquipment->setReadBitBlock(0x4000, 0x45ff);
        pEquipment->setStation(0, 255);
        addToEquipmentList(pEquipment);
        pEquipment->init();
        LOGE("已添加“Aligner”.");
        return 0;
    }
    void CMaster::onTimer(UINT nTimerid)
    {
        for (auto item : m_listEquipment) {
@@ -501,15 +573,74 @@
    void CMaster::connectEquipments()
    {
        int nRet;
        CLoadPort* pLoadPort1 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT1);
        CLoadPort* pLoadPort2 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT2);
        CLoadPort* pLoadPort3 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT3);
        CLoadPort* pLoadPort4 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT4);
        CFliper* pFliper = (CFliper*)getEquipment(EQ_ID_FLIPER);
        CVacuumBake* pVacuumBake = (CVacuumBake*)getEquipment(EQ_ID_VACUUMBAKE);
        CAligner* pAligner = (CAligner*)getEquipment(EQ_ID_ALIGNER);
        CBonder* pBonder1 = (CBonder*)getEquipment(EQ_ID_Bonder1);
        CBonder* pBonder2 = (CBonder*)getEquipment(EQ_ID_Bonder2);
        CBakeCooling* pBakeCooling = (CBakeCooling*)getEquipment(EQ_ID_BAKE_COOLING);
        int nRet = pLoadPort1->getPin("Out")->connectPin(pBonder1->getPin("In"));
        nRet = pLoadPort1->getPin("Out1")->connectPin(pFliper->getPin("In1"));
        if (nRet < 0) {
            AfxMessageBox("连接失败");
            LOGE("连接LoadPort1-Fliper失败");
        }
        else {
            // AfxMessageBox("连接成功");
        nRet = pLoadPort2->getPin("Out1")->connectPin(pFliper->getPin("In2"));
        if (nRet < 0) {
            LOGE("连接LoadPort1-Fliper失败");
        }
        nRet = pLoadPort1->getPin("Out2")->connectPin(pVacuumBake->getPin("In1"));
        if (nRet < 0) {
            LOGE("连接LoadPort1-VacuumBake失败");
        }
        nRet = pLoadPort2->getPin("Out2")->connectPin(pVacuumBake->getPin("In2"));
        if (nRet < 0) {
            LOGE("连接LoadPort1-VacuumBake失败");
        }
        nRet = pFliper->getPin("Out")->connectPin(pAligner->getPin("In1"));
        if (nRet < 0) {
            LOGE("连接Fliper-Aligner失败");
        }
        nRet = pVacuumBake->getPin("Out")->connectPin(pAligner->getPin("In2"));
        if (nRet < 0) {
            LOGE("连接VacuumBake-Aligner失败");
        }
        nRet = pAligner->getPin("Out1")->connectPin(pBonder1->getPin("In"));
        if (nRet < 0) {
            LOGE("连接Aligner-Bondere1失败");
        }
        nRet = pAligner->getPin("Out2")->connectPin(pBonder2->getPin("In"));
        if (nRet < 0) {
            LOGE("连接Aligner-Bondere2失败");
        }
        nRet = pBonder1->getPin("Out")->connectPin(pBakeCooling->getPin("In1"));
        if (nRet < 0) {
            LOGE("连接Bonder1-BakeCooling失败");
        }
        nRet = pBonder2->getPin("Out")->connectPin(pBakeCooling->getPin("In2"));
        if (nRet < 0) {
            LOGE("连接Bonder2-BakeCooling失败");
        }
        nRet = pBakeCooling->getPin("Out1")->connectPin(pLoadPort3->getPin("In"));
        if (nRet < 0) {
            LOGE("连接BakeCooling-LoadPort3失败");
        }
        nRet = pBakeCooling->getPin("Out2")->connectPin(pLoadPort4->getPin("In"));
        if (nRet < 0) {
            LOGE("连接BakeCooling-LoadPort4失败");
        }
    }
}
SourceCode/Bond/Servo/CMaster.h
@@ -4,6 +4,10 @@
#include "CEFEM.h"
#include "CBonder.h"
#include "CLoadPort.h"
#include "CFliper.h"
#include "CAligner.h"
#include "CVacuumBake.h"
#include "CBakeCooling.h"
#include "CCLinkIEControl.h"
@@ -35,8 +39,12 @@
    private:
        int addToEquipmentList(CEquipment* pEquipment);
        int addLoadPort(int index, StepListener& listener);
        int addFliper(StepListener& listener);
        int addVacuumBake(StepListener& listener);
        int addAligner(StepListener& listener);
        int addEFEM(StepListener& listener);
        int addBonder(int index, StepListener& listener);
        int addBakeCooling(StepListener& listener);
        void connectEquipments();
SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -133,6 +133,7 @@
void CPageGraph2::OnDestroy()
{
    CDialogEx::OnDestroy();
    SaveEqsGraphData();
    if (m_hbrBkgnd != nullptr) {
        ::DeleteObject(m_hbrBkgnd);
@@ -154,8 +155,15 @@
#define OUTPIN        2
void CPageGraph2::AddEqToGraphWnd(SERVO::CEquipment* pEquipment)
{
    int x, y;
    GetItemDataFormIni(pEquipment->getName().c_str(), x, y);
    EQITEM* pItem = m_pEqsGraphWnd->AddItem(0, pEquipment->getName().c_str(), (DWORD_PTR)pEquipment);
    m_pEqsGraphWnd->SetItemType(pItem, ITEM_SMALL);
    if (x > 0 && y > 0) {
        m_pEqsGraphWnd->SetItemPos(pItem, x, y);
    }
    std::vector<SERVO::CPin*>& inPins = pEquipment->getInputPins();
    for (auto inPin : inPins) {
        m_pEqsGraphWnd->AddPin(pItem, INPIN, inPin->getName().c_str(), (DWORD_PTR)inPin);
@@ -172,10 +180,47 @@
    if (1 == nIDEvent) {
        KillTimer(1);
        std::list<SERVO::CEquipment*>& eqs = theApp.m_model.m_master.getEquipmentList();
        for (auto item : eqs) {
            AddEqToGraphWnd(item);
        for (auto eq : eqs) {
            AddEqToGraphWnd(eq);
        }
        for (auto eq : eqs) {
            auto& pins = eq->getOutputPins();
            for (auto pin : pins) {
                SERVO::CPin* pPin2 = pin->getConnectedPin();
                if (pPin2 != nullptr) {
                    m_pEqsGraphWnd->ConnectPin((DWORD_PTR)eq, (DWORD_PTR)pin, (DWORD_PTR)pPin2->getEquipment(), (DWORD_PTR)pPin2);
                }
            }
        }
    }
    CDialogEx::OnTimer(nIDEvent);
}
void CPageGraph2::SaveEqsGraphData()
{
    char szFilepath[MAX_PATH];
    CString strValue;
    sprintf_s(szFilepath, MAX_PATH, "%s\\EqsGraph.ini", (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
    std::list<SERVO::CEquipment*>& eqs = theApp.m_model.m_master.getEquipmentList();
    for (auto item : eqs) {
        EQITEM* pEqItem = m_pEqsGraphWnd->GetItem((DWORD_PTR)item);
        strValue.Format(_T("%d"), pEqItem->rect.left);
        WritePrivateProfileString(item->getName().c_str(), _T("Left"),
            (LPTSTR)(LPCTSTR)strValue, szFilepath);
        strValue.Format(_T("%d"), pEqItem->rect.top);
        WritePrivateProfileString(item->getName().c_str(), _T("Top"),
            (LPTSTR)(LPCTSTR)strValue, szFilepath);
    }
}
void CPageGraph2::GetItemDataFormIni(const char* pszItemName, int& left, int& top)
{
    char szFilepath[MAX_PATH];
    CString strValue;
    sprintf_s(szFilepath, MAX_PATH, "%s\\EqsGraph.ini", (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
    left = GetPrivateProfileInt(pszItemName, _T("Left"), 0, szFilepath);
    top = GetPrivateProfileInt(pszItemName, _T("Top"), 0, szFilepath);
}
SourceCode/Bond/Servo/CPageGraph2.h
@@ -15,6 +15,8 @@
private:
    void AddEqToGraphWnd(SERVO::CEquipment* pEquipment);
    void SaveEqsGraphData();
    void GetItemDataFormIni(const char* pszItemName, int& left, int& top);
private:
    CEqsGraphWnd* m_pEqsGraphWnd;
SourceCode/Bond/Servo/CVacuumBake.cpp
@@ -33,6 +33,9 @@
    {
        // 加入Pin初始化代码
        LOGI("<CVacuumBake>initPins");
        addPin(SERVO::PinType::INPUT, _T("In1"));
        addPin(SERVO::PinType::INPUT, _T("In2"));
        addPin(SERVO::PinType::OUTPUT, _T("Out"));
    }
    void CVacuumBake::onTimer(UINT nTimerid)
SourceCode/Bond/Servo/Common.h
@@ -57,6 +57,10 @@
#define EQ_ID_LOADPORT2        5
#define EQ_ID_LOADPORT3        6
#define EQ_ID_LOADPORT4        7
#define EQ_ID_FLIPER        8
#define EQ_ID_VACUUMBAKE    9
#define EQ_ID_ALIGNER        10
#define EQ_ID_BAKE_COOLING    11
/* step name */
SourceCode/Bond/Servo/EqsGraphWnd.cpp
@@ -649,6 +649,27 @@
    ::InvalidateRect(m_hWnd, &pItem->rect, TRUE);
}
void CEqsGraphWnd::SetItemPos(EQITEM* pItem, int x, int y)
{
    ASSERT(pItem);
    pItem->rect.left = x;
    pItem->rect.top = y;
    if (pItem->nShowType == ITEM_SMALL) {
        pItem->rect.right = pItem->rect.left + ITEM_CX_SMALL;
        pItem->rect.bottom = pItem->rect.top + ITEM_CY_SMALL;
    }
    else if (pItem->nShowType == ITEM_LARGE) {
        pItem->rect.right = pItem->rect.left + ITEM_CX_LARGE;
        pItem->rect.bottom = pItem->rect.top + ITEM_CY_LARGE;
    }
    else {
        pItem->rect.right = pItem->rect.left + ITEM_CX_NORMAL;
        pItem->rect.bottom = pItem->rect.top + ITEM_CY_NORMAL;
    }
    ::InvalidateRect(m_hWnd, &pItem->rect, TRUE);
}
PIN * CEqsGraphWnd::AddPin(EQITEM* pItem, int nType, CString strName, DWORD_PTR dwData)
{
    ASSERT(pItem);
SourceCode/Bond/Servo/EqsGraphWnd.h
@@ -139,6 +139,7 @@
    int ConnectPin(DWORD_PTR dwItem1Data, DWORD_PTR dwPin1Data, DWORD_PTR dwItem2Data, DWORD_PTR dwPin2Data);
    void SetItemText(EQITEM* pItem, CString strText);
    void SetItemType(EQITEM* pItem, int type);
    void SetItemPos(EQITEM* pItem, int x, int y);
    void FlashItem(EQITEM* pItem);
    void AnimationItem(EQITEM*pItem);