已修改7个文件
174 ■■■■ 文件已修改
Document/VariableList.txt 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/ReportList.txt 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/VariableList.txt 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/VariableList.txt
@@ -1,6 +1,16 @@
SVID,SV Name,SV Format,SV Remark
100,PortTransferState,U1,"0=OutOfService\r\n1=TransferBlocked\r\n2=ReadyToLoad\r\n3=ReadyToUnload\r\n4=InService\r\n5=TransferReady"
300,AccessMode,U1,"1=Manual\r\n2=Auto"
10000,CarrierID_P1,A50,Carrier ID for Port 1
10001,CarrierID_P2,A50,Carrier ID for Port 2
10002,CarrierID_P3,A50,Carrier ID for Port 3
10003,CarrierID_P4,A50,Carrier ID for Port 4
100,PortTransferState_P1,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
101,PortTransferState_P2,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
102,PortTransferState_P3,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
103,PortTransferState_P4,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
300,AccessMode_P1,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
301,AccessMode_P2,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
302,AccessMode_P3,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
303,AccessMode_P4,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
500,Clock,A50,
600,CurrentControlState,U1,"0:Offline:equipment\r\n1:Offline-Attempt\r\n2:Online\r\n3:Offline:host\r\n4:Online:Local\r\n5:Online:Remote"
601,PreviousControlState,U1,
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -3771,7 +3771,32 @@
int CHsmsPassive::requestEventReportSend_OCR_PanelID_Read_OK()
{
    return requestEventReportSend("OCR_PanelID_Read_OK");
    return requestEventReportSend_OCR_PanelID_Read(1);
}
int CHsmsPassive::requestEventReportSend_OCR_PanelID_Read(short vcrResult)
{
    const char* eventName = "OCR_PanelID_Read_OK";
    switch (vcrResult) {
    case 1: // OK & Match
        eventName = "OCR_PanelID_Read_OK";
        break;
    case 2: // OK & Mismatch
        eventName = "OCR_PanelID_Read_Mismatch";
        break;
    case 3: // Fail & KeyIn Match
        eventName = "OCR_PanelID_Read_NG";
        break;
    case 4: // Fail & KeyIn Mismatch
        eventName = "OCR_PanelID_Read_NG_Mismatch";
        break;
    default:
        LOGE("<CHsmsPassive>Unknown VCR result=%d, fallback to OCR_PanelID_Read_OK", vcrResult);
        eventName = "OCR_PanelID_Read_OK";
        break;
    }
    return requestEventReportSend(eventName);
}
int CHsmsPassive::requestEventReportSend_LoadPortNotAssoc()
SourceCode/Bond/Servo/HsmsPassive.h
@@ -235,6 +235,7 @@
    int requestEventReportSend_Panel_Start();
    int requestEventReportSend_Panel_End();
    int requestEventReportSend_OCR_PanelID_Read_OK();
    int requestEventReportSend_OCR_PanelID_Read(short vcrResult);
    int requestEventReportSend_LoadPortNotAssoc();
    int requestEventReportSend_ProcessDataReport();
    int requestEventReportSend_SubEqpStart();
SourceCode/Bond/Servo/Model.cpp
@@ -333,11 +333,24 @@
                    return CAACK_5;
                }
                const short scanMap = pLoadPort->getScanCassetteMap();
                const short downloadMap = pLoadPort->getDownloadCassetteMap();
                m_hsmsPassive.withVariableLock([&] {
                    m_hsmsPassive.setVariableValue("SlotMapScan", pLoadPort->getScanCassetteMap());
                    m_hsmsPassive.setVariableValue("SlotMapDownload", pLoadPort->getDownloadCassetteMap());
                    m_hsmsPassive.requestEventReportSend_SlotMapVerificationOK();
                    m_hsmsPassive.setVariableValue("SlotMapScan", scanMap);
                    m_hsmsPassive.setVariableValue("SlotMapDownload", downloadMap);
                    if (scanMap != downloadMap) {
                        m_hsmsPassive.requestEventReportSend_SlotMapVerificationNG();
                        m_hsmsPassive.requestEventReportSend("SlotMapMismatch");
                    }
                    else {
                        m_hsmsPassive.requestEventReportSend_SlotMapVerificationOK();
                    }
                });
                if (scanMap != downloadMap) {
                    strErrorTxt = "rejected - SlotMap mismatch";
                    return CAACK_5;
                }
                // Host 确认 SlotMap 后再开始加工/流程
                m_master.proceedWithCarrier(portIndex);
