From 8294c107676c18538c6e06fe8eab2d209604ac6a Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 19 一月 2026 18:34:06 +0800
Subject: [PATCH] 1.完善和优化界面显示,数据懒加载,等待光标等,修复启动时界面卡的问题。 2.SVData的Push的限制和检查,因发现Glass呆在机器中时,不管机台是否运行都在不停压入数据。

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

diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index 61f3a80..ed29052 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -184,6 +184,7 @@
 
 int CModel::init()
 {
+	const ULONGLONG boot_model_begin = GetTickCount64();
 	CString strIniFile;
 	CString strUnitId;
 	strIniFile.Format(_T("%s\\ServoConfiguration.ini"), (LPTSTR)(LPCTSTR)m_strWorkDir);
@@ -214,6 +215,7 @@
 	CLog::GetLog()->SetLogsDir(strLogDir);
 	CLog::GetLog()->SetEquipmentId((LPTSTR)(LPCTSTR)strUnitId);
 	LOGI("\r\n\r\n~~~ Prog Start! ~~~");
+	LOGI("[BOOT][MODEL] init begin");
 
 
 	SECSListener listener;
@@ -354,6 +356,23 @@
 		for (auto p : pjs) {
 			LOGI("<Model>onPRJobMultiCreate %s %s", p->id().c_str(), p->recipeSpec().c_str());
 		}
+
+		auto rejectAll = [&](uint32_t code, const std::string& msg) -> int {
+			LOGW("<Model>onPRJobMultiCreate rejected: %s", msg.c_str());
+			for (auto p : pjs) {
+				if (p != nullptr) p->addIssue(code, msg);
+			}
+			return -1;
+		};
+
+		// 鍗� PJ 妯″紡锛氬彧鎺ュ彈 1 鏉′笖褰撳墠鏃犲湪鍒� PJ
+		if (pjs.size() != 1) {
+			return rejectAll(1200, "Only 1 ProcessJob supported (single-PJ mode)");
+		}
+		if (!m_master.isProcessJobsEmpty()) {
+			return rejectAll(1201, "ProcessJob exists, cannot create new in single-PJ mode");
+		}
+
 		int nRet = m_master.setProcessJobs(pjs);
 		auto processJobs = m_master.getProcessJobs();
 		std::vector<SERVO::CVariable> vars;
@@ -402,6 +421,8 @@
 	}
 	strVarialbleFile.Format(_T("%s\\HsmsPassive.cache"), (LPTSTR)(LPCTSTR)m_strWorkDir);
 	m_hsmsPassive.loadCacheFromFile(strVarialbleFile);
+	LOGI("[BOOT][MODEL] HSMS config loaded, cost=%llu ms",
+		(unsigned long long)(GetTickCount64() - boot_model_begin));
 
 
 	SERVO::MasterListener masterListener;
@@ -905,6 +926,8 @@
 	char szBuffer[MAX_PATH];
 	sprintf_s(szBuffer, MAX_PATH, "%s\\AlarmList.csv", (LPTSTR)(LPCTSTR)m_strWorkDir);
 	alarmManager.readAlarmFile(szBuffer);
+	LOGI("[BOOT][MODEL] Alarm list loaded, cost=%llu ms",
+		(unsigned long long)(GetTickCount64() - boot_model_begin));
 
 
 	// Glass鏁版嵁搴�
@@ -913,6 +936,8 @@
 	GlassLogDb::Init(path);
 
 
+	LOGI("[BOOT][MODEL] init finished, total cost=%llu ms",
+		(unsigned long long)(GetTickCount64() - boot_model_begin));
 	return 0;
 }
 

--
Gitblit v1.9.3