6c373f004d79b28c735bbee2bd391bd412270535..6e0341c6356cdb6e527fbd89d1dc876f4e47ce46
2026-01-09 chenluhua1980
1.Trace Data,ProcessData, SVData等上报
6e0341 对比 | 目录
2026-01-09 chenluhua1980
1.工节数据上报。
03dc81 对比 | 目录
已修改10个文件
239 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CEquipment.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CParam.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CParam.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/ReportList.txt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/VariableList.txt 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp
@@ -1608,8 +1608,11 @@
        std::vector<CParam> tempParams;
        this->parsingProcessData((const char*)rawData.data(), rawData.size(), tempParams);
        int n = processData.getTotalParameter();
        std::vector<CParam> params(tempParams.begin(), tempParams.begin() + min(n, (int)tempParams.size()));
        std::vector<CParam> params(tempParams.begin(), tempParams.begin() + (std::min)(n, (int)tempParams.size()));
        pGlass->addParams(params);
        if (m_listener.onProcessDataReport != nullptr) {
            m_listener.onProcessDataReport(this, params);
        }
        
        // 关联的Glass也要更新
        CGlass* pBuddy = pGlass->getBuddy();
@@ -1617,6 +1620,9 @@
        if (pBuddy != nullptr) {
            LOGI("<Equipment-%s>decodeProcessDataReport addParams pBuddy=%x %s", getName().c_str(), pBuddy, pGlass->getID().c_str());
            pBuddy->addParams(params);
            if (m_listener.onProcessDataReport != nullptr) {
                m_listener.onProcessDataReport(this, params);
            }
        }
        return nRet;
SourceCode/Bond/Servo/CEquipment.h
@@ -58,6 +58,7 @@
    typedef std::function<void(void* pEiuipment, int nSlotNo, PROCESS_STATE prevState, PROCESS_STATE state)> ONPROCESSSTATE;
    typedef std::function<void(void* pEiuipment, short scanMap, short downMap)> ONMAPMISMATCH;
    typedef std::function<void(void* pEiuipment, short status, __int64 data)> ONPORTSTATUSCHANGED;
    typedef std::function<void(void* pEiuipment, const std::vector<CParam>& params)> ONPROCESSDATAREPORT;
    
    typedef struct _EquipmentListener
    {
@@ -73,6 +74,7 @@
        ONPORTSTATUSCHANGED    onPortStatusChanged;
        ONVCREVENTREPORT    onSVDataReport;
        ONVCREVENTREPORT    onPanelDataReport;
        ONPROCESSDATAREPORT    onProcessDataReport;
    } EquipmentListener;
SourceCode/Bond/Servo/CMaster.cpp
@@ -1561,6 +1561,11 @@
                m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, prevState, state);
            }
        };
        listener.onProcessDataReport = [&](void* pEquipment, const std::vector<CParam>& params) {
            if (m_listener.onProcessDataReport != nullptr) {
                m_listener.onProcessDataReport(this, (CEquipment*)pEquipment, params);
            }
        };
        listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
            LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。",
                ((CEquipment*)pEquipment)->getName().c_str(), scanMap, downMap);
@@ -1781,6 +1786,10 @@
                strOut.append(szBuffer);
            }
            LOGD("<CMaster-%s>SVDataReport:%s", ((CEquipment*)pEquipment)->getName().c_str(), strOut.c_str());
            if (m_listener.onSVDataReport != nullptr) {
                m_listener.onSVDataReport(this, (CEquipment*)pEquipment, params);
            }
        };
        listener.onPanelDataReport = [&](void* pEquipment, void* pContext) {
            LOGD("<CMaster-%s>onPanelDataReport", ((CEquipment*)pEquipment)->getName().c_str());
SourceCode/Bond/Servo/CMaster.h
@@ -59,6 +59,8 @@
    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 prevState, PROCESS_STATE state)> ONPROCESSSTATECHANGED;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONPROCESSDATAREPORTEX;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONSVDATAREPORT;
    typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND;
    typedef std::function<void(void* pMaster, void* pj)> ONPJSTART;
    typedef std::function<void(void* pMaster)> ONCONTROLJOBCHANGED;
