1.为CVariable增加值的设置和获取
2.当发生Port状态改变为InUse时,此时也刚好获取到CarrierID,上报S6F11_CarrierID_Readed
已修改14个文件
161 ■■■■■ 文件已修改
Document/Panel Bonder八零联合 SecsTest CheckList_v3.0.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCollectionEvent.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCollectionEvent.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CLoadPort.cpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPortStatusReport.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPortStatusReport.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CVariable.cpp 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CVariable.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/ReportList.txt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/VariableList.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/Panel Bonder°ËÁãÁªºÏ SecsTest CheckList_v3.0.xlsx
Binary files differ
SourceCode/Bond/Servo/CCollectionEvent.cpp
@@ -59,7 +59,7 @@
        }
    }
    unsigned int CCollectionEvent::getPortID()
    unsigned int CCollectionEvent::getFirstPortID()
    {
        if (m_reports.empty()) return -1;
        return m_reports.front()->getReportId();
@@ -90,6 +90,12 @@
        return nullptr;
    }
    CReport* CCollectionEvent::getFirstReport()
    {
        if (m_reports.empty()) return nullptr;
        return m_reports.front();
    }
    std::vector<CReport*>& CCollectionEvent::getReports()
    {
        return m_reports;
SourceCode/Bond/Servo/CCollectionEvent.h
@@ -23,7 +23,9 @@
        /* å¦‚果一个CEID只有一个Report的场景,调用此函数设置或取消 */
        void setReport(CReport* pReport);
        unsigned int getPortID();
        unsigned int getFirstPortID();
        CReport* getFirstReport();
    private:
        unsigned int m_nCEID;
        std::string m_strName;
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -355,12 +355,13 @@
        if (m_nIndex == 0) {
            static int ii = 0;
            ii++;
            if (ii == 20) {
            if (ii == 50) {
                char szBuffer[64] = {0};
                CStep* pStep = getStepWithName(STEP_EQ_PORT1_INUSE);
                CPortStatusReport portStatusReport;
                portStatusReport.setPortStatus(PORT_UNLOAD_READY);
                portStatusReport.setPortStatus(PORT_INUSE);
                portStatusReport.setJobExistenceSlot(0xf);
                portStatusReport.setCassetteId("CID1984113");
                int nRet = portStatusReport.serialize(szBuffer, 64);
                decodePortStatusReport(pStep, szBuffer, 64);
            }
@@ -913,13 +914,12 @@
            else {
                // æŠ›å‡ºåˆ°åº”用层做选择要加工的片子
                generateGlassList(getScanCassetteMap());
                if (m_listener.onPortStatusChanged != nullptr) {
                    m_listener.onPortStatusChanged(this, portStatusReport.getPortStatus(),
                        getScanCassetteMap());
                }
            }
        }
        if (m_listener.onPortStatusChanged != nullptr) {
            m_listener.onPortStatusChanged(this, portStatusReport.getPortStatus(),
                getScanCassetteMap());
        }
        // ç¼“å­˜Attribute,用于调试时显示信息
SourceCode/Bond/Servo/CPortStatusReport.cpp
@@ -249,6 +249,11 @@
        m_nJobExistenceSlot[0] = map;
    }
    void CPortStatusReport::setCassetteId(const char* pszId)
    {
        m_strCassetteID = pszId;
    }
    void CPortStatusReport::WriteString(CArchive& ar, std::string& string)
    {
        CString strTemp = string.c_str();
SourceCode/Bond/Servo/CPortStatusReport.h
@@ -31,6 +31,7 @@
        bool isJobExistenceSlot();
        short getJobExistenceSlot();
        void setJobExistenceSlot(short map);
        void setCassetteId(const char* pszId);
    private:
        void WriteString(CArchive& ar, std::string& string);
SourceCode/Bond/Servo/CVariable.cpp
@@ -7,6 +7,7 @@
    {
        m_nVarialbeId = 0;
        m_format = SVFromat::U1;
        m_nValue = 0;
    }
    CVariable::CVariable(const char* pszId, const char* pszName, const char* pszFormat, const char* pszRemark)
@@ -87,4 +88,41 @@
    {
        return m_strRemark;
    }
    void CVariable::setValue(__int64 value)
    {
        if (m_format == SVFromat::U1 || m_format == SVFromat::U2 || m_format == SVFromat::I2) {
            m_nValue = value;
        }
    }
    void CVariable::setValue(const char* pszValue)
    {
        std::string strTemp = pszValue;
        if (m_format == SVFromat::A20) {
            if (strTemp.length() > 20) {
                strTemp = strTemp.substr(0, 20);
            }
        }
        else if (m_format == SVFromat::A50) {
            if (strTemp.length() > 50) {
                strTemp = strTemp.substr(0, 50);
            }
        }
        m_strValue = strTemp;
    }
    std::string CVariable::getValue()
    {
        std::string strRet;
        if (m_format == SVFromat::U1 || m_format == SVFromat::U2 || m_format == SVFromat::I2) {
            strRet = std::to_string(m_nValue);
        }
        else if(m_format == SVFromat::A20 || m_format == SVFromat::A50) {
            strRet = m_strValue;
        }
        return strRet;
    }
}
SourceCode/Bond/Servo/CVariable.h
@@ -26,12 +26,17 @@
        std::string& getName();
        SVFromat getFormat();
        std::string& getRemark();
        void setValue(__int64 value);
        void setValue(const char* pszValue);
        std::string getValue();
    private:
        unsigned int m_nVarialbeId;
        std::string m_strName;
        SVFromat m_format;
        std::string m_strRemark;
        __int64 m_nValue;
        std::string m_strValue;
    };
}
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -256,12 +256,39 @@
    return nullptr;
}
SERVO::CVariable* CHsmsPassive::getVariable(const char* pszName)
{
    for (auto item : m_variabels) {
        if (item->getName().compare(pszName) == 0) {
            return item;
        }
    }
    return nullptr;
}
void CHsmsPassive::clearAllVariabel()
{
    for (auto item : m_variabels) {
        delete item;
    }
    m_variabels.clear();
}
void CHsmsPassive::setVariableValue(const char* pszName, __int64 value)
{
    auto v = getVariable(pszName);
    if (v != nullptr) {
        v->setValue(value);
    }
}
void CHsmsPassive::setVariableValue(const char* pszName, const char* value)
{
    auto v = getVariable(pszName);
    if (v != nullptr) {
        v->setValue(value);
    }
}
int CHsmsPassive::loadReports(const char* pszFilepath)
@@ -1095,7 +1122,7 @@
    // æ£€éªŒç»“果是否正确
    for (auto item : m_collectionEvents) {
        LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getPortID());
        LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getFirstPortID());
    }
    
