已添加1个文件
已修改10个文件
162 ■■■■ 文件已修改
SourceCode/Bond/Servo/CCollectionEvent.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCollectionEvent.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/ReportList.txt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/VariableList.txt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/test.ini 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCollectionEvent.cpp
@@ -59,9 +59,9 @@
        }
    }
    unsigned int CCollectionEvent::getFirstPortID()
    unsigned int CCollectionEvent::getFirstReportID()
    {
        if (m_reports.empty()) return -1;
        if (m_reports.empty()) return 0;
        return m_reports.front()->getReportId();
    }
SourceCode/Bond/Servo/CCollectionEvent.h
@@ -23,7 +23,7 @@
        /* å¦‚果一个CEID只有一个Report的场景,调用此函数设置或取消 */
        void setReport(CReport* pReport);
        unsigned int getFirstPortID();
        unsigned int getFirstReportID();
        CReport* getFirstReport();
    private:
SourceCode/Bond/Servo/CMaster.cpp
@@ -1553,6 +1553,10 @@
                    m_pCollector->batchStop(SlotToMid(eqid, slotNo));
                }
            }
            if (m_listener.onProcessStateChanged != nullptr) {
                m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, state);
            }
        };
        listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
            LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。",
SourceCode/Bond/Servo/CMaster.h
@@ -58,6 +58,7 @@
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int code)> ONEQDATACHANGED;
    typedef std::function<void(void* pMaster, CRobotTask* pTask, int code)> ONROBOTTASKEVENT;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, short status, __int64 data)> ONLOADPORTSTATUSCHANGED;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int slotNo, PROCESS_STATE state)> ONPROCESSSTATECHANGED;
    typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND;
    typedef std::function<void(void* pMaster, void* pj)> ONPJSTART;
    typedef struct _MasterListener
@@ -70,6 +71,7 @@
        ONEQDATACHANGED         onEqDataChanged;
        ONROBOTTASKEVENT        onRobotTaskEvent;
        ONLOADPORTSTATUSCHANGED    onLoadPortStatusChanged;
        ONPROCESSSTATECHANGED   onProcessStateChanged;
        ONCTROUNDEND            onCTRoundEnd;
        ONPJSTART               onCjStart;
        ONPJSTART               onCjEnd;
