chenluhua1980
2026-01-13 1cc8012fac8508796e50653fb26bcc003bc02b9d
1.实现DVID的加载,获取等;
已添加2个文件
已修改10个文件
603 ■■■■ 文件已修改
SourceCode/Bond/EAPSimulator/CHsmsActive.cpp 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/EAPSimulator/CHsmsActive.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/EAPSimulator/Resource.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CDataVariable.h 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/DataVariableList.txt 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/VariableList.txt 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/EAPSimulator/CHsmsActive.cpp
@@ -373,6 +373,17 @@
    return 0;
}
int CHsmsActive::hsmsQueryAllDataVariables()
{
    IMessage* pMessage = nullptr;
    int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 21, ++m_nSystemByte);
    // Host sends L:0 (empty list) to request all DVIDs.
    pMessage->getBody()->addItem(); // empty list
    m_pActive->sendMessage(pMessage);
    HSMS_Destroy1Message(pMessage);
    return 0;
}
int CHsmsActive::hsmsQueryAllCollectionEvents()
{
    IMessage* pMessage = nullptr;
SourceCode/Bond/EAPSimulator/CHsmsActive.h
@@ -87,6 +87,7 @@
    // æŸ¥è¯¢å˜é‡
    int hsmsSelectedEquipmentStatusRequest(unsigned int SVID);
    int hsmsQueryAllStatusVariables();      // S1F11
    int hsmsQueryAllDataVariables();        // S1F21
    int hsmsQueryAllCollectionEvents();     // S1F23
    // æŸ¥è¯¢PPID List
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.cpp
@@ -105,6 +105,7 @@
    ON_BN_CLICKED(IDC_BUTTON_QUERY_CONTROL_STATE, &CEAPSimulatorDlg::OnBnClickedButtonQueryControlState)
    ON_BN_CLICKED(IDC_BUTTON_QUERY_PROCESS_STATE, &CEAPSimulatorDlg::OnBnClickedButtonQueryProcessState)
    ON_BN_CLICKED(IDC_BUTTON_QUERY_ALL_SVID, &CEAPSimulatorDlg::OnBnClickedButtonQueryAllSvid)
    ON_BN_CLICKED(IDC_BUTTON_QUERY_ALL_DVID, &CEAPSimulatorDlg::OnBnClickedButtonQueryAllDvid)
    ON_BN_CLICKED(IDC_BUTTON_QUERY_ALL_CEID, &CEAPSimulatorDlg::OnBnClickedButtonQueryAllCeid)
    ON_BN_CLICKED(IDC_BUTTON_QUERY_CURRENT_RECIPE, &CEAPSimulatorDlg::OnBnClickedButtonQueryCurrentRecipe)
    ON_BN_CLICKED(IDC_BUTTON_PP_REQUEST, &CEAPSimulatorDlg::OnBnClickedButtonPpRequest)
@@ -274,6 +275,18 @@
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            rc.left, rc.top, rc.Width(), rc.Height(),
            m_hWnd, (HMENU)IDC_BUTTON_QUERY_ALL_CEID, AfxGetInstanceHandle(), nullptr);
        if (hBtn != nullptr) {
            ::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
        }
    }
    // S1F21 QueryAllDVID
    {
        CRect rc(14 + 140 + 5, 152, 14 + 140 + 5 + 140, 152 + 14);
        MapDialogRect(&rc);
        HWND hBtn = ::CreateWindow(_T("BUTTON"), _T("S1F21_QueryAllDVID"),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            rc.left, rc.top, rc.Width(), rc.Height(),
            m_hWnd, (HMENU)IDC_BUTTON_QUERY_ALL_DVID, AfxGetInstanceHandle(), nullptr);
        if (hBtn != nullptr) {
            ::SendMessage(hBtn, WM_SETFONT, (WPARAM)GetFont()->GetSafeHandle(), TRUE);
        }
@@ -652,6 +665,11 @@
    theApp.m_model.m_pHsmsActive->hsmsQueryAllStatusVariables();
}
void CEAPSimulatorDlg::OnBnClickedButtonQueryAllDvid()
{
    theApp.m_model.m_pHsmsActive->hsmsQueryAllDataVariables();
}
void CEAPSimulatorDlg::OnBnClickedButtonQueryAllCeid()
{
    theApp.m_model.m_pHsmsActive->hsmsQueryAllCollectionEvents();
SourceCode/Bond/EAPSimulator/EAPSimulatorDlg.h
@@ -71,6 +71,7 @@
    afx_msg void OnBnClickedButtonQueryControlState();
    afx_msg void OnBnClickedButtonQueryProcessState();
    afx_msg void OnBnClickedButtonQueryAllSvid();
    afx_msg void OnBnClickedButtonQueryAllDvid();
    afx_msg void OnBnClickedButtonQueryAllCeid();
    afx_msg void OnBnClickedButtonQueryCurrentRecipe();
    afx_msg void OnBnClickedButtonPpRequest();
SourceCode/Bond/EAPSimulator/Resource.h
@@ -71,6 +71,7 @@
#define IDC_BUTTON_QUERY_CURRENT_RECIPE 1053
#define IDC_EDIT_PPID_REQ               1054
#define IDC_BUTTON_PP_REQUEST           1055
#define IDC_BUTTON_QUERY_ALL_DVID       1056
// Next default values for new objects
// 
@@ -78,7 +79,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        146
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1056
#define _APS_NEXT_CONTROL_VALUE         1057
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
SourceCode/Bond/Servo/CDataVariable.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
#pragma once
#include "CVariable.h"
namespace SERVO {
    // Data Variable:语义同 CVariable,但用于 DVID(数据变量)集合。
    class CDataVariable : public CVariable
    {
    public:
        using CVariable::CVariable; // å¤ç”¨åŸºç±»æž„造
        ~CDataVariable() = default;
    };
}
SourceCode/Bond/Servo/CMaster.cpp
@@ -2214,6 +2214,34 @@
                    fireLoadPortStatus(PORT_LOAD_READY);
                    fireLoadPortStatus(PORT_EMPTY); // will also raise LoadPortNotAssoc via Model
                    break;
                case 24: { // æ¨¡æ‹Ÿ SV Data(示例:Bonder1)
                    SERVO::CEquipment* pEq = getEquipment(EQ_ID_Bonder1);
                    if (pEq != nullptr && m_listener.onSVDataReport != nullptr) {
                        static int counter = 0;
                        ++counter;
                        std::vector<CParam> params;
                        params.emplace_back("MockSV_Temp", "1", "C", 25 + (counter % 5));
                        params.emplace_back("MockSV_Pressure", "2", "kPa", 100 + (counter % 3));
                        params.emplace_back("MockSV_Speed", "3", "mm/s", 50 + (counter % 7));
                        m_listener.onSVDataReport(this, pEq, params);
                        LOGI("<Master>SIM_EAP step24: mock SVData (Bonder1), params=%zu", params.size());
                    }
                    break;
                }
                case 25: { // æ¨¡æ‹Ÿ Process Data(示例:Bonder1)
                    SERVO::CEquipment* pEq = getEquipment(EQ_ID_Bonder1);
                    if (pEq != nullptr && m_listener.onProcessDataReport != nullptr) {
                        static int counter = 0;
                        ++counter;
                        std::vector<CParam> params;
                        params.emplace_back("MockProc_CycleTime", "1", "s", 30 + (counter % 4));
                        params.emplace_back("MockProc_MaxTemp", "2", "C", 200 + (counter % 6));
                        params.emplace_back("MockProc_Result", "3", "", (counter % 2) ? 1 : 0);
                        m_listener.onProcessDataReport(this, pEq, params);
                        LOGI("<Master>SIM_EAP step25: mock ProcessData (Bonder1), params=%zu", params.size());
                    }
                    break;
                }
                default:
                    break;
                }
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -14,6 +14,47 @@
#include <regex>
#include <sstream>
// ---- Encoding helpers ----
static bool hasUtf8Bom(const std::string& s)
{
    return s.size() >= 3 &&
        static_cast<unsigned char>(s[0]) == 0xEF &&
        static_cast<unsigned char>(s[1]) == 0xBB &&
        static_cast<unsigned char>(s[2]) == 0xBF;
}
static bool isLikelyUtf8(const std::string& s)
{
    // Simple heuristic: try to convert; if success without errors, treat as UTF-8.
    int wlen = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), (int)s.size(), nullptr, 0);
    return wlen > 0;
}
static CStringW Utf8ToWide(const char* psz)
{
    if (psz == nullptr) return L"";
    int wlen = MultiByteToWideChar(CP_UTF8, 0, psz, -1, nullptr, 0);
    if (wlen <= 0) return L"";
    CStringW ws;
    LPWSTR buf = ws.GetBufferSetLength(wlen - 1);
    MultiByteToWideChar(CP_UTF8, 0, psz, -1, buf, wlen);
    ws.ReleaseBuffer();
    return ws;
}
static CStringW AnsiToWide(const char* psz)
{
    if (psz == nullptr) return L"";
    int wlen = MultiByteToWideChar(CP_ACP, 0, psz, -1, nullptr, 0);
    if (wlen <= 0) return L"";
    CStringW ws;
    LPWSTR buf = ws.GetBufferSetLength(wlen - 1);
    MultiByteToWideChar(CP_ACP, 0, psz, -1, buf, wlen);
    ws.ReleaseBuffer();
    return ws;
}
// ---- End helpers ----
// ControlState values (keep in sync with Model::ControlState / VariableList.txt)
static constexpr uint8_t kControlStateOnlineRemote = 5;
@@ -424,9 +465,106 @@
    return 0;
}
int CHsmsPassive::loadDataVarialbles(const char* pszFilepath)
{
    if (pszFilepath == NULL) {
        return -1;
    }
    m_strDataVariableFilepath = pszFilepath;
    m_bDataVariableUtf8 = false;
    m_bDataVariableUtf8Bom = false;
    CFile file;
    if (!file.Open(pszFilepath, CFile::modeRead | CFile::shareDenyNone)) {
        return -1;
    }
    const ULONGLONG nLen = file.GetLength();
    if (nLen == 0) {
        return -1;
    }
    std::string buffer;
    buffer.resize(static_cast<size_t>(nLen));
    file.Read(buffer.data(), static_cast<UINT>(nLen));
    file.Close();
    if (hasUtf8Bom(buffer)) {
        m_bDataVariableUtf8 = true;
        m_bDataVariableUtf8Bom = true;
        buffer = buffer.substr(3);
    }
    else if (isLikelyUtf8(buffer)) {
        m_bDataVariableUtf8 = true;
    }
    CStringW content = m_bDataVariableUtf8 ? Utf8ToWide(buffer.c_str()) : AnsiToWide(buffer.c_str());
    // Regex: DVID,DV Name,DV Format,DV Remark
    std::wregex pattern(L"^\\d+,[^,]*,[^,]*,.*");
    std::vector<SERVO::CDataVariable*> dataVars;
    int index;
    CStringW strLine, strId, strName, strFormat, strRemark;
    std::wstringstream ss(content.GetString());
    auto narrowFromW = [](const CStringW& s) -> std::string {
        int need = WideCharToMultiByte(CP_ACP, 0, s, -1, nullptr, 0, nullptr, nullptr);
        if (need <= 0) return {};
        std::string out(static_cast<size_t>(need - 1), '\0');
        WideCharToMultiByte(CP_ACP, 0, s, -1, out.data(), need, nullptr, nullptr);
        return out;
    };
    std::wstring line;
    while (std::getline(ss, line, L'\n')) {
        strLine = line.c_str();
        strLine.Trim();
        if (strLine.IsEmpty()) continue;
        if (!std::regex_match(static_cast<LPCWSTR>(strLine), pattern)) {
            continue;
        }
        index = strLine.Find(L",", 0);
        if (index < 0) continue;
        strId = strLine.Left(index);
        strLine = strLine.Right(strLine.GetLength() - index - 1);
        index = strLine.Find(L",", 0);
        if (index < 0) continue;
        strName = strLine.Left(index);
        strLine = strLine.Right(strLine.GetLength() - index - 1);
        index = strLine.Find(L",", 0);
        if (index < 0) continue;
        strFormat = strLine.Left(index);
        strRemark = strLine.Right(strLine.GetLength() - index - 1);
        strRemark.Replace(L"\\r\\n", L"\r\n");
        std::string sId = narrowFromW(strId);
        std::string sName = narrowFromW(strName);
        std::string sFormat = narrowFromW(strFormat);
        std::string sRemark = narrowFromW(strRemark);
        SERVO::CDataVariable* pVarialble = new SERVO::CDataVariable(
            sId.c_str(),
            sName.c_str(),
            sFormat.c_str(),
            sRemark.c_str());
        dataVars.push_back(pVarialble);
    }
    if (!dataVars.empty()) {
        clearAllDataVariabel();
        for (auto item : dataVars) {
            m_dataVariabels.push_back(item);
        }
    }
    return 0;
}
std::vector<SERVO::CVariable*>& CHsmsPassive::getVariables()
{
    return m_variabels;
}
std::vector<SERVO::CDataVariable*>& CHsmsPassive::getDataVariables()
{
    return m_dataVariabels;
}
unsigned int CHsmsPassive::getMaxVariableId() const
@@ -458,7 +596,30 @@
            return item;
        }
    }
    // try numeric id string
    if (pszName != nullptr && *pszName) {
        const int id = atoi(pszName);
        if (id > 0) {
            return getVariable(id);
        }
    }
    return nullptr;
}
SERVO::CDataVariable* CHsmsPassive::getDataVariable(int dvid)
{
    for (auto item : m_dataVariabels) {
        if (item->getVarialbleId() == (unsigned int)dvid) return item;
    }
    return nullptr;
}
SERVO::CDataVariable* CHsmsPassive::getDataVariable(const char* pszName)
{
    for (auto item : m_dataVariabels) {
        if (item->getName().compare(pszName) == 0) return item;
    }
    return nullptr;
}
@@ -483,6 +644,14 @@
        delete item;
    }
    m_variabels.clear();
}
void CHsmsPassive::clearAllDataVariabel()
{
    for (auto item : m_dataVariabels) {
        delete item;
    }
    m_dataVariabels.clear();
}
CStringA WideToUtf8(const CStringW& ws)
@@ -675,6 +844,53 @@
    }
    file.Close();
    return 0;
}
int CHsmsPassive::writeDataVariablesToFile(const std::string& filepath)
{
    if (filepath.empty()) return -3;
    CFile file;
    if (!file.Open(filepath.c_str(), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone)) {
        return -3;
    }
    const std::string headerAnsi = "DVID,DV Name,DV Format,DV Remark\r\n";
    if (m_bDataVariableUtf8) {
        if (m_bDataVariableUtf8Bom) {
            const BYTE bom[3] = { 0xEF, 0xBB, 0xBF };
            file.Write(bom, 3);
        }
        CStringA header = AnsiToUtf8(headerAnsi);
        file.Write(header.GetString(), header.GetLength());
    }
    else {
        file.Write(headerAnsi.data(), (UINT)headerAnsi.size());
    }
    for (auto v : m_dataVariabels) {
        if (v == nullptr) continue;
        std::string lineAnsi;
        lineAnsi.reserve(256);
        lineAnsi += std::to_string(v->getVarialbleId());
        lineAnsi.push_back(',');
        lineAnsi += v->getName();
        lineAnsi.push_back(',');
        lineAnsi += SERVO::CVariable::formatToString(v->getFormat());
        lineAnsi.push_back(',');
        lineAnsi += v->getRemark();
        lineAnsi.append("\r\n");
        if (m_bDataVariableUtf8) {
            CStringA outLine = AnsiToUtf8(lineAnsi);
            file.Write(outLine.GetString(), outLine.GetLength());
        }
        else {
            file.Write(lineAnsi.data(), (UINT)lineAnsi.size());
        }
    }
    file.Close();
    return 0;
}
@@ -1324,6 +1540,9 @@
        else if (nStream == 1 && pHeader->function == 11) {
            replyStatusVariableNamelistRequest(pMessage);
        }
        else if (nStream == 1 && pHeader->function == 21) {
            replyDataVariableNamelistRequest(pMessage);
        }
        else if (nStream == 1 && pHeader->function == 23) {
            replyCollectionEventNamelistRequest(pMessage);
        }
