From 62a4a8db6c05c98f180ae7f6429a9a232fce6c0c Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 03 七月 2025 17:19:16 +0800
Subject: [PATCH] 1. 重构机器人动画逻辑,采用分帧动画机制,避免在 OnTimer 中阻塞主线程; 2. 动画过程中允许动态中断,确保设备状态变化时可即时响应; 3. 动画结束时自动校正位置与角度,确保最终状态准确一致;

---
 SourceCode/Bond/Servo/SECSRuntimeManager.cpp |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
index 708dcf1..ccbcf77 100644
--- a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
+++ b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
@@ -1420,6 +1420,44 @@
     }
 }
 
+std::vector<std::string> SECSRuntimeManager::getAllPPID() {
+	std::lock_guard<std::mutex> lock(m_mutex);
+	if (m_pDB == nullptr) {
+		return {};
+	}
+
+	std::string querySQL = "SELECT PPID FROM EqpPPID;";
+	auto rows = m_pDB->fetchResults(querySQL);
+
+	std::vector<std::string> vecResult;
+	for (const auto& row : rows) {
+        vecResult.push_back(row[0]);
+	}
+	return vecResult;
+}
+
+void SECSRuntimeManager::setAllPPID(const std::vector<std::string>& vecPPIDList) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) return;
+
+    // 开启事务
+    m_pDB->executeQuery("BEGIN TRANSACTION;");
+
+    for (size_t i = 0; i < vecPPIDList.size(); ++i) {
+        std::string safePPID = vecPPIDList[i];
+        size_t pos = 0;
+        while ((pos = safePPID.find('\'', pos)) != std::string::npos) {
+            safePPID.insert(pos, 1, '\'');
+            pos += 2;
+        }
+        std::string sql = "UPDATE EqpPPID SET PPID = '" + safePPID + "' WHERE RecipeNo = " + std::to_string(i) + ";";
+        m_pDB->executeQuery(sql);
+    }
+
+    // 提交事务
+    m_pDB->executeQuery("COMMIT;");
+}
+
 bool SECSRuntimeManager::updatePPIDForRecipe(int nRecipeNo, const std::string& strPPID) {
     std::lock_guard<std::mutex> lock(m_mutex);
     if (m_pDB == nullptr) {

--
Gitblit v1.9.3