@@ -512,9 +525,9 @@
        if (pReport != nullptr) {
            m_hsmsPassive.withVariableLock([&] {
                m_hsmsPassive.setVariableValue("VCRPanelID", pReport->getGlassId().c_str());
                int nRet = m_hsmsPassive.requestEventReportSend_OCR_PanelID_Read_OK();
                int nRet = m_hsmsPassive.requestEventReportSend_OCR_PanelID_Read(pReport->getVcrResult());
                if (nRet != ER_NOERROR) {
                    LOGE("<CModel>requestEventReportSend_OCR_PanelID_Read_OK failed, ret=%d", nRet);
                    LOGE("<CModel>requestEventReportSend_OCR_PanelID_Read failed, ret=%d", nRet);
                }
            });
        }
@@ -660,9 +673,15 @@
        // Unified PortStateChange event + SV maintenance
        if (pLoadPort != nullptr) {
            const unsigned int portIndex = pLoadPort->getIndex() + 1;
            char stateVid[64] = {0};
            char modeVid[64] = {0};
            sprintf_s(stateVid, "PortTransferState_P%u", portIndex);
            sprintf_s(modeVid, "AccessMode_P%u", portIndex);
            m_hsmsPassive.withVariableLock([&] {
                m_hsmsPassive.setVariableValue("PortTransferState", (__int64)status); // maintain SVID=100
                m_hsmsPassive.setVariableValue("PortStateChangePortId", pLoadPort->getID());
                m_hsmsPassive.setVariableValue(stateVid, (__int64)status);
                m_hsmsPassive.setVariableValue(modeVid, (__int64)pLoadPort->getPortMode());
                m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                m_hsmsPassive.setVariableValue("PortState", (__int64)status);
                m_hsmsPassive.requestEventReportSend("PortStateChange");
            });
@@ -671,7 +690,10 @@
        if (status == PORT_INUSE) {
            m_hsmsPassive.withVariableLock([&] {
                if (pLoadPort != nullptr) {
                    m_hsmsPassive.setVariableValue("CarrierID", pLoadPort->getCassetteId().c_str());
                    const unsigned int portIndex = pLoadPort->getIndex() + 1;
                    char carrierVid[64] = {0};
                    sprintf_s(carrierVid, "CarrierID_P%u", portIndex);
                    m_hsmsPassive.setVariableValue(carrierVid, pLoadPort->getCassetteId().c_str());
                    if (prevStatus != PORT_INUSE && pLoadPort->isCompareMapsBeforeProceeding()) {
                        // TODO(Host协商):
                        // 文档中标明:1-Empty,3-Exist,因此我们可能需要将uint的map转换为list上传 
@@ -686,7 +708,7 @@
            SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
            m_hsmsPassive.withVariableLock([&] {
                if (pLoadPort != nullptr) {
                    m_hsmsPassive.setVariableValue("BlockedPortId", pLoadPort->getID());
                    m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                }
                m_hsmsPassive.requestEventReportSend_Port_Blocked();
            });
@@ -695,7 +717,7 @@
            SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
            m_hsmsPassive.withVariableLock([&] {
                if (pLoadPort != nullptr) {
                    m_hsmsPassive.setVariableValue("LoadReadyPortId", pLoadPort->getID());
                    m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                }
                m_hsmsPassive.requestEventReportSend_Port_Load_Ready();
            });
@@ -704,9 +726,9 @@
            SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
            m_hsmsPassive.withVariableLock([&] {
                if (pLoadPort != nullptr) {
                    m_hsmsPassive.setVariableValue("UnloadReadyPortId", pLoadPort->getID());
                    m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                    if (prevStatus == PORT_INUSE) {
                        m_hsmsPassive.setVariableValue("ReadyToReleasePortId", pLoadPort->getID());
                        m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                        m_hsmsPassive.requestEventReportSend_Port_Ready_To_Release();
                    }
                }
@@ -717,7 +739,7 @@
            SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
            m_hsmsPassive.withVariableLock([&] {
                if (pLoadPort != nullptr) {
                    m_hsmsPassive.setVariableValue("LoadPortNotAssocPortId", pLoadPort->getID());
                    m_hsmsPassive.setVariableValue("PortId", pLoadPort->getID());
                }
                m_hsmsPassive.requestEventReportSend_LoadPortNotAssoc();
            });
@@ -781,6 +803,10 @@
        auto sendSv = [&](const auto& vidMap, const char* evName) {
            const size_t count = (std::min)(params.size(), vidMap.size());
            m_hsmsPassive.withVariableLock([&] {
                if (pEquipment != nullptr) {
                    m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str());
                }
                m_hsmsPassive.setVariableValue("SubEqpSlot", 0);
                m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
                for (size_t idx = 0; idx < count; ++idx) {
                    const std::string val = formatParamValue(params[idx]);
@@ -823,6 +849,10 @@
        auto sendProcess = [&](const auto& vidMap, const char* evName) {
            const size_t count = (std::min)(params.size(), vidMap.size());
            m_hsmsPassive.withVariableLock([&] {
                if (pEquipment != nullptr) {
                    m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str());
                }
                m_hsmsPassive.setVariableValue("SubEqpSlot", 0);
                m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
                for (size_t idx = 0; idx < count; ++idx) {
                    const std::string val = formatParamValue(params[idx]);
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -19,6 +19,7 @@
10061,CheckSlotMap,,(10061)
10062,SlotMapVerificationOK,,(10062)
10063,SlotMapVerificationNG,,(10062)
10064,SlotMapMismatch,,(10062)
10071,GlassIDReadWaitingForHost,,(10071)
10072,GlassIDReadVerificationOK,,(10072)
10073,GlassIDReadVerificationNG,,(10072)
@@ -54,7 +55,10 @@
50008,Port_Unload_Ready,,(50008)
50009,Port_Load_Ready,,(50009)
50010,Port_Blocked,,(50010)
50011,OCR_PanelID_Read_OK,扫码事件上报,(50012)
50011,OCR_PanelID_Read_OK,,(50012)
50015,OCR_PanelID_Read_NG,,(50012)
50016,OCR_PanelID_Read_Mismatch,,(50012)
50017,OCR_PanelID_Read_NG_Mismatch,,(50012)
50012,Port_Ready_To_Release,,(50013)
50020,PortStateChange,,(50020)
60000,BonderSVData,,(60000)
SourceCode/Bond/x64/Debug/ReportList.txt
@@ -3,16 +3,16 @@
300,(1,300)
301,(1,300)
600,(500,600,601)
700,(500,700,701)
700,(500,5018,5019,700,701)
10000,(200,201)
10300,(1,10000)
10051,(1,10000,10100,10101)
10061,(1,10000,10100,10200)
10062,(1,10000,10100,10201,10202)
10071,(1,10000,10100,10203,20000)
10072,(1,10000,10100,10203,20000,20001)
10080,(1,10000,10100)
20000,(1,10000,10203)
10300,(1,10000,10001,10002,10003)
10051,(1,10000,10001,10002,10003,10100,10101)
10061,(1,10000,10001,10002,10003,10100,10200)
10062,(1,10000,10001,10002,10003,10100,10201,10202)
10071,(1,10000,10001,10002,10003,10100,10203,20000)
10072,(1,10000,10001,10002,10003,10100,10203,20000,20001)
10080,(1,10000,10001,10002,10003,10100)
20000,(1,5018,5019,10000,10001,10002,10003,10203)
30000,(1,30000,30001)
31000,(1,31000,31001)
40000,(1,10203,20000)
@@ -24,25 +24,26 @@
50005,(5007)
50006,(5008)
50007,(5009)
50008,(5010)
50009,(5011)
50010,(5012)
50008,(5022)
50009,(5022)
50010,(5022)
50011,(5013)
50012,(5014)
50013,(5015)
50014,(5016)
50020,(500,5020,5021)
60000,(500,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018)
61000,(500,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121)
62000,(500,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217)
63000,(500,6300,6301,6302,6303,6304)
64000,(500,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419)
65000,(500,6500,6501,6502,6503)
66000,(500,6600,6601)
67000,(500,6700,6701,6702,6703)
50013,(5022)
50014,(5022)
50020,(500,5022,5021)
60000,(500,5018,5019,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018)
61000,(500,5018,5019,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121)
62000,(500,5018,5019,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217)
63000,(500,5018,5019,6300,6301,6302,6303,6304)
64000,(500,5018,5019,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419)
65000,(500,5018,5019,6500,6501,6502,6503)
66000,(500,5018,5019,6600,6601)
67000,(500,5018,5019,6700,6701,6702,6703)
10015,(5018,5019)
10016,(5018,5019)
10017,(500,5018)
10017,(500,5018,5019)
12000,(500,5018,5019)
12001,(500,5018,5019)
12002,(500,5018,5019)
SourceCode/Bond/x64/Debug/VariableList.txt
@@ -1,6 +1,16 @@
SVID,SV Name,SV Format,SV Remark
100,PortTransferState,U1,0=OutOfService;1=ReadyToLoad/LoadRequest;2=Loaded;3=InUse/LoadComplete;4=ReadyToUnload/UnloadRequest;5=Empty/UnloadComplete;6=TransferBlocked
300,AccessMode,U1,0=Auto;1=Manual
10000,CarrierID_P1,A50,Carrier ID for Port 1
10001,CarrierID_P2,A50,Carrier ID for Port 2
10002,CarrierID_P3,A50,Carrier ID for Port 3
10003,CarrierID_P4,A50,Carrier ID for Port 4
100,PortTransferState_P1,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
101,PortTransferState_P2,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
102,PortTransferState_P3,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
103,PortTransferState_P4,U1,1=LoadReady;2=Loaded;3=InUse;4=UnloadReady;5=Empty;6=Blocked
300,AccessMode_P1,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
301,AccessMode_P2,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
302,AccessMode_P3,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
303,AccessMode_P4,U1,0=OutOfService;1=TransferBlocked;2=ReadyToLoad;3=ReadyToUnload;4=InService;5=TransferReady
500,Clock,A50,Current timestamp string
600,CurrentControlState,U1,0=OfflineEquipment;1=OfflineAttempt;2=Online;3=OfflineHost;4=OnlineLocal;5=OnlineRemote
601,PreviousControlState,U1,Previous control state (same code set as CurrentControlState)
@@ -23,14 +33,9 @@
5007,PanelEndID,A20,Panel end ID
5008,CJStartID,A20,CJ start ID
5009,CJEndID,A20,CJ end ID
5010,UnloadReadyPortId,U1,Port ID (ReadyToUnload)
5011,LoadReadyPortId,U1,Port ID (ReadyToLoad)
5012,BlockedPortId,U1,Port ID (TransferBlocked)
5014,VCRPanelID,A20,Panel ID from reader
5015,ReadyToReleasePortId,U1,Port ID (ReadyToRelease)
5016,LoadPortNotAssocPortId,U1,Port ID (LoadPortNotAssoc)
5017,ProcessDataReportText,A50,EV_PROCESS_DATA_REPORT payload (placeholder)
5018,SubEqpName,A20,Sub equipment name for SubEqp events
5019,SubEqpSlot,U1,Slot number for SubEqp events
5020,PortStateChangePortId,U1,Port ID for PortStateChange
5021,PortState,U1,Port transfer/state code for PortStateChange
5022,PortId,U1,Port ID for Port events