LAPTOP-SNT8I5JK\Boounion
2024-12-09 a14c8cb51345fa3342addde7fa584465c4bc7083
1.加入GDI+
2.警告信息获取;
已添加1个文件
已修改15个文件
706 ■■■■■ 文件已修改
Document/ET6060AVA-LR-101规划表.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Alarm.cpp 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Alarm.h 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/AlarmMonitor.cpp 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/AlarmMonitor.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.cpp 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEqDlg.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CBonder.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CProjectPageComponents.cpp 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/CProjectPageRemoteEqs.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Common.h 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/InputDialog.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Model.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/AlarmList.txt 336 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/ET6060AVA-LR-101¹æ»®±í.xlsx
Binary files differ
SourceCode/Bond/BondEq/Alarm.cpp
@@ -5,16 +5,25 @@
CAlarm::CAlarm()
{
    m_nStatus = 0;
    m_nId = 0;
    m_nLevel = 0;
}
CAlarm::CAlarm(int unitId, int status, int id, int level, const char* pszText)
CAlarm::CAlarm(int id, int level, const char* pszText)
{
    m_nUnitId = unitId;
    m_nStatus = status;
    m_time = CToolUnits::getTimestamp();
    m_nStatus = 0;
    m_nId = id;
    m_nLevel = level;
    m_strText = pszText;
}
CAlarm::CAlarm(CAlarm* pScr)
{
    m_nStatus = 0;
    m_nId = pScr->m_nId;
    m_nLevel = pScr->m_nLevel;
    m_strText = pScr->m_strText;;
}
CAlarm::~CAlarm()
@@ -31,7 +40,8 @@
{
    std::string strText;
    strText += "CAlarm[";
    strText += ("time:" + CToolUnits::timeToString2(m_time) + ";");
    strText += ("m_timeOn:" + CToolUnits::timeToString2(m_timeOn) + ";");
    strText += ("m_timeOff:" + CToolUnits::timeToString2(m_timeOff) + ";");
    strText += ("m_nStatus:" + std::to_string(m_nStatus) + ";");
    strText += ("m_nId:" + std::to_string(m_nId) + ";");
    strText += ("m_nLevel:" + std::to_string(m_nLevel) + ";");
@@ -46,9 +56,30 @@
    return m_nUnitId;
}
ULONGLONG CAlarm::getTime()
void CAlarm::alarmOn()
{
    return m_time;
    if (m_nStatus == 0) {
        m_nStatus++;
        m_timeOn = CToolUnits::getTimestamp();
    }
}
void CAlarm::alarmOff()
{
    if (m_nStatus == 1) {
        m_nStatus++;
        m_timeOff = CToolUnits::getTimestamp();
    }
}
ULONGLONG CAlarm::getOnTime()
{
    return m_timeOn;
}
ULONGLONG CAlarm::getOffTime()
{
    return m_timeOff;
}
int CAlarm::getId()
@@ -76,7 +107,8 @@
    if (ar.IsStoring())
    {
        Lock();
        ar << m_time;
        ar << m_timeOn;
        ar << m_timeOff;
        ar << m_nStatus;
        ar << m_nId;
        ar << m_nLevel;
@@ -86,7 +118,8 @@
    else
    {
        Lock();
        ar >> m_time;
        ar >> m_timeOn;
        ar >> m_timeOff;
        ar >> m_nStatus;
        ar >> m_nId;
        ar >> m_nLevel;
SourceCode/Bond/BondEq/Alarm.h
@@ -6,14 +6,19 @@
{
public:
    CAlarm();
    CAlarm(int unitId, int status, int id, int level, const char* pszText);
    CAlarm(int id, int level, const char* pszText);
    CAlarm(int status, int id, int level, const char* pszText);
    CAlarm(CAlarm* pScr);
    ~CAlarm();
public:
    virtual std::string& getClassName();
    virtual std::string toString();
    int getUnitId();
    ULONGLONG getTime();
    void alarmOn();
    void alarmOff();
    ULONGLONG getOnTime();
    ULONGLONG getOffTime();
    int getId();
    int getLevel();
    int getStatus();
@@ -22,8 +27,9 @@
private:
    int m_nUnitId;
    ULONG64 m_time;
    int m_nStatus;
    ULONG64 m_timeOn;
    ULONG64 m_timeOff;
    int m_nStatus;                // 0:未知;1:ON;2:OFF;
    int m_nId;
    int m_nLevel;
    std::string m_strText;
SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -3,20 +3,33 @@
#include "Common.h"
#include "CBonder.h"
#include "Log.h"
#include "ToolUnits.h"
#define ALARM_MAX        200
CAlarmMonitor::CAlarmMonitor()
{
    m_nBeginAddr = 0;
    m_nLastId = 0;
    m_nLastLevel = 0;
    m_pRawData = new char[200];
    memset(m_pRawData, 0, 200);
}
CAlarmMonitor::~CAlarmMonitor()
{
    if (m_pRawData != nullptr) {
        delete[] m_pRawData;
        m_pRawData = nullptr;
    }
    for (auto item : m_mapAlarmTemplate) {
        delete item.second;
    }
    m_mapAlarmTemplate.clear();
    for (auto item : m_mapAlarming) {
        item.second->release();
    }
    m_mapAlarming.clear();
}
std::string& CAlarmMonitor::getClassName()
@@ -33,13 +46,59 @@
void CAlarmMonitor::onData(int id, const void* pData, int size)
{
    const char* pszData = (const char*)pData;
    if (m_nIndex + 1 == id) {
        int addr = m_nBeginAddr * 2;
        int alarmId = (pszData[addr] & 0xff) | (pszData[addr + 1] & 0xff) << 8;
        int alarmLevel = (pszData[addr + 2] & 0xff) | (pszData[addr + 3] & 0xff) << 8;
        if (m_nLastId != alarmId) {
            LOGI("<CAlarmMonitor-%d>AlarmId:%d, AlarmLevel:%d", m_nIndex, alarmId, alarmLevel);
            Alarm(alarmId, alarmLevel);
    if (MONITOR_ID_ALARM != id) {
        return;
    }
    // æ¯”较有没有变化
    if (compareData(m_pRawData, (const char*)pData, size)) {
        return;
    }
    memcpy(m_pRawData, (const char*)pData, size);
    // æ‰¾åˆ°On的报警并缓存
    std::vector<int> alarmIds;
    for (auto item : m_mapAlarmTemplate) {
        if (isAlarmOn(item.first)) {
            alarmIds.push_back(item.first);
        }
    }
    // å‘生警告:
    // æ¯”较新加的ON的警告
    // å³m_mapAlarming无,alarmIds有
    for (auto item : alarmIds) {
        if (m_mapAlarming.find(item) == m_mapAlarming.end()) {
            auto iter = m_mapAlarmTemplate.find(item);
            if (iter != m_mapAlarmTemplate.end()) {
                CAlarm* pAlarm = new CAlarm(iter->second);
                pAlarm->alarmOn();
                pAlarm->addRef();
                m_mapAlarming[item] = pAlarm;
                LOGE("发生了警告:%s", pAlarm->toString().c_str());
                // è­¦å‘Šä¿¡æ¯å‘出,以使界面显示和历史记录保存
                SendBroadcast(&CIntent(BC_CODE_ALARM_ON, "", pAlarm));
            }
        }
    }
    // å‰Šé™¤è­¦å‘Šï¼š
    // æ¯”较得到原来ON(m_mapAlarming有), çŽ°åœ¨OFF的警告(alarmIds无)
    for (auto iter = m_mapAlarming.begin(); iter != m_mapAlarming.end();/* iter++*/) {
        if (!findAlarm(alarmIds, iter->first)) {
            // æ¶ˆé™¤è­¦å‘Š, åŒæ—¶å°†ä¿¡æ¯å‘出,以使界面显示和历史记录保存
            iter->second->alarmOff();
            LOGE("消除了警告:%s", iter->second->toString().c_str());
            SendBroadcast(&CIntent(BC_CODE_ALARM_OFF, "", iter->second));
            iter->second->release();
            m_mapAlarming.erase(iter++);
        }
        else {
            iter++;
        }
    }
}
@@ -51,20 +110,29 @@
        return -1;
    }
    CString strLine, strNumber, strDescription;
    CString strLine, strNumber, strLevel, strDescription;
    int number, level;
    while (file.ReadString(strLine)) {
        int index = strLine.Find(",");
        if (index <= 0) continue;
        if (!AfxExtractSubString(strNumber, (LPCTSTR)strLine, 0, ','))
            continue;
        if (!AfxExtractSubString(strLevel, (LPCTSTR)strLine, 1, ','))
            continue;
        if (!AfxExtractSubString(strDescription, (LPCTSTR)strLine, 2, ','))
            continue;
        strNumber = strLine.Left(index).Trim();
        strDescription = strLine.Right(strLine.GetLength() - index - 1).Trim();
        try {
            number = std::stoi((LPTSTR)(LPCTSTR)strNumber);
            level = std::stoi((LPTSTR)(LPCTSTR)strLevel);
        }
        catch (...) {
            continue;
        }
        int number = atoi(strNumber);
        m_mapAlarmText[number] = std::string((LPTSTR)(LPCTSTR)strDescription);
        addAlarmTemplate(number, level, (LPTSTR)(LPCTSTR)strDescription);
    }
    file.Close();
    return (int)m_mapAlarmText.size();
    return (int)m_mapAlarmTemplate.size();
}
void CAlarmMonitor::init()
@@ -74,14 +142,7 @@
void CAlarmMonitor::term()
{
    for (auto item : m_alarms) {
        item->release();
    }
}
void CAlarmMonitor::setBeginAddr(int nAddr)
{
    m_nBeginAddr = nAddr;
}
void CAlarmMonitor::OnTimer(UINT nTimerid)
@@ -91,43 +152,14 @@
const char* CAlarmMonitor::getAlarmText(int nID)
{
    auto iter = m_mapAlarmText.find(nID);
    if (iter == m_mapAlarmText.end()) return "";
    return iter->second.c_str();
}
void CAlarmMonitor::Alarm(int id, int level)
{
    BEQ::IUnit* pUnit = m_pBonder->getUnit(m_nIndex);
    ASSERT(pUnit);
    if (id != 0) {
        // è­¦å‘Š
        pUnit->setAlarm(id, level, getAlarmText(id));
        LOGI("<CAlarmMonitor-%d>设备告警(%d, %d).", m_nIndex, id, level);
        CAlarm* pAlarm = new CAlarm(m_nIndex, 1, id, level, getAlarmText(id));
        AddAlarm(pAlarm);
        SendBroadcast(&CIntent(BC_CODE_ALARM_EVENT, "", pAlarm));
        m_nLastId = id;
        m_nLastLevel = level;
    }
    else {
        // è§£é™¤è­¦å‘Š
        pUnit->setAlarm(0, 0, "");
        LOGI("<CAlarmMonitor-%d>解除设备告警(%d, %d).", m_nIndex, m_nLastId, m_nLastLevel);
        CAlarm* pAlarm = new CAlarm(m_nIndex, 2, m_nLastId, m_nLastLevel, getAlarmText(m_nLastId));
        AddAlarm(pAlarm);
        SendBroadcast(&CIntent(BC_CODE_ALARM_EVENT, "", pAlarm));
        m_nLastId = 0;
        m_nLastLevel = 0;
    }
    auto iter = m_mapAlarmTemplate.find(nID);
    if (iter == m_mapAlarmTemplate.end()) return "";
    return iter->second->getText().c_str();
}
void CAlarmMonitor::Serialize(CArchive& ar)
{
    /*
    if (ar.IsStoring())
    {
        Lock();
@@ -153,24 +185,59 @@
        }
        Unlock();
    }
    */
}
void CAlarmMonitor::AddAlarm(CAlarm* pAlarm)
void CAlarmMonitor::getAlarmingMap(std::map<int, CAlarm*>& alarms)
{
    Lock();
    pAlarm->addRef();
    m_alarms.push_back(pAlarm);
    if (m_alarms.size() > ALARM_MAX) {
        CAlarm* pTemp = m_alarms.front();
        pTemp->release();
        m_alarms.pop_front();
    alarms = m_mapAlarming;
    Unlock();
}
BOOL CAlarmMonitor::isAlarming()
{
    Lock();
    BOOL bAlarming = !m_mapAlarming.empty();
    Unlock();
    return bAlarming;
}
BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
{
    for (int i = 0; i < len; i++) {
        if (pScrData[i] != pTarData[i]) {
            return FALSE;
        }
    }
    Unlock();
    return TRUE;
}
void CAlarmMonitor::getAlarmList(std::list<CAlarm*>& list)
int CAlarmMonitor::addAlarmTemplate(int id, int level, const char* pszDescription)
{
    Lock();
    list = m_alarms;
    Unlock();
    auto iter = m_mapAlarmTemplate.find(id);
    if (iter != m_mapAlarmTemplate.end()) return -1;
    CAlarm* pAlarm = new CAlarm(id, level, pszDescription);
    m_mapAlarmTemplate[id] = pAlarm;
    return 0;
}
BOOL CAlarmMonitor::isAlarmOn(int id)
{
    int byteIndex, bitIndex;
    byteIndex = (id - 1) / 8;
    bitIndex = (id - 1) % 8;
    return CToolUnits::getBit(m_pRawData[byteIndex], bitIndex);
}
BOOL CAlarmMonitor::findAlarm(std::vector<int>& ids, int id)
{
    for (auto item : ids) {
        if (item == id) return TRUE;
    }
    return FALSE;
}
SourceCode/Bond/BondEq/AlarmMonitor.h
@@ -17,24 +17,22 @@
    virtual void onRecvBroadcast(void* pSender, CIntent* pIntent);
    virtual void init();
    virtual void term();
    void setBeginAddr(int nAddr);
    int readAlarmListFromFile(const char* pszFilepath);
    virtual void OnTimer(UINT nTimerid);
    const char* getAlarmText(int nID);
    void Alarm(int id, int level);
    virtual void Serialize(CArchive& ar);
    void getAlarmList(std::list<CAlarm*>& list);
    void getAlarmingMap(std::map<int, CAlarm*>& alarms);
    BOOL isAlarming();
private:
    void AddAlarm(CAlarm* pAlarm);
    BOOL compareData(const char* pScrData, const char* pTarData, int len);
    int addAlarmTemplate(int id, int level, const char* pszDescription);
    BOOL isAlarmOn(int id);
    BOOL findAlarm(std::vector<int>& ids, int id);
private:
    int m_nBeginAddr;
private:
    std::map<int, std::string> m_mapAlarmText;
    int m_nLastId;
    int m_nLastLevel;
    std::list<CAlarm*> m_alarms;
    std::map<int, CAlarm*> m_mapAlarmTemplate;    // è¿™æ˜¯è­¦å‘Šçš„æ¨¡æ¿ï¼Œä»Žæ–‡ä»¶åŠ è½½
    std::map<int, CAlarm*> m_mapAlarming;        // æ­£åœ¨å‘生的警告
    char* m_pRawData;
};
SourceCode/Bond/BondEq/BondEq.cpp
@@ -77,6 +77,11 @@
    SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
    // gdi+
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
    // æœ¬ç¨‹åºæ–‡ä»¶ç›®å½•
    TCHAR sDrive[_MAX_DRIVE];
    TCHAR sDir[_MAX_DIR];
@@ -156,6 +161,12 @@
    BEQ_Term();
    RX_Term();
    MCL_Term();
    CloseHandle(m_hAppMutex);
    // gdi+
    Gdiplus::GdiplusShutdown(m_gdiplusToken);
    return CWinApp::ExitInstance();
}
SourceCode/Bond/BondEq/BondEq.h
@@ -33,7 +33,7 @@
    CString m_strAppFile;
    int m_nVersionNumber;
    CString m_strVersionName;
    ULONG_PTR m_gdiplusToken;
// å®žçް
SourceCode/Bond/BondEq/BondEq.rc
Binary files differ
SourceCode/Bond/BondEq/BondEqDlg.cpp
@@ -573,6 +573,7 @@
            return 0;
        }
        /*
        CString inputText = inputDialog.GetInputText();
        std::string strPass = UserManager::getInstance().getCurrentPass();
        if (inputText.Compare(strPass.c_str()) != 0) {
@@ -580,14 +581,17 @@
            logManager.log(SystemLogManager::LogType::Info, _T("验证时,密码错误!"));
            return 0;
        }
        */
    }
    if (id == IDC_BUTTON_RUN) {
        theApp.m_model.getBonder().start();
        m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE);
        m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(TRUE);
        logManager.log(SystemLogManager::LogType::Operation, _T("运行..."));
    }
    else if (id == IDC_BUTTON_STOP) {
        theApp.m_model.getBonder().stop();
        m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE);
        m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE);
        logManager.log(SystemLogManager::LogType::Operation, _T("Í£Ö¹..."));