@@ -272,4 +274,3 @@
        void CreateDAQBridgeServer();
    };
}
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -153,9 +153,11 @@
void CHsmsPassive::unlinkEventReport(unsigned int CEID)
{
    LOGI("<CHsmsPassive>unlinkEventReport enter");
    SERVO::CCollectionEvent* pEvent = getEvent(CEID);
    if (pEvent != nullptr) {
        pEvent->setReport(nullptr);
        LOGI("<CHsmsPassive>unlink Event Report.CEID=%d", CEID);
    }
}
@@ -193,7 +195,7 @@
int CHsmsPassive::onRecvMsg(IMessage* pMessage)
{
    LOGI("onRecvMsg:%s", pMessage->toString());
    // LOGI("onRecvMsg:%s", pMessage->toString());
    Lock();
    if (m_pActiveAction != nullptr &&
        (m_pActiveAction->getSendMessage()->getHeader()->systemBytes == pMessage->getHeader()->systemBytes)) {
@@ -950,7 +952,8 @@
        return -1;
    }
    std::wregex pattern(L"^\\d+,[^,]*,[^,]*,\\(\\d+(,\\d+)*\\).*");  // åŒ¹é…ä»¥æ•°å­—+逗号开头的字符串
    // å…è®¸ Attached RPTID ä¸ºç©ºï¼š()
    std::wregex pattern(L"^\\d+,[^,]*,[^,]*,\\(\\d*(,\\d+)*\\).*");  // åŒ¹é…ä»¥æ•°å­—+逗号开头的字符串
    std::vector<SERVO::CCollectionEvent*> events;
    int index, last;
    CStringW strLine, strRPTIDs;
@@ -1198,7 +1201,7 @@
        */
    };
    auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void {
        LOGI("<HSMS>onRecvSysMessage:sessionId:%d, sType:%d systemBytes:%d",
        LOGI("<HSMS>[Received]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
        onRecvMsg(pMessage);
        if (MSG_LINKTEST_REQ == pMessage->getHeader()->sType) {
@@ -1225,7 +1228,7 @@
        HEADER* pHeader = pMessage->getHeader();
        int nStream = (pHeader->stream & 0x7F);
        LOGI("<HSMS>收到消息 S%dF%d", nStream, pHeader->function);
        LOGI("<HSMS>[Received]%s", pMessage->toString());
        if (nStream == 1 && pHeader->function == 1) {
            // S1F1
            replyAreYouThere(pMessage);
@@ -1497,7 +1500,9 @@
    ISECS2Item* pItem = pMessage->getBody();
    pItem->setBinary((const char*)&ack, 1, pszAckName);
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
}
@@ -1538,7 +1543,7 @@
    pItem->addItem(m_strEquipmentModelType.c_str(), "MDLN");
    pItem->addItem(m_strSoftRev.c_str(), "SOFTREV");
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S1F2 (SysByte=%u)", pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SECS Msg SEND] %s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
    return 0;
@@ -1599,7 +1604,9 @@
    pList->addItem(m_strEquipmentModelType.c_str(), "MDLN");
    pList->addItem(m_strSoftRev.c_str(), "SOFTREV");
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]%s", pMessage->toString());
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
    return 0;
@@ -1637,7 +1644,9 @@
MYREPLY:
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]%s", pMessage->toString());
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
@@ -1686,7 +1695,9 @@
    }
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S2F14 (SysByte=%u)", pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
    return 0;
@@ -1782,9 +1793,10 @@
    ISECS2Item* pBody = pRecv->getBody();
    ISECS2Item* defineItem, *rptListItem, * vidListItem;
    unsigned int dataId, rptid, vid;
    unsigned short dataId;
    unsigned int rptid, vid;
    if (!pBody->getSubItemU4(0, dataId)) goto MYREPLY;
    if (!pBody->getSubItemU2(0, dataId)) goto MYREPLY;
    rptListItem = pBody->getSubItem(1);
    if (rptListItem == nullptr) goto MYREPLY;
    if (rptListItem->getSubItemSize() == 0) {
@@ -1838,8 +1850,10 @@
    ISECS2Item* pBody = pRecv->getBody();
    ISECS2Item* linkItem, *ceidListItem, *rptListItem;
    unsigned int dataId, ceid, rptid;
    if (!pBody->getSubItemU4(0, dataId)) goto MYREPLY;
    unsigned short dataId;
    unsigned int ceid, rptid;
    bool bChanged = false;
    if (!pBody->getSubItemU2(0, dataId)) goto MYREPLY;
    ceidListItem = pBody->getSubItem(1);
    if (ceidListItem == nullptr) goto MYREPLY;
    for (int i = 0; i < ceidListItem->getSubItemSize(); i++) {
@@ -1851,21 +1865,31 @@
            int prtCount = rptListItem->getSubItemSize();
            if (prtCount == 0) {
                unlinkEventReport(ceid);
                bChanged = true;
            }
            else {
                for (int k = 0; k < prtCount; k++) {
                    if (rptListItem->getSubItemU4(k, rptid)) {
                        linkEventReport(ceid, rptid);
                        bChanged = true;
                    }
                }
            }
        }
    }
    // æŒä¹…化到 CollectionEventList.txt(便于下次启动仍保持 Link/Unlink ç»“果)
    if (bChanged && !m_strCollectionEventFilepath.empty()) {
        writeCollectionEventsToFile(m_strCollectionEventFilepath);
    }
    // æ£€éªŒç»“果是否正确
    for (auto item : m_collectionEvents) {
        LOGE("=== ceid:%d, prtid:%d", item->getEventId(), item->getFirstPortID());
        unsigned int reportId = item->getFirstReportID();
        if(reportId != 0)
            LOGI("=== ceid:%d, prtid:%d", item->getEventId(), reportId);
        else
            LOGI("=== ceid:%d, prtid:--", item->getEventId());
    }
    
MYREPLY:
@@ -2028,10 +2052,10 @@
    ISECS2Item* pBody = pRecv->getBody();
    if (pBody == nullptr || pBody->getType() != SITYPE::L) ER_PARAM_ERROR;
    unsigned int DATAID;
    unsigned short DATAID;
    unsigned char PTN;
    const char* pszCarrierAction, *pszCarrierId;
    pBody->getSubItemU4(0, DATAID);
    pBody->getSubItemU2(0, DATAID);
    pBody->getSubItemString(1, pszCarrierAction);
    pBody->getSubItemString(2, pszCarrierId);
    pBody->getSubItemU1(3, PTN);
@@ -2052,7 +2076,9 @@
    pErrItem->addU4Item(ERRCODE, "ERRCODE");
    pErrItem->addItem(strError.c_str(), "ERRTEXT");
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S3F18 (SysByte=%u)", pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
    
    return 0;
@@ -2153,7 +2179,9 @@
    }
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S7F20 (SysByte=%u)", pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
    return 0;
