From b54cb6d1d8742e94bd79623d4f410b3ff5abde86 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 26 六月 2025 08:47:12 +0800
Subject: [PATCH] 6.定时轮询比特位,修改为只轮询EFEM, Bonder1, Bonder2, BakeCooling, VacuuumBake, Measurent, 其它只是以上的子单元,共用CC-Link的数据块。 7.修改一处转换机械手的放置目标POS时的错误 问题。 8.增加机械手状态和托盘是否有物料的信息打印,以便于创建搬送任务时观察和调试
---
SourceCode/Bond/Servo/RecipeManager.cpp | 63 +++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 1 deletions(-)
diff --git a/SourceCode/Bond/Servo/RecipeManager.cpp b/SourceCode/Bond/Servo/RecipeManager.cpp
index 247cd40..465c1af 100644
--- a/SourceCode/Bond/Servo/RecipeManager.cpp
+++ b/SourceCode/Bond/Servo/RecipeManager.cpp
@@ -56,7 +56,7 @@
device_id INTEGER NOT NULL,
device_name TEXT NOT NULL,
recipe_id INTEGER NOT NULL,
- FOREIGN KEY(ppid) REFERENCES recipes(ppid) ON DELETE CASCADE,
+ FOREIGN KEY(ppid) REFERENCES recipes(ppid) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE (ppid, device_id),
UNIQUE (ppid, device_name)
);
@@ -238,6 +238,25 @@
return recipes;
}
+std::vector<std::string> RecipeManager::getAllPPID() const {
+ std::vector<std::string> vecPPID;
+
+ if (!m_pDB) {
+ return vecPPID;
+ }
+
+ const std::string query = "SELECT ppid FROM recipes ORDER BY ppid;";
+ auto result = m_pDB->fetchResults(query);
+
+ for (const auto& row : result) {
+ if (!row.empty()) {
+ vecPPID.push_back(row[0]);
+ }
+ }
+
+ return vecPPID;
+}
+
RecipeInfo RecipeManager::getRecipeByPPID(const std::string& ppid) {
RecipeInfo info;
auto rows = m_pDB->fetchResults("SELECT ppid, description, create_time FROM recipes WHERE ppid = '" + ppid + "';");
@@ -331,6 +350,48 @@
return addRecipe(recipe);
}
+bool RecipeManager::updatePPID(const std::string& oldPPID, const std::string& newPPID) {
+ if (!m_pDB || oldPPID.empty() || newPPID.empty()) {
+ std::cerr << "[updatePPID] Invalid input." << std::endl;
+ return false;
+ }
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ // 检查是否已经存在相同的 newPPID
+ auto check = m_pDB->fetchResults("SELECT COUNT(*) FROM recipes WHERE ppid = '" + newPPID + "';");
+ if (!check.empty() && !check[0].empty() && check[0][0] != "0") {
+ std::cerr << "[updatePPID] New PPID already exists: " << newPPID << std::endl;
+ return false;
+ }
+
+ m_pDB->executeQuery("BEGIN TRANSACTION;");
+
+ std::ostringstream sql;
+ sql << "UPDATE recipes SET ppid = '" << newPPID << "' WHERE ppid = '" << oldPPID << "';";
+ if (!m_pDB->executeQuery(sql.str())) {
+ std::cerr << "[updatePPID] Failed to update recipes table." << std::endl;
+ m_pDB->executeQuery("ROLLBACK;");
+ return false;
+ }
+
+ m_pDB->executeQuery("COMMIT;");
+ return true;
+}
+
+bool RecipeManager::updateDescription(const std::string& ppid, const std::string& newDescription) {
+ if (!m_pDB || ppid.empty()) {
+ std::cerr << "[updateRecipeDescription] Invalid input." << std::endl;
+ return false;
+ }
+
+ std::ostringstream oss;
+ oss << "UPDATE recipes SET description = '" << newDescription << "' WHERE ppid = '" << ppid << "';";
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+ return m_pDB->executeQuery(oss.str());
+}
+
bool RecipeManager::updateDeviceRecipeIDByID(const std::string& ppid, int nDeviceID, int nNewRecipeID) {
if (!m_pDB || ppid.empty() || nDeviceID <= 0 || nNewRecipeID <= 0) {
return false;
--
Gitblit v1.9.3