LAPTOP-SNT8I5JK\Boounion
2024-11-18 86742865018ecaa76c099c1b79149b4517eec075
1.继续整合主框架;
已添加3个文件
已修改9个文件
444 ■■■■ 文件已修改
Document/Gand Bond Server-Connect Function Manual.docx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.vcxproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CBonder.cpp 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CPanelProject.cpp 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CPanelProject.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CProjectPageComponents.cpp 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CProjectPageComponents.h 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Common.h 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Model.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Resource.h 补丁 | 查看 | 原始文档 | blame | 历史
Document/Gand Bond Server-Connect Function Manual.docx
Binary files differ
SourceCode/Bond/BondEq/BondEq.cpp
@@ -152,6 +152,7 @@
int CBondEqApp::ExitInstance()
{
    m_model.term();
    BEQ_Term();
    RX_Term();
    MCL_Term();
SourceCode/Bond/BondEq/BondEq.rc
Binary files differ
SourceCode/Bond/BondEq/BondEq.vcxproj
@@ -207,6 +207,7 @@
    <ClInclude Include="Context.h" />
    <ClInclude Include="CPanel.h" />
    <ClInclude Include="CParam.h" />
    <ClInclude Include="CProjectPageComponents.h" />
    <ClInclude Include="CRemoteEqUnitView.h" />
    <ClInclude Include="CRemoteEqView.h" />
    <ClInclude Include="CHomeDialog.h" />
@@ -266,6 +267,7 @@
    <ClCompile Include="Context.cpp" />
    <ClCompile Include="CPanel.cpp" />
    <ClCompile Include="CParam.cpp" />
    <ClCompile Include="CProjectPageComponents.cpp" />
    <ClCompile Include="CRemoteEqUnitView.cpp" />
    <ClCompile Include="CRemoteEqView.cpp" />
    <ClCompile Include="CHomeDialog.cpp" />
SourceCode/Bond/BondEq/CBonder.cpp
@@ -126,20 +126,12 @@
{
    // æœºå™¨çŠ¶æ€
    CEQStateMonitor* pEQStateMonitor1 = new CEQStateMonitor();
    pEQStateMonitor1->setName("机器状态(A单元)");
    pEQStateMonitor1->setDescription("A单机器状态");
    pEQStateMonitor1->setName("机器状态");
    pEQStateMonitor1->setDescription("机器状态");
    pEQStateMonitor1->setIndex(0);
    pEQStateMonitor1->setBeginAddr(4463 - 4400);
    AddComponent(pEQStateMonitor1);
    pEQStateMonitor1->init();
    CEQStateMonitor* pEQStateMonitor2 = new CEQStateMonitor();
    pEQStateMonitor2->setName("机器状态(B单元)");
    pEQStateMonitor2->setDescription("B单机器状态");
    pEQStateMonitor2->setIndex(1);
    pEQStateMonitor2->setBeginAddr(4563 - 4500);
    AddComponent(pEQStateMonitor2);
    pEQStateMonitor2->init();
    // åˆå§‹åŒ–各种组件
@@ -195,69 +187,35 @@
    CDataMonitor1* pDataMonitor1 = new CDataMonitor1();
    pDataMonitor1->setName("数据监控(A单元)");
    pDataMonitor1->setDescription("A单元真空、压力和温度数据");
    pDataMonitor1->setName("数据监控");
    pDataMonitor1->setDescription("真空、压力和温度数据");
    pDataMonitor1->setIndex(0);
    pDataMonitor1->setResponseAddr(4425);
    pDataMonitor1->enableAutoSendData(bAutoSendData);
    AddComponent(pDataMonitor1);
    pDataMonitor1->init();
    
    CDataMonitor1* pDataMonitor2 = new CDataMonitor1();
    pDataMonitor2->setName("数据监控(B单元)");
    pDataMonitor2->setDescription("B单元真空、压力和温度数据");
    pDataMonitor2->setIndex(1);
    pDataMonitor2->setResponseAddr(4525);
    pDataMonitor2->enableAutoSendData(bAutoSendData);
    AddComponent(pDataMonitor2);
    pDataMonitor2->init();
    CString strAlarmFile;
    strAlarmFile.Format(_T("%s\\AlarmList.txt"), m_strWorkDir.c_str());
    CAlarmMonitor* pAlarmMonitor1 = new CAlarmMonitor();
    pAlarmMonitor1->setName("警告信息(A单元)");
    pAlarmMonitor1->setDescription("警告信息监控(A单元)");
    pAlarmMonitor1->setName("警告信息");
    pAlarmMonitor1->setDescription("警告信息监控");
    pAlarmMonitor1->setBeginAddr(4461 - 4400);
    pAlarmMonitor1->setIndex(0);
    pAlarmMonitor1->readAlarmListFromFile((LPTSTR)(LPCTSTR)strAlarmFile);
    AddComponent(pAlarmMonitor1);
    pAlarmMonitor1->init();
    CAlarmMonitor* pAlarmMonitor2 = new CAlarmMonitor();
    pAlarmMonitor2->setName("警告信息(B单元)");
    pAlarmMonitor2->setDescription("警告信息监控(B单元)");
    pAlarmMonitor2->setBeginAddr(4561 - 4500);
    pAlarmMonitor2->setIndex(1);
    pAlarmMonitor2->readAlarmListFromFile((LPTSTR)(LPCTSTR)strAlarmFile);
    AddComponent(pAlarmMonitor2);
    pAlarmMonitor2->init();
    // LoadMonitor
    CLoadMonitor* pLoadMonitor1 = new CLoadMonitor();
    pLoadMonitor1->setName("上下料(A单元)");
    pLoadMonitor1->setDescription("上下料信号监控(A单元)");
    pLoadMonitor1->setName("上下料");
    pLoadMonitor1->setDescription("上下料信号监控");
    pLoadMonitor1->setBeginAddr(4700);
    pLoadMonitor1->setIndex(0);
    AddComponent(pLoadMonitor1);
    pLoadMonitor1->init();
    CLoadMonitor* pLoadMonitor2 = new CLoadMonitor();
    pLoadMonitor2->setName("上下料(B单元)");
    pLoadMonitor2->setDescription("上下料信号监控(B单元)");
    pLoadMonitor2->setBeginAddr(4700);
    pLoadMonitor2->setIndex(1);
    AddComponent(pLoadMonitor2);
    pLoadMonitor2->init();
    CLoadMonitor* pLoadMonitor3 = new CLoadMonitor();
    pLoadMonitor3->setName("上下料(冷却箱)");
    pLoadMonitor3->setDescription("上下料信号监控(冷却箱)");
    pLoadMonitor3->setBeginAddr(4700);
    pLoadMonitor3->setIndex(2);
    AddComponent(pLoadMonitor3);
    pLoadMonitor3->init();
    // BEQ与EFEM通讯
@@ -292,10 +250,7 @@
    };
    m_pEquipment->setEquipmentListener(equListener);
    m_pEquipment->setVersion(m_strSoftRev.c_str());
    m_pEquipment->addUnit(UNITA, 5);
    m_pEquipment->addUnit(UNITB, 5);
    BEQ::IUnit* pUnitC = m_pEquipment->addUnit(UNITC, 1);
    pUnitC->setLayerCount(4);
    m_pEquipment->addUnit(UNIT1, 5);
    m_pEquipment->runOnServerMode(8192);
@@ -577,11 +532,7 @@
BEQ::IUnit* CBonder::getUnit(int index)
{
    if (index == 0)
        return m_pEquipment->getUnit(UNITA);
    if (index == 1)
        return m_pEquipment->getUnit(UNITB);
    if (index == 2)
        return m_pEquipment->getUnit(UNITC);
        return m_pEquipment->getUnit(UNIT1);
    return nullptr;
}
@@ -798,24 +749,14 @@
    }
    // å•å…ƒC为水冷塔,不需要写
    if (strcmp(szUnitName, UNITC) == 0) {
        return 0;
    }
    // å¦‚果是单元A或单元B, å†™ç‰©æ–™ID和配方ID到PLC
    CLoadMonitor* pLoadMonitor = nullptr;
    if (strcmp(szUnitName, UNITA) == 0) {
    if (strcmp(szUnitName, UNIT1) == 0) {
        pLoadMonitor = (CLoadMonitor*)GetComponent("上下料(A单元)");
        pLoadMonitor = (CLoadMonitor*)GetComponent("上下料");
        return pLoadMonitor->loadReady(pszMaterielId, pszRecipeId);
    }
    else if (strcmp(szUnitName, UNITB) == 0) {
        pLoadMonitor = (CLoadMonitor*)GetComponent("上下料(B单元)");
        return pLoadMonitor->loadReady(pszMaterielId, pszRecipeId);
    }
    return -2;
}
@@ -831,7 +772,7 @@
    if (!pPLC->isConnected()) {
        return -1;
    }
    if (layer <= 0 || layer > 4) {
    if (layer <= 0 || layer > 1) {
        return -2;
    }
@@ -874,36 +815,10 @@
    // Ð´
    int index, nFlagAddr;
    if (strcmp(szUnitName, UNITA) == 0) {
    if (strcmp(szUnitName, UNIT1) == 0) {
        index = 0;
        nFlagAddr = 4710;
        szBuffer[index * 2] |= 0x02;
    }
    else if (strcmp(szUnitName, UNITB) == 0) {
        index = 1;
        nFlagAddr = 4711;
        szBuffer[index * 2] |= 0x02;
    }
    else if (strcmp(szUnitName, UNITC) == 0) {
        index = 2;
        nFlagAddr = 4712;
        switch (layer)
        {
        case 1:
            szBuffer[index * 2] |= 0x01;
            break;
        case 2:
            szBuffer[index * 2] |= 0x02;
            break;
        case 3:
            szBuffer[index * 2] |= 0x04;
            break;
        case 4:
            szBuffer[index * 2] |= 0x08;
            break;
        default:
            break;
        }
    }
@@ -984,36 +899,10 @@
    // Ð´
    int index, nFlagAddr;
    if (strcmp(szUnitName, UNITA) == 0) {
    if (strcmp(szUnitName, UNIT1) == 0) {
        index = 0;
        nFlagAddr = 4710;
        szBuffer[index * 2 + 1] |= 0x02;
    }
    else if (strcmp(szUnitName, UNITB) == 0) {
        index = 1;
        nFlagAddr = 4711;
        szBuffer[index * 2 + 1] |= 0x02;
    }
    else if (strcmp(szUnitName, UNITC) == 0) {
        index = 2;
        nFlagAddr = 4712;
        switch (layer)
        {
        case 1:
            szBuffer[index * 2] |= 0x20;
            break;
        case 2:
            szBuffer[index * 2] |= 0x40;
            break;
        case 3:
            szBuffer[index * 2] |= 0x80;
            break;
        case 4:
            szBuffer[index * 2 + 1] |= 0x01;
            break;
        default:
            break;
        }
    }
SourceCode/Bond/BondEq/CPanelProject.cpp
@@ -19,6 +19,7 @@
    m_nPanelWidth = int((double)GetSystemMetrics(SM_CXSCREEN) * 0.25);
    m_pAccordionWnd = nullptr;
    m_pPageRemoteEqs = nullptr;
    m_pPageComponents = nullptr;
}
CPanelProject::~CPanelProject()
@@ -75,6 +76,10 @@
    m_pPageRemoteEqs->ShowWindow(SW_SHOW);
    m_pAccordionWnd->AddItem("远程设备", m_pPageRemoteEqs, 0, TRUE, TRUE);
    
    m_pPageComponents = new CProjectPageComponents();
    m_pPageComponents->Create(IDD_PROJECT_PAGE_COMPONENTS, GetDlgItem(IDC_ACCORDION_WND1));
    m_pPageComponents->ShowWindow(SW_SHOW);
    m_pAccordionWnd->AddItem("组件列表", m_pPageComponents, -1, TRUE, TRUE);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // å¼‚常: OCX å±žæ€§é¡µåº”返回 FALSE
@@ -110,6 +115,12 @@
        ::DeleteObject(m_hbrBkgnd);
    }
    if (m_pPageComponents != nullptr) {
        m_pPageComponents->DestroyWindow();
        delete m_pPageComponents;
        m_pPageComponents = nullptr;
    }
    if (m_pPageRemoteEqs != nullptr) {
        m_pPageRemoteEqs->DestroyWindow();
        delete m_pPageRemoteEqs;
SourceCode/Bond/BondEq/CPanelProject.h
@@ -1,6 +1,7 @@
#pragma once
#include "VerticalLine.h"
#include "CProjectPageRemoteEqs.h"
#include "CProjectPageComponents.h"
#include "AccordionWnd.h"
@@ -29,6 +30,7 @@
    int m_nPanelWidth;
    CAccordionWnd* m_pAccordionWnd;
    CProjectPageRemoteEqs* m_pPageRemoteEqs;
    CProjectPageComponents* m_pPageComponents;
// å¯¹è¯æ¡†æ•°æ®
SourceCode/Bond/BondEq/CProjectPageComponents.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,233 @@
// CProjectPageComponents.cpp: å®žçŽ°æ–‡ä»¶
//
#include "stdafx.h"
#include "BondEq.h"
#include "CProjectPageComponents.h"
#include "afxdialogex.h"
#include "Alarm.h"
// CProjectPageComponents å¯¹è¯æ¡†
IMPLEMENT_DYNAMIC(CProjectPageComponents, CDialogEx)
CProjectPageComponents::CProjectPageComponents(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_PROJECT_PAGE_COMPENTS, pParent)
{
    m_crBkgnd = PROPAGE_BACKGROUND_COLOR;
    m_hbrBkgnd = nullptr;
    m_pObserver = nullptr;
}
CProjectPageComponents::~CProjectPageComponents()
{
}
void CProjectPageComponents::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_TREE1, m_treeComponents);
}
BEGIN_MESSAGE_MAP(CProjectPageComponents, CDialogEx)
    ON_WM_CTLCOLOR()
    ON_WM_DESTROY()
    ON_WM_SIZE()
    ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CProjectPageComponents::OnTvnSelchangedTree1)
    ON_MESSAGE(ID_MSG_TREE_CLICK_ITEM, OnTreeClickItem)