SourceCode/Bond/BondEq/CBonder.cpp
@@ -175,11 +175,18 @@
                c->onData(id, &m_pPlcData[400], 184);
            }
        }
        else if (id == MONITOR_ID_ALARM) {
            for (auto c : m_components) {
                c->onData(id, &m_pPlcData[600], 260);
            }
        }
    };
    pPlc->setListener(listener);
    pPlc->addMonitor(1, 4400, 4499, MC::SOFT_COMPONENT::D, m_pPlcData);
    pPlc->addMonitor(2, 4500, 4599, MC::SOFT_COMPONENT::D, &m_pPlcData[200]);
    pPlc->addMonitor(3, 4700, 4791, MC::SOFT_COMPONENT::D, &m_pPlcData[400]);
    pPlc->addMonitor(MONITOR_ID_ALARM, 1001, 1064, MC::SOFT_COMPONENT::M, &m_pPlcData[600]);
    pPlc->setName("PLC(1)");
    pPlc->setDescription("PLC");
    pPlc->setIndex(0);
@@ -201,7 +208,6 @@
    CAlarmMonitor* pAlarmMonitor1 = new CAlarmMonitor();
    pAlarmMonitor1->setName("警告信息");
    pAlarmMonitor1->setDescription("警告信息监控");
    pAlarmMonitor1->setBeginAddr(4461 - 4400);
    pAlarmMonitor1->setIndex(0);
    pAlarmMonitor1->readAlarmListFromFile((LPTSTR)(LPCTSTR)strAlarmFile);
    AddComponent(pAlarmMonitor1);
