| SourceCode/Bond/Servo/SECSRuntimeManager.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/SECSRuntimeManager.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/SECSRuntimeManager.cpp
@@ -1401,8 +1401,8 @@ // 创建 EqpPPID 表 std::string createTableSQL = "CREATE TABLE IF NOT EXISTS EqpPPID (" "BitNo INTEGER PRIMARY KEY AUTOINCREMENT, " "PPID INTEGER NULL);"; "RecipeNo INTEGER PRIMARY KEY, " "PPID TEXT NULL);"; if (!m_pDB->executeQuery(createTableSQL)) { throw std::runtime_error("Failed to create EqpPPID table."); } @@ -1412,7 +1412,7 @@ if (nCount == 0) { // 插入初始数据(512 行) for (int nBitNo = 0; nBitNo < 512; ++nBitNo) { std::string insertSQL = "INSERT INTO EqpPPID (BitNo) VALUES (" + std::to_string(nBitNo) + ");"; std::string insertSQL = "INSERT INTO EqpPPID (RecipeNo) VALUES (" + std::to_string(nBitNo) + ");"; if (!m_pDB->executeQuery(insertSQL)) { throw std::runtime_error("Failed to insert data into EqpPPID table."); } @@ -1420,6 +1420,74 @@ } } bool SECSRuntimeManager::updatePPIDForRecipe(int nRecipeNo, const std::string& strPPID) { std::lock_guard<std::mutex> lock(m_mutex); if (m_pDB == nullptr) { return false; } // 转义单引号,防止 SQL 注入 std::string safePPID = strPPID; size_t pos = 0; while ((pos = safePPID.find('\'', pos)) != std::string::npos) { safePPID.insert(pos, 1, '\''); pos += 2; } std::string updateSQL = "UPDATE EqpPPID SET PPID = '" + safePPID + "' WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";"; return m_pDB->executeQuery(updateSQL); } std::string SECSRuntimeManager::getPPIDForRecipe(int nRecipeNo) { std::lock_guard<std::mutex> lock(m_mutex); if (m_pDB == nullptr) { return ""; } std::string querySQL = "SELECT PPID FROM EqpPPID WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";"; std::vector<std::vector<std::string>> results = m_pDB->fetchResults(querySQL); if (!results.empty() && !results[0].empty()) { return results[0][0]; } return ""; } int SECSRuntimeManager::getRecipeForPPID(std::string strPPID) { std::lock_guard<std::mutex> lock(m_mutex); if (m_pDB == nullptr) { return -1; } std::string querySQL = "SELECT RecipeNo FROM EqpPPID WHERE PPID = '" + strPPID + "';"; std::vector<std::vector<std::string>> results = m_pDB->fetchResults(querySQL); if (!results.empty() && !results[0].empty()) { return std::stoi(results[0][0]); } return -1; } bool SECSRuntimeManager::deletePPIDForRecipe(int nRecipeNo) { std::lock_guard<std::mutex> lock(m_mutex); if (m_pDB == nullptr) { return false; } std::string deleteSQL = "UPDATE EqpPPID SET PPID = NULL WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";"; return m_pDB->executeQuery(deleteSQL); } bool SECSRuntimeManager::deletePPIDForAllRecipes() { std::lock_guard<std::mutex> lock(m_mutex); if (m_pDB == nullptr) { return false; } std::string deleteSQL = "UPDATE EqpPPID SET PPID = NULL WHERE RecipeNo BETWEEN 0 AND 511;"; return m_pDB->executeQuery(deleteSQL); } // 初始化 RPTID 表 void SECSRuntimeManager::initRPTIDTable() { std::lock_guard<std::mutex> lock(m_mutex); SourceCode/Bond/Servo/SECSRuntimeManager.h
@@ -389,6 +389,16 @@ */ void initPPIDTable(); bool updatePPIDForRecipe(int nRecipeNo, const std::string& strPPID); std::string getPPIDForRecipe(int nRecipeNo); int getRecipeForPPID(std::string strPPID); bool deletePPIDForRecipe(int nRecipeNo); bool deletePPIDForAllRecipes(); /** * 初始化 RPTID 表 */ SourceCode/Bond/Servo/Servo.cpp
@@ -130,35 +130,35 @@ // 初始化生产履历管理器 try { if (!ProductionLogManager::getInstance().initProductionTable()) { AfxMessageBox("初始化生产履历管理器失败!"); return FALSE; } } catch (const std::exception& ex) { CString errorMsg; errorMsg.Format(_T("初始化生产履历管理器失败:%s"), CString(ex.what())); AfxMessageBox(errorMsg, MB_ICONERROR); return FALSE; } // 初始化SECS运行设置管理库 //try { // if (!SECSRuntimeManager::getInstance().initRuntimeSetting()) { // AfxMessageBox("初始化SECS运行设置失败!"); // if (!ProductionLogManager::getInstance().initProductionTable()) { // AfxMessageBox("初始化生产履历管理器失败!"); // return FALSE; // } //} //catch (const std::exception& ex) { // CString errorMsg; // errorMsg.Format(_T("初始化SECS运行设置失败:%s"), CString(ex.what())); // errorMsg.Format(_T("初始化生产履历管理器失败:%s"), CString(ex.what())); // AfxMessageBox(errorMsg, MB_ICONERROR); // return FALSE; //} // 初始化SECS运行设置管理库 try { if (!SECSRuntimeManager::getInstance().initRuntimeSetting()) { AfxMessageBox("初始化SECS运行设置失败!"); return FALSE; } } catch (const std::exception& ex) { CString errorMsg; errorMsg.Format(_T("初始化SECS运行设置失败:%s"), CString(ex.what())); AfxMessageBox(errorMsg, MB_ICONERROR); return FALSE; } CServoDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); SourceCode/Bond/Servo/Servo.rcBinary files differ
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -60,7 +60,6 @@ // CServoDlg 对话框 CServoDlg::CServoDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_SERVO_DIALOG, pParent) { @@ -81,8 +80,6 @@ void CServoDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON_LOG, m_btnLog); DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm); } BEGIN_MESSAGE_MAP(CServoDlg, CDialogEx) @@ -666,6 +663,4 @@ for (int i = 0; i < 4; i++) { pPages[i]->ShowWindow(i == index ? SW_SHOW : SW_HIDE); } } } SourceCode/Bond/Servo/ServoDlg.h
@@ -54,8 +54,6 @@ HICON m_hIcon; COLORREF m_crBkgnd; HBRUSH m_hbrBkgnd; CBlButton m_btnLog; CBlButton m_btnAlarm; CPanelMaster* m_pPanelMaster; CPanelEquipment* m_pPanelEquipment; CPanelAttributes* m_pPanelAttributes;