@@ -73,6 +75,8 @@
        ONROBOTTASKEVENT        onRobotTaskEvent;
        ONLOADPORTSTATUSCHANGED    onLoadPortStatusChanged;
        ONPROCESSSTATECHANGED   onProcessStateChanged;
        ONSVDATAREPORT          onSVDataReport;
        ONPROCESSDATAREPORTEX   onProcessDataReport;
        ONCTROUNDEND            onCTRoundEnd;
        ONPJSTART               onCjStart;
        ONPJSTART               onCjEnd;
@@ -205,7 +209,7 @@
        bool canCompleteControlJob();
        bool canDeleteControlJob();
        
        // DAQ Bridge鐩稿叧
        // DAQ Bridge 相关
        Collector* getCollector() const { return m_pCollector; }
    private:
@@ -243,10 +247,9 @@
        int m_nLastError;
        std::string m_strLastError;
        // 在开始工艺前是否先需要先比较map
        // 在开始工艺前是否需要先比较 map
        BOOL m_isCompareMapsBeforeProceeding;
        BOOL m_bJobMode;
        // 千传圈数计数
        int m_nContinuousTransferCount;
@@ -254,7 +257,7 @@
        int m_nContinuousWorkingPort;
        int m_nContinuousWorkingSlot;
        // 新增已经开始处理的ProcessJob列表
        // 已经开始处理的 ProcessJob 列表
        std::vector<CProcessJob*> m_inProcesJobs;
        std::vector<CProcessJob*> m_completeProcessJobs;
        std::vector<CGlass*> m_queueGlasses;