END_MESSAGE_MAP()
// CEQPageComponents æ¶ˆæ¯å¤„理程序
void CProjectPageComponents::InitRxWindows()
{
    /* code */
    // è®¢é˜…数据
    IRxWindows* pRxWindows = RX_GetRxWindows();
    pRxWindows->enableLog(5);
    if (m_pObserver == NULL) {
        m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
            // onNext
            pAny->addRef();
            int code = pAny->getCode();
            if (RX_CODE_DATA1_MATERIAL_RECEIVED == code) {
                CComponent* pComponent;
                if (pAny->getPtrValue("ptr", (void*&)pComponent)) {
                    HTREEITEM hItem = getTreeItem(pComponent);
                    if (hItem != nullptr) {
                        m_treeComponents.ShowItemBadgeDotMode(hItem);
                    }
                }
            }
            else if(RX_CODE_DATA1_MATERIAL_REMOVEED == code) {
                CComponent* pComponent;
                if (pAny->getPtrValue("ptr", (void*&)pComponent)) {
                    HTREEITEM hItem = getTreeItem(pComponent);
                    if (hItem != nullptr) {
                        m_treeComponents.HideItemBadge(hItem);
                    }
                }
            }
            else if (RX_CODE_ALARM_EVENT == code) {
                CComponent* pComponent = nullptr;
                CAlarm* pAlarm = nullptr;
                pAny->getObject("obj", (IRxObject*&)pAlarm);
                pAny->getPtrValue("ptr", (void*&)pComponent);
                ASSERT(pComponent);
                ASSERT(pAlarm);
                HTREEITEM hItem = getTreeItem(pComponent);
                if (hItem != nullptr) {
                    if(pAlarm->getStatus() == 1)
                        m_treeComponents.ShowItemBadgeDotMode(hItem);
                    else if (pAlarm->getStatus() == 2)
                        m_treeComponents.HideItemBadge(hItem);
                }
            }
            else if (RX_CODE_PLC1_CONNECTTD == code) {
                CComponent* pComponent;
                if (pAny->getPtrValue("ptr", (void*&)pComponent)) {
                    HTREEITEM hItem = getTreeItem(pComponent);
                    if (hItem != nullptr) {
                        m_treeComponents.ShowItemBadgeDotMode(hItem);
                    }
                }
            }
            else if (RX_CODE_PLC1_DISCONNECTTD == code) {
                CComponent* pComponent;
                if (pAny->getPtrValue("ptr", (void*&)pComponent)) {
                    HTREEITEM hItem = getTreeItem(pComponent);
                    if (hItem != nullptr) {
                        m_treeComponents.HideItemBadge(hItem);
                    }
                }
            }
            pAny->release();
        }, [&]() -> void {
            // onComplete
        }, [&](IThrowable* pThrowable) -> void {
            // onErrorm
            pThrowable->printf();
        });
        theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
            ->subscribe(m_pObserver);
    }
}
BOOL CProjectPageComponents::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    // ç»„件列表
    m_treeComponents.SetBkColor(PROPAGE_BACKGROUND_COLOR);
    m_treeComponents.SetItemHeight(50);
    const std::vector<CComponent*>& components = theApp.m_model.getBonder().getComponents();
    for (auto item : components) {
        HTREEITEM hItemComponent = m_treeComponents.InsertItem(item->getName().c_str());
        m_treeComponents.SetItemData(hItemComponent, (DWORD_PTR)item);
        if (item->getClassName().compare("CAlarmMonitor") == 0) {
            m_treeComponents.SetItemBadge(hItemComponent, TREE_BADGE2_BACKGROUND, TREE_BADGE2_FOREGROUND);
        }
        else {
            m_treeComponents.SetItemBadge(hItemComponent, TREE_BADGE_BACKGROUND, TREE_BADGE_FOREGROUND);
        }
    }
    InitRxWindows();
    return TRUE;  // return TRUE unless you set the focus to a control
                  // å¼‚常: OCX å±žæ€§é¡µåº”返回 FALSE
}
HBRUSH CProjectPageComponents::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    if (nCtlColor == CTLCOLOR_STATIC) {
        pDC->SetBkColor(m_crBkgnd);
    }
    if (m_hbrBkgnd == nullptr) {
        m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
    }
    return m_hbrBkgnd;
}
void CProjectPageComponents::OnDestroy()
{
    CDialogEx::OnDestroy();
    if (m_hbrBkgnd != nullptr) {
        ::DeleteObject(m_hbrBkgnd);
    }
    ASSERT(m_pObserver != NULL);
    m_pObserver->unsubscribe();
    m_pObserver = NULL;
}
void CProjectPageComponents::OnSize(UINT nType, int cx, int cy)
{
    CDialogEx::OnSize(nType, cx, cy);
    if (GetDlgItem(IDC_TREE1) == nullptr) return;
    CRect rcClient;
    CWnd* pItem;
    GetClientRect(&rcClient);
    pItem = GetDlgItem(IDC_TREE1);
    pItem->MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24);
}
void CProjectPageComponents::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    HTREEITEM hItem = pNMTreeView->itemNew.hItem;
    ASSERT(hItem);
    CComponent* pComponent = (CComponent*)m_treeComponents.GetItemData(hItem);
    ASSERT(pComponent);
    // theApp.m_model.notifyPtr(RX_CODE_SELECT_COMPONENT, pComponent);
    *pResult = 0;
}
LRESULT CProjectPageComponents::OnTreeClickItem(WPARAM wParam, LPARAM lParam)
{
    HTREEITEM hItem = (HTREEITEM)wParam;
    ASSERT(hItem);
    CComponent* pComponent = (CComponent*)m_treeComponents.GetItemData(hItem);
    ASSERT(pComponent);
    theApp.m_model.notifyPtr(RX_CODE_SELECT_COMPONENT, pComponent);
    return 0;
}
HTREEITEM CProjectPageComponents::getTreeItem(CComponent* pComponent)
{
    HTREEITEM hItem = m_treeComponents.GetChildItem(nullptr);
    while (hItem != nullptr) {
        CComponent* p = (CComponent*)m_treeComponents.GetItemData(hItem);
        if (p == pComponent) {
            return hItem;
        }
        hItem = m_treeComponents.GetNextSiblingItem(hItem);
    }
    return nullptr;
}
SourceCode/Bond/BondEq/CProjectPageComponents.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
#pragma once
#include "ApredTreeCtrl.h"
// CEQPageComponents å¯¹è¯æ¡†
class CProjectPageComponents : public CDialogEx
{
    DECLARE_DYNAMIC(CProjectPageComponents)
public:
    CProjectPageComponents(CWnd* pParent = nullptr);   // æ ‡å‡†æž„造函数
    virtual ~CProjectPageComponents();
private:
    void InitRxWindows();
    HTREEITEM getTreeItem(CComponent* pComponent);
private:
    COLORREF m_crBkgnd;
    HBRUSH m_hbrBkgnd;
    CApredTreeCtrl m_treeComponents;
    IObserver* m_pObserver;
// å¯¹è¯æ¡†æ•°æ®
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_EQPAGE_COMPONENTS };
#endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV æ”¯æŒ
    DECLARE_MESSAGE_MAP()