@@ -2317,7 +2345,9 @@
MYREPLY:
    pReplyItemAck->setU1(bCreateOk ? 0 : 1, "OBJACK");
    m_pPassive->sendMessage(pReply);
    LOGI("<HSMS>[SECS Msg SEND]S14F10 (SysByte=%u)", pReply->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pReply->getHeader()->sessionId, pReply->getHeader()->sType, pReply->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pReply->toString());
    HSMS_Destroy1Message(pReply);
@@ -2336,7 +2366,7 @@
    // è§£é‡Šæ•°æ®ï¼Œå¾—到CProcessJob
    ISECS2Item* pItemPjs, * pItemPj,* pItemCarriers, * pItemCarrier, *pItemSlots, *pItemRecipes;
    unsigned int DATAID;
    unsigned short DATAID;
    const char* pszPrjobid, *pszMF, *pszCarrierId, *pszRecipeName;
    std::string strCarrierId;
    unsigned int len;
@@ -2344,7 +2374,7 @@
    std::vector<unsigned char> slots;
    std::vector<SERVO::CProcessJob*> pjs;
    if (!pBody->getSubItemU4(0, DATAID)) return ER_PARAM_ERROR;
    if (!pBody->getSubItemU2(0, DATAID)) return ER_PARAM_ERROR;
    pItemPjs = pBody->getSubItem(1);
    if (pItemPjs == nullptr) return ER_PARAM_ERROR;
    for (int i = 0; i < pItemPjs->getSubItemSize(); i++) {
@@ -2416,7 +2446,9 @@
        }
    }
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SECS Msg SEND]S16F16 (SysByte=%u)", pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LOGI("<HSMS>[SEND]%s", pMessage->toString());
    HSMS_Destroy1Message(pMessage);
@@ -2468,9 +2500,6 @@
    }
    SERVO::CReport* pReport = pEvent->getFirstReport();
    if (pReport == nullptr) {
        return ER_UNLINK_EVENT_REPORT;
    }
    Lock();
@@ -2482,14 +2511,16 @@
    // pItem->addU2Item(++DATAID, "DATAID");        // æ ¹æ®åˆ«çš„æ—¥å¿—显示DATAID恒为0,所以我们先照使用0
    pItem->addU2Item(0, "DATAID");
    pItem->addU4Item(CEID, "CEID");
    ISECS2Item* pItemList1 = pItem->addItem();
    ISECS2Item* pItemList2 = pItemList1->addItem();
    pItemList2->addU4Item(pReport->getReportId(), "RPTID");
    ISECS2Item* pItemList3 = pItemList2->addItem();
    ISECS2Item* pItemList1 = pItem->addItem(); // L[n] reports
    if (pReport != nullptr) {
        ISECS2Item* pItemList2 = pItemList1->addItem();
        pItemList2->addU4Item(pReport->getReportId(), "RPTID");
        ISECS2Item* pItemList3 = pItemList2->addItem();
    auto vars = pReport->getVariables();
    for (auto var : vars) {
        addVariableValueToItem(pItemList3, var);
        auto vars = pReport->getVariables();
        for (auto var : vars) {
            addVariableValueToItem(pItemList3, var);
        }
    }
    pAction->setSendMessage(pMessage);
    if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
@@ -2604,4 +2635,19 @@
    return requestEventReportSend("LoadPortNotAssoc");
}
int CHsmsPassive::requestEventReportSend_ProcessDataReport()
{
    return requestEventReportSend("ProcessDataReport");
}
int CHsmsPassive::requestEventReportSend_SubEqpStart()
{
    return requestEventReportSend("SubEqpStart");
}
int CHsmsPassive::requestEventReportSend_SubEqpEnd()
{
    return requestEventReportSend("SubEqpEnd");
}
SourceCode/Bond/Servo/HsmsPassive.h
@@ -219,6 +219,9 @@
    int requestEventReportSend_Panel_End();
    int requestEventReportSend_OCR_PanelID_Read_OK();
    int requestEventReportSend_LoadPortNotAssoc();
    int requestEventReportSend_ProcessDataReport();
    int requestEventReportSend_SubEqpStart();
    int requestEventReportSend_SubEqpEnd();