MYREPLY:
@@ -1450,15 +1477,19 @@
}
// S6F11
int CHsmsPassive::requestEventReportSend(unsigned int DATAID, unsigned int CEID, const std::vector<std::string>& values)
static unsigned int DATAID = 1;
int CHsmsPassive::requestEventReportSend(unsigned int CEID)
{
    SERVO::CCollectionEvent* pEvent = getEvent(CEID);
    if (pEvent == nullptr) {
        return ER_NO_EVENT;
    }
    if (pEvent == nullptr) {
    SERVO::CReport* pReport = pEvent->getFirstReport();
    if (pReport == nullptr) {
        return ER_UNLINK_EVENT_REPORT;
    }
    Lock();
    CHsmsAction* pAction = new CHsmsAction(ACTION_EVENT_REPORT, TRUE, m_nActionTimeout);
@@ -1466,14 +1497,16 @@
    HSMS_Create1Message(pMessage, m_nSessionId, 6 | REPLY, 11, ++m_nSystemByte);
    ASSERT(pMessage);
    ISECS2Item* pItem = pMessage->getBody();
    pItem->addU4Item(DATAID, "DATAID");
    pItem->addU4Item(++DATAID, "DATAID");
    pItem->addU4Item(CEID, "CEID");
    ISECS2Item* pItemList1 = pItem->addItem();
    ISECS2Item* pItemList2 = pItemList1->addItem();
    pItemList2->addU4Item(pEvent->getPortID(), "RPTID");
    pItemList2->addU4Item(pReport->getReportId(), "RPTID");
    ISECS2Item* pItemList3 = pItemList2->addItem();
    auto values = pReport->getVariables();
    for (auto item : values) {
        pItemList3->addItem(item.c_str(), "V");
        pItemList3->addItem(item->getValue().c_str(), "V");
    }
    pAction->setSendMessage(pMessage);
    if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
@@ -1488,5 +1521,26 @@
    return ER_NOERROR;
}
int CHsmsPassive::requestEventReportSend(const char* pszEventName)
{
    SERVO::CCollectionEvent* pEvent = nullptr;
    for (auto e : m_collectionEvents) {
        if (e->getName().compare(pszEventName) == 0) {
            pEvent = e;
            break;
        }
    }
    if (pEvent == nullptr) {
        return ER_NO_EVENT;
    }
    return requestEventReportSend(pEvent->getEventId());
}
int CHsmsPassive::requestEventReportSend_CarrierID_Readed()
{
    return requestEventReportSend("CarrierID_Readed");
}
SourceCode/Bond/Servo/HsmsPassive.h
@@ -136,6 +136,11 @@
    // å–得指定Variable
    SERVO::CVariable* getVariable(int variableId);
    SERVO::CVariable* getVariable(const char* pszName);
    // è®¾ç½®å˜é‡å€¼
    void setVariableValue(const char* pszName, __int64 value);
    void setVariableValue(const char* pszName, const char* value);
    // ä»Žæ–‡ä»¶ä¸­åŠ è½½CReport列表
    int loadReports(const char* pszFilepath);
@@ -173,7 +178,9 @@
    /* request开头的函数为主动发送数据的函数 */
    int requestAreYouThere();
    int requestAlarmReport(int ALCD, int ALID, const char* ALTX);
    int requestEventReportSend(unsigned int DATAID, unsigned int CEID, const std::vector<std::string>& values);
    int requestEventReportSend(unsigned int CEID);
    int requestEventReportSend(const char* pszEventName);
    int requestEventReportSend_CarrierID_Readed();
private:
    void replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName);