@@ -1941,6 +2160,66 @@
    return ER_NOERROR;
}
// S1F21/S1F22 - Data Variable Namelist
int CHsmsPassive::replyDataVariableNamelistRequest(IMessage* pRecv)
{
    if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) {
        return ER_NOTSELECT;
    }
    std::vector<unsigned short> reqIds;
    ISECS2Item* pBody = pRecv->getBody();
    if (pBody != nullptr && pBody->getType() == SITYPE::L) {
        const int sz = pBody->getSubItemSize();
        for (int i = 0; i < sz; ++i) {
            unsigned short id = 0;
            if (pBody->getSubItemU2(i, id)) {
                reqIds.push_back(id);
            }
        }
    }
    std::vector<unsigned short> dvids;
    std::set<unsigned short> requested(reqIds.begin(), reqIds.end());
    Lock();
    if (reqIds.empty()) {
        for (auto v : m_dataVariabels) {
            if (v) dvids.push_back(static_cast<unsigned short>(v->getVarialbleId()));
        }
    }
    else {
        for (auto id : requested) dvids.push_back(id);
    }
    Unlock();
    IMessage* pMessage = NULL;
    HSMS_Create1Message(pMessage, m_nSessionId, 1, 22, pRecv->getHeader()->systemBytes);
    ASSERT(pMessage);
    ISECS2Item* pList = pMessage->getBody(); // L[n] of {DVID, DVNAME, UNITS}
    for (auto id : dvids) {
        ISECS2Item* pEntry = pList->addItem();
        pEntry->addU2Item(id, "DVID");
        SERVO::CDataVariable* v = getDataVariable((int)id);
        if (v != nullptr) {
            pEntry->addItem(v->getName().c_str(), "DVNAME");
            pEntry->addItem(v->getRemark().c_str(), "UNITS");
        }
        else {
            pEntry->addItem("", "DVNAME");
            pEntry->addItem("", "UNITS");
        }
    }
    m_pPassive->sendMessage(pMessage);
    LOGI("<HSMS>[SEND]sessionId:%d, sType:%d systemBytes:%d",
        pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes);
    LogSecsMessageBrief("<HSMS>[SEND]", pMessage);
    HSMS_Destroy1Message(pMessage);
    return ER_NOERROR;
}
// S1F23
int CHsmsPassive::replyCollectionEventNamelistRequest(IMessage* pRecv)
{
SourceCode/Bond/Servo/HsmsPassive.h
@@ -9,6 +9,7 @@
#include "CCollectionEvent.h"
#include "ProcessJob.h"
#include "CControlJob.h"
#include "CDataVariable.h"
#define EQCONSTANT_VALUE_MAX    64
@@ -146,14 +147,19 @@
    // ä»Žæ–‡ä»¶ä¸­åŠ è½½CVariable列表
    int loadVarialbles(const char* pszFilepath);
    // ä»Žæ–‡ä»¶ä¸­åŠ è½½CDataVariable列表
    int loadDataVarialbles(const char* pszFilepath);
    // å–å¾—CVariable列表
    std::vector<SERVO::CVariable*>& getVariables();
    unsigned int getMaxVariableId() const;
    std::vector<SERVO::CDataVariable*>& getDataVariables();
    // å–得指定Variable
    SERVO::CVariable* getVariable(int variableId);
    SERVO::CVariable* getVariable(const char* pszName);
    SERVO::CDataVariable* getDataVariable(int dvid);
    SERVO::CDataVariable* getDataVariable(const char* pszName);
    int getCurrentControlState();
    bool isHostCommandAllowed();
    int deleteVariable(int variableId);
@@ -239,6 +245,7 @@
    int replyEstablishCommunications(IMessage* pRecv);
    int replySelectedEquipmentStatusData(IMessage* pRecv);
    int replyStatusVariableNamelistRequest(IMessage* pRecv);  // S1F11/S1F12
    int replyDataVariableNamelistRequest(IMessage* pRecv);    // S1F21/S1F22
    int replyCollectionEventNamelistRequest(IMessage* pRecv); // S1F23/S1F24
    int replyOnLine(IMessage* pRecv);
    int replyOffLine(IMessage* pRecv);
@@ -265,8 +272,10 @@
    inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
    int onRecvMsg(IMessage* pMessage);
    void clearAllVariabel();
    void clearAllDataVariabel();
    std::vector<unsigned int> parseVidList(CString& strNums);
    int writeVariablesToFile(const std::string& filepath);
    int writeDataVariablesToFile(const std::string& filepath);
    int writeReportsToFile(const std::string& filepath);
    int writeCollectionEventsToFile(const std::string& filepath);
@@ -289,6 +298,9 @@
    std::string m_strVariableFilepath;
    bool m_bVariableUtf8{ false };
    bool m_bVariableUtf8Bom{ false };
    std::string m_strDataVariableFilepath;
    bool m_bDataVariableUtf8{ false };
    bool m_bDataVariableUtf8Bom{ false };
    std::string m_strReportFilepath;
    bool m_bReportUtf8{ false };
    bool m_bReportUtf8Bom{ false };
@@ -305,6 +317,8 @@
private:
    // CVariable vector
    std::vector<SERVO::CVariable*> m_variabels;
    // CDataVariable vector
    std::vector<SERVO::CDataVariable*> m_dataVariabels;
    // CReport vector
    std::vector<SERVO::CReport*> m_reports;
SourceCode/Bond/Servo/Model.cpp
@@ -311,6 +311,8 @@
    CString strVarialbleFile;
    strVarialbleFile.Format(_T("%s\\VariableList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir);
    m_hsmsPassive.loadVarialbles((LPTSTR)(LPCTSTR)strVarialbleFile);
    strVarialbleFile.Format(_T("%s\\DataVariableList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir);
    m_hsmsPassive.loadDataVarialbles((LPTSTR)(LPCTSTR)strVarialbleFile);
    setControlState(m_currentControlState);
    refreshDerivedSVs();
    m_hsmsPassive.init(this, "APP", 7000);
SourceCode/Bond/x64/Debug/DataVariableList.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
DVID,DV Name,DV Format,DV Remark
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: ä¸Šè…”温度1
6006,Bonder_SV_UpperTemp2,A20,Bonder SV: ä¸Šè…”温度2
6007,Bonder_SV_UpperTemp3,A20,Bonder SV: ä¸Šè…”温度3
6008,Bonder_SV_UpperTemp4,A20,Bonder SV: ä¸Šè…”温度4
6009,Bonder_SV_UpperTemp5,A20,Bonder SV: ä¸Šè…”温度5
6010,Bonder_SV_UpperTemp6,A20,Bonder SV: ä¸Šè…”温度6
6011,Bonder_SV_LowerTemp1,A20,Bonder SV: ä¸‹è…”温度1
6012,Bonder_SV_LowerTemp2,A20,Bonder SV: ä¸‹è…”温度2
6013,Bonder_SV_LowerTemp3,A20,Bonder SV: ä¸‹è…”温度3
6014,Bonder_SV_LowerTemp4,A20,Bonder SV: ä¸‹è…”温度4
6015,Bonder_SV_LowerTemp5,A20,Bonder SV: ä¸‹è…”温度5
6016,Bonder_SV_LowerTemp6,A20,Bonder SV: ä¸‹è…”温度6
6017,Bonder_SV_HeatingRemaining,A20,Bonder SV: åŠ çƒ­å‰©ä½™æ—¶é—´
6018,Bonder_SV_PressingRemaining,A20,Bonder SV: åŽ‹åˆå‰©ä½™æ—¶é—´
6100,Bonder_PD_AlignDelay,A20,Bonder PD: å¯¹ä½å»¶æ—¶
6101,Bonder_PD_DwellTime,A20,Bonder PD: ä¿åŽ‹æ—¶é—´
6102,Bonder_PD_BreakVacuumDelay,A20,Bonder PD: ç ´çœŸç©ºå»¶æ—¶
6103,Bonder_PD_TurboPumpStartDelay,A20,Bonder PD: åˆ†å­æ³µå¯åŠ¨å»¶æ—¶
6104,Bonder_PD_AttachVacuumDelay,A20,Bonder PD: æŠ½çœŸç©ºå»¶æ—¶
6105,Bonder_PD_HeatingWaitDelay,A20,Bonder PD: ç­‰å¾…加热延时
6106,Bonder_PD_BladderPressureSet,A20,Bonder PD: æ°”囊压力设定
6107,Bonder_PD_BladderPressurizeRate,A20,Bonder PD: æ°”囊加压速率
6108,Bonder_PD_BladderDepressurizeRate,A20,Bonder PD: æ°”囊泄压速率
6109,Bonder_PD_AttachPressureLimit,A20,Bonder PD: è´´åˆåŽ‹åŠ›ä¸Šé™
6110,Bonder_PD_UpperZTorqueSpeed,A20,Bonder PD: ä¸Šè…”Z预贴合速度
6111,Bonder_PD_UpperTempSet,A20,Bonder PD: ä¸Šè…”温度设定
6112,Bonder_PD_LowerTempSet,A20,Bonder PD: ä¸‹è…”温度设定
6113,Bonder_PD_PreAttachSpeed,A20,Bonder PD: é¢„贴合速度
6114,Bonder_PD_AttachSpeed,A20,Bonder PD: è´´åˆé€Ÿåº¦
6115,Bonder_PD_UpperHeatDistance,A20,Bonder PD: ä¸Šè…”加热距离
6116,Bonder_PD_AttachPressIn,A20,Bonder PD: è´´åˆåŽ‹å…¥åŠ›
6117,Bonder_PD_UpperBreakVacuumDist,A20,Bonder PD: ä¸Šè…”破真空距离
6118,Bonder_PD_LowerPinBreakVacuumDist,A20,Bonder PD: ä¸‹é¡¶é’ˆç ´çœŸç©ºè·ç¦»
6119,Bonder_PD_LowerPinHeatDistance,A20,Bonder PD: ä¸‹é¡¶é’ˆåŠ çƒ­è·ç¦»
6120,Bonder_PD_PumpGaugeSet,A20,Bonder PD: çœŸç©ºæ³µçœŸç©ºè®¾å®š
6121,Bonder_PD_TurboReachSet,A20,Bonder PD: åˆ†å­æ³µåˆ°è¾¾è®¾å®š
6200,VacuumBake_SV_A_ProcessStep,A20,VacuumBake SV A: å·¥è‰ºè¿è¡Œæ­¥éª¤
6201,VacuumBake_SV_A_ChamberVacuum,A20,VacuumBake SV A: è…”体真空
6202,VacuumBake_SV_A_Temp1,A20,VacuumBake SV A: æ¸©åº¦1
6203,VacuumBake_SV_A_Temp2,A20,VacuumBake SV A: æ¸©åº¦2
6204,VacuumBake_SV_A_Temp4,A20,VacuumBake SV A: æ¸©åº¦4
6205,VacuumBake_SV_A_Temp5,A20,VacuumBake SV A: æ¸©åº¦5
6206,VacuumBake_SV_A_Temp6,A20,VacuumBake SV A: æ¸©åº¦6
6207,VacuumBake_SV_A_Temp7,A20,VacuumBake SV A: æ¸©åº¦7
6208,VacuumBake_SV_A_BakeRemaining,A20,VacuumBake SV A: çƒ˜çƒ¤å‰©ä½™æ—¶é—´
6209,VacuumBake_SV_B_ProcessStep,A20,VacuumBake SV B: å·¥è‰ºè¿è¡Œæ­¥éª¤
6210,VacuumBake_SV_B_ChamberVacuum,A20,VacuumBake SV B: è…”体真空
6211,VacuumBake_SV_B_Temp1,A20,VacuumBake SV B: æ¸©åº¦1
6212,VacuumBake_SV_B_Temp2,A20,VacuumBake SV B: æ¸©åº¦2
6213,VacuumBake_SV_B_Temp4,A20,VacuumBake SV B: æ¸©åº¦4
6214,VacuumBake_SV_B_Temp5,A20,VacuumBake SV B: æ¸©åº¦5
6215,VacuumBake_SV_B_Temp6,A20,VacuumBake SV B: æ¸©åº¦6
6216,VacuumBake_SV_B_Temp7,A20,VacuumBake SV B: æ¸©åº¦7
6217,VacuumBake_SV_B_BakeRemaining,A20,VacuumBake SV B: çƒ˜çƒ¤å‰©ä½™æ—¶é—´
6300,VacuumBake_PD_ParamIndex,A20,VacuumBake PD: å‚数序号
6301,VacuumBake_PD_HeatTime,A20,VacuumBake PD: åŠ çƒ­æ—¶é—´
6302,VacuumBake_PD_BreakVacuumTime,A20,VacuumBake PD: ç ´çœŸç©ºæ—¶é—´
6303,VacuumBake_PD_VacuumReach,A20,VacuumBake PD: çœŸç©ºè¾¾åˆ°å€¼
6304,VacuumBake_PD_TempSet,A20,VacuumBake PD: ä¸»æŽ§æ¸©åº¦è®¾å®š
6400,BakeCooling_SV_A_BakeStep,A20,BakeCooling SV A: çƒ˜çƒ¤æ­¥éª¤
6401,BakeCooling_SV_A_Temp1,A20,BakeCooling SV A: æ¸©åº¦1
6402,BakeCooling_SV_A_Temp2,A20,BakeCooling SV A: æ¸©åº¦2
6403,BakeCooling_SV_A_Temp4,A20,BakeCooling SV A: æ¸©åº¦4
6404,BakeCooling_SV_A_Temp5,A20,BakeCooling SV A: æ¸©åº¦5
6405,BakeCooling_SV_A_Temp6,A20,BakeCooling SV A: æ¸©åº¦6
6406,BakeCooling_SV_A_Temp7,A20,BakeCooling SV A: æ¸©åº¦7
6407,BakeCooling_SV_A_BakeRemaining,A20,BakeCooling SV A: çƒ˜çƒ¤å‰©ä½™æ—¶é—´
6408,BakeCooling_SV_A_CoolStep,A20,BakeCooling SV A: å†·å´æ­¥éª¤
6409,BakeCooling_SV_A_CoolRemaining,A20,BakeCooling SV A: å†·å´å‰©ä½™æ—¶é—´
6410,BakeCooling_SV_B_BakeStep,A20,BakeCooling SV B: çƒ˜çƒ¤æ­¥éª¤
6411,BakeCooling_SV_B_Temp1,A20,BakeCooling SV B: æ¸©åº¦1
6412,BakeCooling_SV_B_Temp2,A20,BakeCooling SV B: æ¸©åº¦2
6413,BakeCooling_SV_B_Temp4,A20,BakeCooling SV B: æ¸©åº¦4
6414,BakeCooling_SV_B_Temp5,A20,BakeCooling SV B: æ¸©åº¦5
6415,BakeCooling_SV_B_Temp6,A20,BakeCooling SV B: æ¸©åº¦6
6416,BakeCooling_SV_B_Temp7,A20,BakeCooling SV B: æ¸©åº¦7
6417,BakeCooling_SV_B_BakeRemaining,A20,BakeCooling SV B: çƒ˜çƒ¤å‰©ä½™æ—¶é—´
6418,BakeCooling_SV_B_CoolStep,A20,BakeCooling SV B: å†·å´æ­¥éª¤
6419,BakeCooling_SV_B_CoolRemaining,A20,BakeCooling SV B: å†·å´å‰©ä½™æ—¶é—´
6500,BakeCooling_PD_ParamIndex,A20,BakeCooling PD: å‚数序号
6501,BakeCooling_PD_TimeOrTemp1,A20,BakeCooling PD: æ—¶é—´/温度1
6502,BakeCooling_PD_TimeOrTemp2,A20,BakeCooling PD: æ—¶é—´/温度2
6503,BakeCooling_PD_Reserved,A20,BakeCooling PD: é¢„ç•™
6600,Measurement_SV_ProcessStep,A20,Measurement SV: å·¥è‰ºè¿è¡Œæ­¥éª¤
6601,Measurement_SV_AOIScore,A20,Measurement SV: AOI分数
6700,Measurement_PD_ParamIndex,A20,Measurement PD: å‚数序号
6701,Measurement_PD_Time,A20,Measurement PD: æ—¶é—´
6702,Measurement_PD_Value1,A20,Measurement PD: æµ‹é‡å€¼1
6703,Measurement_PD_Value2,A20,Measurement PD: æµ‹é‡å€¼2
SourceCode/Bond/x64/Debug/VariableList.txt
@@ -14,33 +14,6 @@
8103,BakeCoolingCurrentRecipe,A50,
8104,MeasurementCurrentRecipe,A50,
8105,EFEMCurrentRecipe,A50,
2000,RbRAxisTorque,I2,机器人R轴扭矩
2001,RbLAxisTorque,U1,机器人L轴扭矩
2002,RbZAxisTorque,U1,机器人Z轴扭矩
2003,RbTHAxisTorque,U1,机器人TH轴扭矩
2004,RbXAxisTorque,U1,机器人X轴扭矩
2005,AxisX111,U1,X111相机前移栽电机扭矩
2006,AxisX112,U1,X112相机后移栽电机扭矩
2007,AxisU113,U1,U113产品旋转电机扭矩
2008,AxisX114,U1,X114产品左整列电机扭矩
2009,AxisY121,U1,Y121产品右整列电机扭矩
2010,AxisY122,U1,Y122产品前整列电机扭矩
2011,AxisY123,U1,Y123产品后阵列电机扭矩
2012,MainAir,U1,总进气压力值
2013,MainVacuum,U1,总真空压力值
2014,RbMainVacuum,U1,机器人真空值
2015,LPMainVacuum,U1,LP真空值#D265
2016,LPMainAir,U1,LP压空值
2017,ALVacuum,U1,Aligner真空值
2018,FFU1RPM,U1,FFU1转速
2019,FFU2RPM,U1,FFU2转速
2020,FFU3RPM,U1,FFU3转速
2021,FFU4RPM,U1,FFU4转速
2022,ESDValue,I2,静电检测值
2023,OCREnable,U1,"OCR使能:O:开启 1:屏蔽"
2024,CCDEnable,U1,"CCD使能:O:开启 1:屏蔽"
2025,FFUParameter,U1,FFU设定值
5000,CarrierID,A20,卡匣ID
5001,CJobSpace,U1,CJ Space
5002,PJobSpace,U1,PJ Space
5003,PJQueued,L,PJ Queued
@@ -50,112 +23,17 @@
5007,PanelEndID,A20,PanelEndID
5008,CJStartID,A20,CJStartID
5009,CJEndID,A20,CJEndID
5010,UnloadReadyPortId,U1,"Port ID"
5011,LoadReadyPortId,U1,"Port ID"
5012,BlockedPortId,U1,"Port ID"
5013,TestVID,U1,测试添加变量55
5014,VCRPanelID,A20,Panel id,来自读码器
5015,ReadyToReleasePortId,U1,"Port ID"
5016,LoadPortNotAssocPortId,U1,"Port ID"
5010,UnloadReadyPortId,U1,Port ID
5011,LoadReadyPortId,U1,Port ID
5012,BlockedPortId,U1,Port ID
5014,VCRPanelID,A20,Panel id, comes from reader
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
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
5020,PortStateChangePortId,U1,Port ID for PortStateChange
5021,PortState,U1,Port transfer/state code for PortStateChange
10200,SlotMap,U2,SlotMap(Scan)
10201,SlotMapScan,U2,SlotMap(Scan)
10202,SlotMapDownload,U2,SlotMap(Download)