SourceCode/Bond/BondEq/CProjectPageComponents.cpp
@@ -6,6 +6,7 @@
#include "CProjectPageComponents.h"
#include "afxdialogex.h"
#include "Alarm.h"
#include "AlarmMonitor.h"
// CProjectPageComponents å¯¹è¯æ¡†
@@ -72,18 +73,16 @@
                    }
                }
            }
            else if (RX_CODE_ALARM_EVENT == code) {
                CComponent* pComponent = nullptr;
                CAlarm* pAlarm = nullptr;
                pAny->getObject("obj", (IRxObject*&)pAlarm);
            else if (RX_CODE_ALARM_ON == code
                || RX_CODE_ALARM_OFF == code) {
                CAlarmMonitor* pComponent = nullptr;
                pAny->getPtrValue("ptr", (void*&)pComponent);
                ASSERT(pComponent);
                ASSERT(pAlarm);
                HTREEITEM hItem = getTreeItem(pComponent);
                if (hItem != nullptr) {
                    if(pAlarm->getStatus() == 1)
                    if (pComponent->isAlarming())
                        m_treeComponents.ShowItemBadgeDotMode(hItem);
                    else if (pAlarm->getStatus() == 2)
                    else
                        m_treeComponents.HideItemBadge(hItem);
                }
            }
SourceCode/Bond/BondEq/CProjectPageRemoteEqs.cpp
@@ -128,9 +128,10 @@
        ::DeleteObject(m_hbrBkgnd);
    }
    ASSERT(m_pObserver != NULL);
    m_pObserver->unsubscribe();
    m_pObserver = NULL;
    if (m_pObserver != NULL) {
        m_pObserver->unsubscribe();
        m_pObserver = NULL;
    }
}
SourceCode/Bond/BondEq/Common.h
@@ -7,6 +7,10 @@
#define UNIT1            _T("UNIT1")
/* ç›‘控数据id */
#define MONITOR_ID_ALARM        1001
/* Context Ret code */
#define CRC_ACK_REJECT                            -3
#define CRC_TIMEOUT                                -2
@@ -27,11 +31,12 @@
#define RX_CODE_DATA1_END_SAMPLING        1009
#define RX_CODE_DATA1_MATERIAL_REMOVEED    1010
#define RX_CODE_PANEL_COMPLATE            1011
#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_SELECT_COMPONENT        1016
#define RX_CODE_ALARM_ON                1012
#define RX_CODE_ALARM_OFF                1013
#define RX_CODE_EQSTATE_EVENT            1014
#define RX_CODE_EFEM_STATUS_CHANGED        1015
#define RX_CODE_EQ_STATE_CHANGED        1016
#define RX_CODE_SELECT_COMPONENT        1017
/* å¹¿æ’­ä»£ç  */
#define BC_CODE_DATA1_MATERIAL_RECEIVED    5000
@@ -39,9 +44,10 @@
#define BC_CODE_DATA1_UPDATE            5002
#define BC_CODE_DATA1_END_SAMPLING        5003
#define BC_CODE_DATA1_MATERIAL_REMOVED    5004
#define BC_CODE_ALARM_EVENT                5005
#define BC_CODE_EQSTATE_EVENT            5006
#define BC_CODE_RUN_RECIPE_RESULT        5007
#define BC_CODE_ALARM_ON                5005
#define BC_CODE_ALARM_OFF                5006
#define BC_CODE_EQSTATE_EVENT            5007
#define BC_CODE_RUN_RECIPE_RESULT        5008
/* Channel Name */
#define MC_CHANNEL1_NAME        "McChannel1"
SourceCode/Bond/BondEq/InputDialog.cpp
@@ -49,6 +49,7 @@
    // TODO:  åœ¨æ­¤æ·»åŠ é¢å¤–çš„åˆå§‹åŒ–
    SetWindowText(m_strTitle);
    m_staticPrompt.SetWindowText(m_strPrompt);
    m_editInput.SetFocus();
    return TRUE;  // return TRUE unless you set the focus to a control
    // å¼‚常: OCX å±žæ€§é¡µåº”返回 FALSE