SourceCode/Bond/Servo/Model.cpp
@@ -353,6 +353,13 @@
    };
    masterListener.onLoadPortStatusChanged = [&] (void* pMaster, SERVO::CEquipment* pEquipment, short status, __int64 data) {
        LOGE("<CModel>onLoadPortStatusChanged. status = %d", status);
        if (status == PORT_INUSE) {
            SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
            if (pLoadPort != nullptr) {
                m_hsmsPassive.setVariableValue("CarrierID", pLoadPort->getCassetteId().c_str());
            }
            m_hsmsPassive.requestEventReportSend_CarrierID_Readed();
        }
        notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment);
    };
    m_master.setListener(masterListener);
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -37,3 +37,4 @@
31032,CJobResume,,(31000)
40000,E90_SPSM_NoState_To_NeedsProcessing,,(40000)
40001,E90_SPSM_InProcess_To_ProcessCompleted,,(40000)
50000,CarrierID_Readed,,(50000)
SourceCode/Bond/x64/Debug/ReportList.txt
@@ -15,3 +15,5 @@
30000,(1,30000,30001)
31000,(1,31000,31001)
40000,(1,10203,20000)
50000,(5000)
SourceCode/Bond/x64/Debug/VariableList.txt
@@ -35,3 +35,4 @@
2023,OCREnable,U2,"OCR使能:O:开启 1:屏蔽"
2024,CCDEnable,U2,"CCD使能:O:开启 1:屏蔽"
2025,FFUParameter,U2,FFU设定值
5000,CarrierID,A20,卡匣ID