private:
    void replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName);
SourceCode/Bond/Servo/Model.cpp
@@ -480,6 +480,20 @@
        }
        notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment);
    };
    masterListener.onProcessStateChanged = [&](void* pMaster, SERVO::CEquipment* pEquipment, int slotNo, SERVO::PROCESS_STATE state) {
        // SubEqpStart/SubEqpEnd: align to log's EV_SubEqpStart/EV_SubEqpEnd stage (no report payload required).
        (void)pMaster;
        if (pEquipment != nullptr) {
            m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str());
        }
        m_hsmsPassive.setVariableValue("SubEqpSlot", slotNo);
        if (state == SERVO::PROCESS_STATE::Processing) {
            m_hsmsPassive.requestEventReportSend_SubEqpStart();
        }
        else if (state == SERVO::PROCESS_STATE::Complete) {
            m_hsmsPassive.requestEventReportSend_SubEqpEnd();
        }
    };
    masterListener.onCTRoundEnd = [&](void* pMaster, int round) {
        m_configuration.setContinuousTransferCount(round);
    };
@@ -509,6 +523,9 @@
    masterListener.onPanelEnd = [&](void* pMaster, void* pPanel) {
        m_hsmsPassive.setVariableValue("PanelEndID", ((SERVO::CGlass*)pPanel)->getID().c_str());
        m_hsmsPassive.requestEventReportSend_Panel_End();
        // Placeholder payload to match log shape: EV_PROCESS_DATA_REPORT can carry a single A-string (may be empty).
        m_hsmsPassive.setVariableValue("ProcessDataReportText", "");
        m_hsmsPassive.requestEventReportSend_ProcessDataReport();
        auto& db = GlassLogDb::Instance();
        db.insertFromCGlass((*(SERVO::CGlass*)pPanel));
        SERVO::CGlass* pBuddy = ((SERVO::CGlass*)pPanel)->getBuddy();
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -3,6 +3,9 @@
301,AccessMode_To_Auto,,(301)
600,ControlStateChanged,,(600)
700,ProcessStateChanged,,(700)
10018,ProcessDataReport,,(33)
10015,SubEqpStart,,(10015)
10016,SubEqpEnd,,(10016)
10000,RecipeChanged,,(10000)
10030,CarrierArrived,,(10300)
10031,CarrierRemoved,,(10300)
SourceCode/Bond/x64/Debug/ReportList.txt
@@ -1,4 +1,5 @@
RPTID,(VID1,VID2,...)
33,(5017)
300,(1,300)
301,(1,300)
600,(500,600,601)
@@ -30,3 +31,5 @@
50012,(5014)
50013,(5015)
50014,(5016)
10015,(5018,5019)
10016,(5018,5019)
SourceCode/Bond/x64/Debug/VariableList.txt
@@ -51,6 +51,9 @@
5014,VCRPanelID,A20,Panel id,来自读码器
5015,ReadyToReleasePortId,U1,"Port ID"
5016,LoadPortNotAssocPortId,U1,"Port ID"
5017,ProcessDataReportText,A50,EV_PROCESS_DATA_REPORT payload string (placeholder)
5018,SubEqpName,A20,Equipment name for EV_SubEqpStart/EV_SubEqpEnd
5019,SubEqpSlot,U1,Slot number for EV_SubEqpStart/EV_SubEqpEnd
10200,SlotMap,U2,SlotMap(Scan)
10201,SlotMapScan,U2,SlotMap(Scan)
10202,SlotMapDownload,U2,SlotMap(Download)
SourceCode/Bond/x64/Debug/test.ini
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
[SimEap]
; Enable/disable simulator (1=on, 0=off)
Enabled=1
; Step interval in milliseconds
IntervalMs=2000
; Run a single step once. Change Step value to trigger again.
; 0 means do nothing.
Step=1