SourceCode/Bond/BondEq/Model.cpp
@@ -155,10 +155,16 @@
            notifyObj(RX_CODE_PANEL_COMPLATE, pPanel);
            pPanel->release();
        }
        else if (code == BC_CODE_ALARM_EVENT) {
        else if (code == BC_CODE_ALARM_ON) {
            CAlarm* pAlarm = (CAlarm*)pIntent->getContext();
            pAlarm->addRef();
            notifyObjAndPtr(RX_CODE_ALARM_EVENT, pAlarm, pSender);
            notifyObjAndPtr(RX_CODE_ALARM_ON, pAlarm, pSender);
            pAlarm->release();
        }
        else if (code == BC_CODE_ALARM_OFF) {
            CAlarm* pAlarm = (CAlarm*)pIntent->getContext();
            pAlarm->addRef();
            notifyObjAndPtr(RX_CODE_ALARM_OFF, pAlarm, pSender);
            pAlarm->release();
        }
        else if (code == BC_CODE_EQSTATE_EVENT) {
SourceCode/Bond/x64/Debug/AlarmList.txt
@@ -1,208 +1,208 @@
1,A单元_急停_01
2,A单元_急停_02
3,A单元_急停_03
4,A单元_MEO
1,1,A单元_急停_01
2,1,A单元_急停_02
3,1,A单元_急停_03
4,1,A单元_MEO
10,B单元_急停_01
11,B单元_急停_02
12,B单元_急停_03
13,B单元_MEO
10,1,B单元_急停_01
11,1,B单元_急停_02
12,1,B单元_急停_03
13,1,B单元_MEO
201,A单元-上腔体压合Z轴1异常
202,A单元-上腔体压合Z轴2异常
203,A单元-上腔体压合Z轴3异常
204,A单元-上腔体压合Z轴4异常
205,A单元-上腔体压合Z轴5异常
206,A单元-上腔体Z轴1异常
207,A单元-上腔体Z轴2异常
208,A单元-分离胶辊Z轴1异常
209,A单元-分离胶辊Z轴2异常
210,A单元-左侧分离胶辊X轴1异常
211,A单元-左侧分离胶辊X轴2异常
212,A单元-分离胶辊调节Z轴异常
213,A单元-下腔体Z轴异常
214,A单元-收膜旋转轴异常
215,A单元-放膜旋转轴异常
201,2,A单元-上腔体压合Z轴1异常
202,2,A单元-上腔体压合Z轴2异常
203,2,A单元-上腔体压合Z轴3异常
204,2,A单元-上腔体压合Z轴4异常
205,2,A单元-上腔体压合Z轴5异常
206,2,A单元-上腔体Z轴1异常
207,2,A单元-上腔体Z轴2异常
208,2,A单元-分离胶辊Z轴1异常
209,2,A单元-分离胶辊Z轴2异常
210,2,A单元-左侧分离胶辊X轴1异常
211,2,A单元-左侧分离胶辊X轴2异常
212,2,A单元-分离胶辊调节Z轴异常
213,2,A单元-下腔体Z轴异常
214,2,A单元-收膜旋转轴异常
215,2,A单元-放膜旋转轴异常
217,B单元-上腔体压合Z轴1异常
218,B单元-上腔体压合Z轴2异常
219,B单元-上腔体压合Z轴3异常
220,B单元-上腔体压合Z轴4异常
221,B单元-上腔体压合Z轴5异常
222,B单元-上腔体Z轴1异常
223,B单元-上腔体Z轴2异常
224,B单元-分离胶辊Z轴1异常
225,B单元-分离胶辊Z轴2异常
226,B单元-左侧分离胶辊X轴1异常
227,B单元-左侧分离胶辊X轴2异常
228,B单元-分离胶辊调节Z轴异常
229,B单元-下腔体Z轴异常
230,B单元-收膜旋转轴异常
231,B单元-放膜旋转轴异常
217,2,B单元-上腔体压合Z轴1异常
218,2,B单元-上腔体压合Z轴2异常
219,2,B单元-上腔体压合Z轴3异常
220,2,B单元-上腔体压合Z轴4异常
221,2,B单元-上腔体压合Z轴5异常
222,2,B单元-上腔体Z轴1异常
223,2,B单元-上腔体Z轴2异常
224,2,B单元-分离胶辊Z轴1异常
225,2,B单元-分离胶辊Z轴2异常
226,2,B单元-左侧分离胶辊X轴1异常
227,2,B单元-左侧分离胶辊X轴2异常
228,2,B单元-分离胶辊调节Z轴异常
229,2,B单元-下腔体Z轴异常
230,2,B单元-收膜旋转轴异常
231,2,B单元-放膜旋转轴异常
260,QD77MS16(U60)异常
261,QD77MS16(U62)异常
260,2,QD77MS16(U60)异常
261,2,QD77MS16(U62)异常
501,A单元-分离膜收膜压紧气缸异常
502,A单元-分离膜放膜压紧气缸异常
503,A单元-粘膜上升气缸异常
504,A单元-粘膜下降气缸异常
505,A单元-高粘上压紧气缸异常
506,A单元-高粘下压紧气缸异常
507,A单元-干泵气阀异常
508,A单元-腔体干泵与分子泵组合气阀异常
509,A单元-腔体分子泵气阀异常
510,A单元-腔体总破真空气阀异常
501,3,A单元-分离膜收膜压紧气缸异常
502,3,A单元-分离膜放膜压紧气缸异常
503,3,A单元-粘膜上升气缸异常
504,3,A单元-粘膜下降气缸异常
505,3,A单元-高粘上压紧气缸异常
506,3,A单元-高粘下压紧气缸异常
507,3,A单元-干泵气阀异常
508,3,A单元-腔体干泵与分子泵组合气阀异常
509,3,A单元-腔体分子泵气阀异常
510,3,A单元-腔体总破真空气阀异常
520,B单元-分离膜收膜压紧气缸异常
521,B单元-分离膜放膜压紧气缸异常
522,B单元-粘膜上升气缸异常
523,B单元-粘膜下降气缸异常
524,B单元-高粘上压紧气缸异常
525,B单元-高粘下压紧气缸异常
526,B单元-干泵气阀异常
527,B单元-腔体干泵与分子泵组合气阀异常
528,B单元-腔体分子泵气阀异常
529,B单元-腔体总破真空气阀异常
520,3,B单元-分离膜收膜压紧气缸异常
521,3,B单元-分离膜放膜压紧气缸异常
522,3,B单元-粘膜上升气缸异常
523,3,B单元-粘膜下降气缸异常
524,3,B单元-高粘上压紧气缸异常
525,3,B单元-高粘下压紧气缸异常
526,3,B单元-干泵气阀异常
527,3,B单元-腔体干泵与分子泵组合气阀异常
528,3,B单元-腔体分子泵气阀异常
529,3,B单元-腔体总破真空气阀异常
541,A单元-上腔体破真空异常
542,A单元-下腔体破真空异常
543,A单元-腔体干泵破真空异常
544,A单元-腔体分离泵破真空异常
541,3,A单元-上腔体破真空异常
542,3,A单元-下腔体破真空异常
543,3,A单元-腔体干泵破真空异常
544,3,A单元-腔体分离泵破真空异常
556,B单元-上腔体破真空异常
557,B单元-下腔体破真空异常
558,B单元-腔体干泵破真空异常
559,B单元-腔体分离泵破真空异常
556,3,B单元-上腔体破真空异常
557,3,B单元-下腔体破真空异常
558,3,B单元-腔体干泵破真空异常
559,3,B单元-腔体分离泵破真空异常
571,A单元-上腔体吸真空异常
572,A单元-下腔体吸真空异常
573,A单元-腔体干泵吸真空异常
574,A单元-腔体分离泵吸真空异常
571,3,A单元-上腔体吸真空异常
572,3,A单元-下腔体吸真空异常
573,3,A单元-腔体干泵吸真空异常
574,3,A单元-腔体分离泵吸真空异常
586,B单元-上腔体吸真空异常
587,B单元-下腔体吸真空异常
588,B单元-腔体干泵吸真空异常
589,B单元-腔体分离泵吸真空异常
586,3,B单元-上腔体吸真空异常
587,3,B单元-下腔体吸真空异常
588,3,B单元-腔体干泵吸真空异常
589,3,B单元-腔体分离泵吸真空异常
601,A单元-下腔体在籍异常
601,3,A单元-下腔体在籍异常
610,B单元-下腔体在籍异常
610,3,B单元-下腔体在籍异常
621,A单元-离心膜断料
622,A单元-离心膜转动异常
621,3,A单元-离心膜断料
622,3,A单元-离心膜转动异常
626,B单元-离心膜断料
627,B单元-离心膜转动异常
626,3,B单元-离心膜断料
627,3,B单元-离心膜转动异常
631,A单元-上腔体压合Z轴1绝对位置丢失
632,A单元-上腔体压合Z轴2绝对位置丢失
633,A单元-上腔体压合Z轴3绝对位置丢失
634,A单元-上腔体压合Z轴4绝对位置丢失
635,A单元-上腔体压合Z轴5绝对位置丢失
636,A单元-上腔体Z轴1绝对位置丢失
637,A单元-上腔体Z轴2绝对位置丢失
631,3,A单元-上腔体压合Z轴1绝对位置丢失
632,3,A单元-上腔体压合Z轴2绝对位置丢失
633,3,A单元-上腔体压合Z轴3绝对位置丢失
634,3,A单元-上腔体压合Z轴4绝对位置丢失
635,3,A单元-上腔体压合Z轴5绝对位置丢失
636,3,A单元-上腔体Z轴1绝对位置丢失
637,3,A单元-上腔体Z轴2绝对位置丢失
641,B单元-上腔体压合Z轴1绝对位置丢失
642,B单元-上腔体压合Z轴2绝对位置丢失
643,B单元-上腔体压合Z轴3绝对位置丢失
644,B单元-上腔体压合Z轴4绝对位置丢失
645,B单元-上腔体压合Z轴5绝对位置丢失
646,B单元-上腔体Z轴1绝对位置丢失
647,B单元-上腔体Z轴2绝对位置丢失
641,3,B单元-上腔体压合Z轴1绝对位置丢失
642,3,B单元-上腔体压合Z轴2绝对位置丢失
643,3,B单元-上腔体压合Z轴3绝对位置丢失
644,3,B单元-上腔体压合Z轴4绝对位置丢失
645,3,B单元-上腔体压合Z轴5绝对位置丢失
646,3,B单元-上腔体Z轴1绝对位置丢失
647,3,B单元-上腔体Z轴2绝对位置丢失
651,A单元-安全门异常
651,3,A单元-安全门异常
653,B单元-安全门异常
653,3,B单元-安全门异常
656,A单元-设备正压异常
657,A单元-离子风正压异常
656,3,A单元-设备正压异常
657,3,A单元-离子风正压异常
661,B单元-设备正压异常
662,B单元-离子风正压异常
661,3,B单元-设备正压异常
662,3,B单元-离子风正压异常
666,A单元-上腔体压合Z轴同步异常
667,A单元-上腔体Z轴同步异常
668,A单元-分离胶辊Z轴同步异常
669,A单元-分离胶辊X轴同步异常
666,3,A单元-上腔体压合Z轴同步异常
667,3,A单元-上腔体Z轴同步异常
668,3,A单元-分离胶辊Z轴同步异常
669,3,A单元-分离胶辊X轴同步异常
671,B单元-上腔体压合Z轴同步异常
672,B单元-上腔体Z轴同步异常
673,B单元-分离胶辊Z轴同步异常
674,B单元-分离胶辊X轴同步异常
671,3,B单元-上腔体压合Z轴同步异常
672,3,B单元-上腔体Z轴同步异常
673,3,B单元-分离胶辊Z轴同步异常
674,3,B单元-分离胶辊X轴同步异常
676,A单元-干泵处于非远程模式
677,A单元-干泵DVP未运行
678,A单元-干泵MBP未运行
679,A单元-干泵异常
680,A单元-干泵面板急停触发
676,3,A单元-干泵处于非远程模式
677,3,A单元-干泵DVP未运行
678,3,A单元-干泵MBP未运行
679,3,A单元-干泵异常
680,3,A单元-干泵面板急停触发
683,B单元-干泵处于非远程模式
684,B单元-干泵DVP未运行
685,B单元-干泵MBP未运行
686,B单元-干泵异常
687,B单元-干泵面板急停触发
683,3,B单元-干泵处于非远程模式
684,3,B单元-干泵DVP未运行
685,3,B单元-干泵MBP未运行
686,3,B单元-干泵异常
687,3,B单元-干泵面板急停触发
690,A单元-上腔体压合Z轴1过载报警
691,A单元-上腔体压合Z轴2过载报警
692,A单元-上腔体压合Z轴3过载报警
693,A单元-上腔体压合Z轴4过载报警
694,A单元-上腔体压合Z轴5过载报警
695,A单元-上腔体Z轴1过载报警
696,A单元-上腔体Z轴2过载报警
697,A单元-分离胶辊Z轴1过载报警
698,A单元-分离胶辊Z轴2过载报警
699,A单元-分离胶辊X轴1过载报警
700,A单元-分离胶辊X轴2过载报警
690,3,A单元-上腔体压合Z轴1过载报警
691,3,A单元-上腔体压合Z轴2过载报警
692,3,A单元-上腔体压合Z轴3过载报警
693,3,A单元-上腔体压合Z轴4过载报警
694,3,A单元-上腔体压合Z轴5过载报警
695,3,A单元-上腔体Z轴1过载报警
696,3,A单元-上腔体Z轴2过载报警
697,3,A单元-分离胶辊Z轴1过载报警
698,3,A单元-分离胶辊Z轴2过载报警
699,3,A单元-分离胶辊X轴1过载报警
700,3,A单元-分离胶辊X轴2过载报警
701,B单元-上腔体压合Z轴1过载报警
702,B单元-上腔体压合Z轴2过载报警
703,B单元-上腔体压合Z轴3过载报警
704,B单元-上腔体压合Z轴4过载报警
705,B单元-上腔体压合Z轴5过载报警
706,B单元-上腔体Z轴1过载报警
707,B单元-上腔体Z轴2过载报警
708,B单元-分离胶辊Z轴1过载报警
709,B单元-分离胶辊Z轴2过载报警
710,B单元-分离胶辊X轴1过载报警
711,B单元-分离胶辊X轴2过载报警
701,3,B单元-上腔体压合Z轴1过载报警
702,3,B单元-上腔体压合Z轴2过载报警
703,3,B单元-上腔体压合Z轴3过载报警
704,3,B单元-上腔体压合Z轴4过载报警
705,3,B单元-上腔体压合Z轴5过载报警
706,3,B单元-上腔体Z轴1过载报警
707,3,B单元-上腔体Z轴2过载报警
708,3,B单元-分离胶辊Z轴1过载报警
709,3,B单元-分离胶辊Z轴2过载报警
710,3,B单元-分离胶辊X轴1过载报警
711,3,B单元-分离胶辊X轴2过载报警
712,A单元-上腔体压合Z轴5轴间误差过大
713,A单元-上腔体Z轴2轴间误差过大
714,A单元-上腔体Z轴与上腔压合Z轴误差过大
712,3,A单元-上腔体压合Z轴5轴间误差过大
713,3,A单元-上腔体Z轴2轴间误差过大
714,3,A单元-上腔体Z轴与上腔压合Z轴误差过大
717,B单元-上腔体压合Z轴5轴间误差过大
718,B单元-上腔体Z轴2轴间误差过大
719,B单元-上腔体Z轴与上腔压合Z轴误差过大
717,3,B单元-上腔体压合Z轴5轴间误差过大
718,3,B单元-上腔体Z轴2轴间误差过大
719,3,B单元-上腔体Z轴与上腔压合Z轴误差过大
722,A单元-分子泵处于非远程模式
723,A单元-分子泵异常
724,B单元-分子泵处于非远程模式
725,B单元-分子泵异常
726,A单元-干泵抽真空异常
727,B单元-干泵抽真空异常
722,3,A单元-分子泵处于非远程模式
723,3,A单元-分子泵异常
724,3,B单元-分子泵处于非远程模式
725,3,B单元-分子泵异常
726,3,A单元-干泵抽真空异常
727,3,B单元-干泵抽真空异常
729,A单元-上腔体加热主控仪表异常
730,A单元-上腔体加热腔体温度异常
729,3,A单元-上腔体加热主控仪表异常
730,3,A单元-上腔体加热腔体温度异常
732,A单元-下腔体加热主控仪表异常
733,A单元-下腔体加热腔体温度异常
732,3,A单元-下腔体加热主控仪表异常
733,3,A单元-下腔体加热腔体温度异常
739,B单元-上腔体加热主控仪表异常
740,B单元-上腔体加热腔体温度异常
739,3,B单元-上腔体加热主控仪表异常
740,3,B单元-上腔体加热腔体温度异常
742,B单元-下腔体加热主控仪表异常
743,B单元-下腔体加热腔体温度异常
742,3,B单元-下腔体加热主控仪表异常
743,3,B单元-下腔体加热腔体温度异常
801,上游连接中断
802,下游连接中断
801,3,上游连接中断
802,3,下游连接中断
806,上游交握超时
807,下游交握超时
806,3,上游交握超时
807,3,下游交握超时
811,A单元-离子风异常
811,3,A单元-离子风异常
814,B单元-离子风异常
814,3,B单元-离子风异常