SourceCode/Bond/Servo/CParam.cpp
@@ -53,7 +53,7 @@
    return m_nValueType;
}
int CParam::getIntValue()
int CParam::getIntValue() const
{
    return m_nValue;
}
@@ -63,7 +63,7 @@
    m_nValue = value;
}
double CParam::getDoubleValue()
double CParam::getDoubleValue() const
{
    if(m_nValueType == PVT_DOUBLE)
        return m_fValue;
SourceCode/Bond/Servo/CParam.h
@@ -17,9 +17,9 @@
    std::string& getName();
    std::string& getUnit();
    int getValueType();
    int getIntValue();
    int getIntValue() const;
    void setIntValue(int value);
    double getDoubleValue();
    double getDoubleValue() const;
    void setDoubleValue(double value);
    void Serialize(CArchive& ar);
SourceCode/Bond/Servo/Model.cpp
@@ -9,6 +9,11 @@
#include "TransferManager.h"
#include "RecipeManager.h"
#include "GlassLogDb.h"
#include "CParam.h"
#include <algorithm>
#include <iomanip>
#include <sstream>
#include <array>
#include <map>
@@ -302,6 +307,12 @@
    SERVO::MasterListener masterListener;
    auto formatParamValue = [](const CParam& p) {
        std::ostringstream oss;
        oss.setf(std::ios::fixed);
        oss << std::setprecision(4) << p.getDoubleValue();
        return oss.str();
    };
    masterListener.onMasterStateChanged = [&](void* pMaster, SERVO::MASTERSTATE state) -> void {
        LOGI("<CModel>Master state changed(%d)", (int)state);
        notify(RX_CODE_MASTER_STATE_CHANGED);
@@ -608,6 +619,84 @@
            }
        });
    };
    masterListener.onSVDataReport = [&](void* pMaster, SERVO::CEquipment* pEquipment, const std::vector<CParam>& params) {
        (void)pMaster;
        const int eqId = pEquipment ? pEquipment->getID() : 0;
        auto sendSv = [&](const auto& vidMap, const char* evName) {
            const size_t count = (std::min)(params.size(), vidMap.size());
            m_hsmsPassive.withVariableLock([&] {
                m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
                for (size_t idx = 0; idx < count; ++idx) {
                    const std::string val = formatParamValue(params[idx]);
                    m_hsmsPassive.setVariableValue(std::to_string(vidMap[idx]).c_str(), val.c_str());
                }
                m_hsmsPassive.requestEventReportSend(evName);
            });
        };
        if (eqId == EQ_ID_Bonder1 || eqId == EQ_ID_Bonder2) {
            static constexpr std::array<int, 19> vids = {
                6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
                6010,6011,6012,6013,6014,6015,6016,6017,6018
            };
            sendSv(vids, "BonderSVData");
        }
        else if (eqId == EQ_ID_VACUUMBAKE) {
            static constexpr std::array<int, 18> vids = {
                6200,6201,6202,6203,6204,6205,6206,6207,6208,
                6209,6210,6211,6212,6213,6214,6215,6216,6217
            };
            sendSv(vids, "VacuumBakeSVData");
        }
        else if (eqId == EQ_ID_BAKE_COOLING) {
            static constexpr std::array<int, 20> vids = {
                6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,
                6410,6411,6412,6413,6414,6415,6416,6417,6418,6419
            };
            sendSv(vids, "BakeCoolingSVData");
        }
        else if (eqId == EQ_ID_MEASUREMENT) {
            static constexpr std::array<int, 2> vids = { 6600, 6601 };
            sendSv(vids, "MeasurementSVData");
        }
    };
    masterListener.onProcessDataReport = [&](void* pMaster, SERVO::CEquipment* pEquipment, const std::vector<CParam>& params) {
        (void)pMaster;
        const int eqId = pEquipment ? pEquipment->getID() : 0;
        auto sendProcess = [&](const auto& vidMap, const char* evName) {
            const size_t count = (std::min)(params.size(), vidMap.size());
            m_hsmsPassive.withVariableLock([&] {
                m_hsmsPassive.setVariableValue("Clock", CToolUnits::getCurrentTimeString().c_str());
                for (size_t idx = 0; idx < count; ++idx) {
                    const std::string val = formatParamValue(params[idx]);
                    m_hsmsPassive.setVariableValue(std::to_string(vidMap[idx]).c_str(), val.c_str());
                }
                m_hsmsPassive.requestEventReportSend(evName);
            });
        };
        if (eqId == EQ_ID_Bonder1 || eqId == EQ_ID_Bonder2) {
            static constexpr std::array<int, 22> vids = {
                6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,
                6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121
            };
            sendProcess(vids, "BonderProcessData");
        }
        else if (eqId == EQ_ID_VACUUMBAKE) {
            static constexpr std::array<int, 5> vids = { 6300,6301,6302,6303,6304 };
            sendProcess(vids, "VacuumBakeProcessData");
        }
        else if (eqId == EQ_ID_BAKE_COOLING) {
            static constexpr std::array<int, 4> vids = { 6500,6501,6502,6503 };
            sendProcess(vids, "BakeCoolingProcessData");
        }
        else if (eqId == EQ_ID_MEASUREMENT) {
            static constexpr std::array<int, 4> vids = { 6700,6701,6702,6703 };
            sendProcess(vids, "MeasurementProcessData");
        }
    };
    masterListener.onCTRoundEnd = [&](void* pMaster, int round) {
        m_configuration.setContinuousTransferCount(round);
    };
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -57,6 +57,14 @@
50011,OCR_PanelID_Read_OK,扫码事件上报,(50012)
50012,Port_Ready_To_Release,,(50013)
50020,PortStateChange,,(50020)
60000,BonderSVData,,(60000)
61000,BonderProcessData,,(61000)
62000,VacuumBakeSVData,,(62000)
63000,VacuumBakeProcessData,,(63000)
64000,BakeCoolingSVData,,(64000)
65000,BakeCoolingProcessData,,(65000)
66000,MeasurementSVData,,(66000)
67000,MeasurementProcessData,,(67000)
12000,UnitStart,,(12000)
12001,UnitStateChange,,(12001)
12002,UnitEnd,,(12002)
SourceCode/Bond/x64/Debug/ReportList.txt
@@ -32,6 +32,14 @@
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)
10015,(5018,5019)
10016,(5018,5019)
10017,(500,5018)
SourceCode/Bond/x64/Debug/VariableList.txt
@@ -54,6 +54,102 @@
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
5020,PortStateChangePortId,U1,"Port ID for PortStateChange"
5021,PortState,U1,"Port transfer/state code for PortStateChange"
6000,Bonder_SV_ProcessStep,A20,Bonder SV
6001,Bonder_SV_BladderPressure,A20,Bonder SV
6002,Bonder_SV_UpperChamberPressure,A20,Bonder SV
6003,Bonder_SV_PipeVacuumGauge,A20,Bonder SV
6004,Bonder_SV_ChamberVacuumGauge,A20,Bonder SV
6005,Bonder_SV_UpperTemp1,A20,Bonder SV
6006,Bonder_SV_UpperTemp2,A20,Bonder SV
6007,Bonder_SV_UpperTemp3,A20,Bonder SV
6008,Bonder_SV_UpperTemp4,A20,Bonder SV
6009,Bonder_SV_UpperTemp5,A20,Bonder SV
6010,Bonder_SV_UpperTemp6,A20,Bonder SV
6011,Bonder_SV_LowerTemp1,A20,Bonder SV
6012,Bonder_SV_LowerTemp2,A20,Bonder SV
6013,Bonder_SV_LowerTemp3,A20,Bonder SV
6014,Bonder_SV_LowerTemp4,A20,Bonder SV
6015,Bonder_SV_LowerTemp5,A20,Bonder SV
6016,Bonder_SV_LowerTemp6,A20,Bonder SV
6017,Bonder_SV_HeatingRemaining,A20,Bonder SV
6018,Bonder_SV_PressingRemaining,A20,Bonder SV
6100,Bonder_PD_AlignDelay,A20,Bonder ProcessData
6101,Bonder_PD_DwellTime,A20,Bonder ProcessData
6102,Bonder_PD_BreakVacuumDelay,A20,Bonder ProcessData
6103,Bonder_PD_TurboPumpStartDelay,A20,Bonder ProcessData
6104,Bonder_PD_AttachVacuumDelay,A20,Bonder ProcessData
6105,Bonder_PD_HeatingWaitDelay,A20,Bonder ProcessData
6106,Bonder_PD_BladderPressureSet,A20,Bonder ProcessData
6107,Bonder_PD_BladderPressurizeRate,A20,Bonder ProcessData
6108,Bonder_PD_BladderDepressurizeRate,A20,Bonder ProcessData
6109,Bonder_PD_AttachPressureLimit,A20,Bonder ProcessData
6110,Bonder_PD_UpperZTorqueSpeed,A20,Bonder ProcessData
6111,Bonder_PD_UpperTempSet,A20,Bonder ProcessData
6112,Bonder_PD_LowerTempSet,A20,Bonder ProcessData
6113,Bonder_PD_PreAttachSpeed,A20,Bonder ProcessData
6114,Bonder_PD_AttachSpeed,A20,Bonder ProcessData
6115,Bonder_PD_UpperHeatDistance,A20,Bonder ProcessData
6116,Bonder_PD_AttachPressIn,A20,Bonder ProcessData
6117,Bonder_PD_UpperBreakVacuumDist,A20,Bonder ProcessData
6118,Bonder_PD_LowerPinBreakVacuumDist,A20,Bonder ProcessData
6119,Bonder_PD_LowerPinHeatDistance,A20,Bonder ProcessData
6120,Bonder_PD_PumpGaugeSet,A20,Bonder ProcessData
6121,Bonder_PD_TurboReachSet,A20,Bonder ProcessData
6200,VacuumBake_SV_A_ProcessStep,A20,VacuumBake SV
6201,VacuumBake_SV_A_ChamberVacuum,A20,VacuumBake SV
6202,VacuumBake_SV_A_Temp1,A20,VacuumBake SV
6203,VacuumBake_SV_A_Temp2,A20,VacuumBake SV
6204,VacuumBake_SV_A_Temp4,A20,VacuumBake SV
6205,VacuumBake_SV_A_Temp5,A20,VacuumBake SV
6206,VacuumBake_SV_A_Temp6,A20,VacuumBake SV
6207,VacuumBake_SV_A_Temp7,A20,VacuumBake SV
6208,VacuumBake_SV_A_BakeRemaining,A20,VacuumBake SV
6209,VacuumBake_SV_B_ProcessStep,A20,VacuumBake SV
6210,VacuumBake_SV_B_ChamberVacuum,A20,VacuumBake SV
6211,VacuumBake_SV_B_Temp1,A20,VacuumBake SV
6212,VacuumBake_SV_B_Temp2,A20,VacuumBake SV
6213,VacuumBake_SV_B_Temp4,A20,VacuumBake SV
6214,VacuumBake_SV_B_Temp5,A20,VacuumBake SV
6215,VacuumBake_SV_B_Temp6,A20,VacuumBake SV
6216,VacuumBake_SV_B_Temp7,A20,VacuumBake SV
6217,VacuumBake_SV_B_BakeRemaining,A20,VacuumBake SV
6300,VacuumBake_PD_ParamIndex,A20,VacuumBake ProcessData
6301,VacuumBake_PD_HeatTime,A20,VacuumBake ProcessData
6302,VacuumBake_PD_BreakVacuumTime,A20,VacuumBake ProcessData
6303,VacuumBake_PD_VacuumReach,A20,VacuumBake ProcessData
6304,VacuumBake_PD_TempSet,A20,VacuumBake ProcessData
6400,BakeCooling_SV_A_BakeStep,A20,BakeCooling SV
6401,BakeCooling_SV_A_Temp1,A20,BakeCooling SV
6402,BakeCooling_SV_A_Temp2,A20,BakeCooling SV
6403,BakeCooling_SV_A_Temp4,A20,BakeCooling SV
6404,BakeCooling_SV_A_Temp5,A20,BakeCooling SV
6405,BakeCooling_SV_A_Temp6,A20,BakeCooling SV
6406,BakeCooling_SV_A_Temp7,A20,BakeCooling SV
6407,BakeCooling_SV_A_BakeRemaining,A20,BakeCooling SV
6408,BakeCooling_SV_A_CoolStep,A20,BakeCooling SV
6409,BakeCooling_SV_A_CoolRemaining,A20,BakeCooling SV
6410,BakeCooling_SV_B_BakeStep,A20,BakeCooling SV
6411,BakeCooling_SV_B_Temp1,A20,BakeCooling SV
6412,BakeCooling_SV_B_Temp2,A20,BakeCooling SV
6413,BakeCooling_SV_B_Temp4,A20,BakeCooling SV
6414,BakeCooling_SV_B_Temp5,A20,BakeCooling SV
6415,BakeCooling_SV_B_Temp6,A20,BakeCooling SV
6416,BakeCooling_SV_B_Temp7,A20,BakeCooling SV
6417,BakeCooling_SV_B_BakeRemaining,A20,BakeCooling SV
6418,BakeCooling_SV_B_CoolStep,A20,BakeCooling SV
6419,BakeCooling_SV_B_CoolRemaining,A20,BakeCooling SV
6500,BakeCooling_PD_ParamIndex,A20,BakeCooling ProcessData
6501,BakeCooling_PD_TimeOrTemp1,A20,BakeCooling ProcessData
6502,BakeCooling_PD_TimeOrTemp2,A20,BakeCooling ProcessData
6503,BakeCooling_PD_Reserved,A20,BakeCooling ProcessData
6600,Measurement_SV_ProcessStep,A20,Measurement SV
6601,Measurement_SV_AOIScore,A20,Measurement SV
6700,Measurement_PD_ParamIndex,A20,Measurement ProcessData
6701,Measurement_PD_Time,A20,Measurement ProcessData
6702,Measurement_PD_Value1,A20,Measurement ProcessData
6703,Measurement_PD_Value2,A20,Measurement ProcessData
10200,SlotMap,U2,SlotMap(Scan)
10201,SlotMapScan,U2,SlotMap(Scan)
10202,SlotMapDownload,U2,SlotMap(Download)