public:
    virtual BOOL OnInitDialog();
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    afx_msg void OnDestroy();
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg LRESULT OnTreeClickItem(WPARAM wParam, LPARAM lParam);
};
SourceCode/Bond/BondEq/Common.h
@@ -4,9 +4,7 @@
#define MC_TIME_SEPAR                1000
#define UNITA            _T("UNITA")
#define UNITB            _T("UNITB")
#define UNITC            _T("C")
#define UNIT1            _T("UNIT1")
/* Context Ret code */
@@ -32,7 +30,8 @@
#define RX_CODE_ALARM_EVENT                1012
#define RX_CODE_EQSTATE_EVENT            1013
#define RX_CODE_EFEM_STATUS_CHANGED        1014
#define RX_CODE_EQ_STATE_CHANGED    1015
#define RX_CODE_EQ_STATE_CHANGED        1015
#define RX_CODE_SELECT_COMPONENT        1016
/* å¹¿æ’­ä»£ç  */
#define BC_CODE_DATA1_MATERIAL_RECEIVED    5000
SourceCode/Bond/BondEq/Model.cpp
@@ -177,6 +177,10 @@
int CModel::term()
{
    m_bonder.save();
    m_bonder.term();
    m_sqlite.term();
    CLog::GetLog()->SetOnLogCallback(nullptr);
    return 0;
}
SourceCode/Bond/BondEq/Resource.h
Binary files differ