From 9b2d1e962bf802f75c44c1f5372fc4cf029e3f4e Mon Sep 17 00:00:00 2001
From: darker <mr.darker@163.com>
Date: 星期二, 11 二月 2025 11:11:13 +0800
Subject: [PATCH] 1. 添加SECS运行设置管理类

---
 SourceCode/Bond/Servo/Servo.vcxproj         |    4 
 SourceCode/Bond/Servo/Servo.vcxproj.filters |  191 +++++++++----------------------
 SourceCode/Bond/Servo/Servo.cpp             |   19 +++
 SourceCode/Bond/Servo/ServoDlg.cpp          |    1 
 Document/VID 表格.zip                         |    0 
 SourceCode/Bond/Servo/SECSConfigManager.cpp |   60 ++++++++++
 SourceCode/Bond/Servo/SECSConfigManager.h   |   46 +++++++
 7 files changed, 183 insertions(+), 138 deletions(-)

diff --git "a/Document/VID \350\241\250\346\240\274.zip" "b/Document/VID \350\241\250\346\240\274.zip"
new file mode 100644
index 0000000..a5d8282
--- /dev/null
+++ "b/Document/VID \350\241\250\346\240\274.zip"
Binary files differ
diff --git a/SourceCode/Bond/Servo/SECSConfigManager.cpp b/SourceCode/Bond/Servo/SECSConfigManager.cpp
new file mode 100644
index 0000000..1e28577
--- /dev/null
+++ b/SourceCode/Bond/Servo/SECSConfigManager.cpp
@@ -0,0 +1,60 @@
+#include "stdafx.h"
+#include "SECSConfigManager.h"
+
+// 常量
+const std::string DATABASE_FILE = R"(SECSConfigManager.db)";
+
+// 静态成员初始化
+std::mutex SECSConfigManager::m_mutex;
+
+// 获取单例实例
+SECSConfigManager& SECSConfigManager::getInstance() {
+    static SECSConfigManager instance;
+    return instance;
+}
+
+// 构造函数
+SECSConfigManager::SECSConfigManager() {
+    m_pDB = new BL::SQLiteDatabase();
+}
+
+// 析构函数
+SECSConfigManager::~SECSConfigManager() {
+    termSECSSetting();
+
+    if (m_pDB != nullptr) {
+        delete m_pDB;
+        m_pDB = nullptr;
+    }
+}
+
+// 设置数据库连接
+void SECSConfigManager::setDatabase(BL::Database* db) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    m_pDB = db;
+}
+
+// 初始化SECS设置管理库
+bool SECSConfigManager::initSECSSetting() {
+    char path[MAX_PATH];
+    GetModuleFileName(NULL, path, MAX_PATH);
+    std::string exePath(path);
+    std::string dbFileDir = exePath.substr(0, exePath.find_last_of("\\/")) + "\\DB";
+    if (!CreateDirectory(dbFileDir.c_str(), NULL) && ERROR_ALREADY_EXISTS != GetLastError()) {
+        throw std::runtime_error("Failed to create database directory.");
+    }
+
+    std::string dbFilePath = dbFileDir + "\\" + DATABASE_FILE;
+    if (!m_pDB->connect(dbFilePath, true)) {
+        return false;
+    }
+
+    return true;
+}
+
+// 销毁SECS设置管理库
+void SECSConfigManager::termSECSSetting() {
+    if (m_pDB != nullptr) {
+        m_pDB->disconnect();
+    }
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/SECSConfigManager.h b/SourceCode/Bond/Servo/SECSConfigManager.h
new file mode 100644
index 0000000..72c9d01
--- /dev/null
+++ b/SourceCode/Bond/Servo/SECSConfigManager.h
@@ -0,0 +1,46 @@
+#ifndef SECS_CONFIG_MANAGER_H
+#define SECS_CONFIG_MANAGER_H
+
+#include <string>
+#include <vector>
+#include <mutex>
+#include "Database.h"
+
+class SECSConfigManager {
+public:
+    /**
+     * 获取单例实例
+     * @return SECSConfigManager实例的引用
+     */
+    static SECSConfigManager& getInstance();
+
+    /**
+     * 设置数据库连接
+     * @param db 数据库连接的指针
+     */
+    void setDatabase(BL::Database* db);
+
+	/**
+	 * 初始化SECS设置管理库
+	 * @return 成功返回true,失败返回false
+	 */
+    bool initSECSSetting();
+
+	/**
+	* 销毁SECS设置管理库
+	*/
+    void termSECSSetting();
+
+private:
+    SECSConfigManager();
+    ~SECSConfigManager();
+
+    // 禁止拷贝和赋值
+    SECSConfigManager(const SECSConfigManager&) = delete;
+    SECSConfigManager& operator=(const SECSConfigManager&) = delete;
+
+    BL::Database* m_pDB;
+    static std::mutex m_mutex;
+};
+
+#endif // SECS_CONFIG_MANAGER_H
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/Servo.cpp b/SourceCode/Bond/Servo/Servo.cpp
index 495b5e7..d23cb02 100644
--- a/SourceCode/Bond/Servo/Servo.cpp
+++ b/SourceCode/Bond/Servo/Servo.cpp
@@ -7,6 +7,7 @@
 #include "ServoDlg.h"
 #include "ServoGraph.h"
 #include "AlarmManager.h"
+#include "SECSConfigManager.h"
 
 // 声明全局变量,用于管理 GDI+ 初始化
 ULONG_PTR g_diplusToken;
@@ -117,6 +118,21 @@
 	}
 
 
+	// 初始化SECS设置管理库
+	try {
+		if (!SECSConfigManager::getInstance().initSECSSetting()) {
+			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();
@@ -159,6 +175,9 @@
 	// 销毁报警表
 	AlarmManager::getInstance().termAlarmTable();
 
+	// 销毁SECS设置管理库
+	SECSConfigManager::getInstance().termSECSSetting();
+
 	return CWinApp::ExitInstance();
 }
 
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj b/SourceCode/Bond/Servo/Servo.vcxproj
index 769631b..48469d7 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj
+++ b/SourceCode/Bond/Servo/Servo.vcxproj
@@ -21,7 +21,7 @@
   <PropertyGroup Label="Globals">
     <ProjectGuid>{66ADACE5-3166-4D1F-B30B-DE5E01FB01A2}</ProjectGuid>
     <RootNamespace>Servo</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.22000.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@@ -204,6 +204,7 @@
     <ClInclude Include="LogEdit.h" />
     <ClInclude Include="Model.h" />
     <ClInclude Include="Resource.h" />
+    <ClInclude Include="SECSConfigManager.h" />
     <ClInclude Include="SecsTestDlg.h" />
     <ClInclude Include="Servo.h" />
     <ClInclude Include="ServoDlg.h" />
@@ -223,6 +224,7 @@
     <ClCompile Include="LogDlg.cpp" />
     <ClCompile Include="LogEdit.cpp" />
     <ClCompile Include="Model.cpp" />
+    <ClCompile Include="SECSConfigManager.cpp" />
     <ClCompile Include="SecsTestDlg.cpp" />
     <ClCompile Include="Servo.cpp" />
     <ClCompile Include="ServoDlg.cpp" />
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index 55fdacc..435f788 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -1,144 +1,63 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <Filter Include="婧愭枃浠�">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="澶存枃浠�">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="璧勬簮鏂囦欢">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="ReadMe.txt" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="Servo.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="ServoDlg.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="stdafx.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="targetver.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Resource.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="ServoGraph.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Model.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="BlButton.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Common.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="LogDlg.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="LogEdit.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Configuration.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Log.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="HsmsPassive.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="HsmsAction.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="Context.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="SecsTestDlg.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-    <ClInclude Include="TerminalDisplayDlg.h">
-    <ClInclude Include="AlarmManager.h">
-      <Filter>澶存枃浠�</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="Servo.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="ServoDlg.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="stdafx.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="ServoGraph.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="Model.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="BlButton.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="LogDlg.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="LogEdit.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="Configuration.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="Log.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="HsmsPassive.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="HsmsAction.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="Context.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="SecsTestDlg.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-    <ClCompile Include="TerminalDisplayDlg.cpp">
-    <ClCompile Include="AlarmManager.cpp">
-      <Filter>婧愭枃浠�</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="Servo.rc">
-      <Filter>璧勬簮鏂囦欢</Filter>
-    </ResourceCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\Servo.rc2">
-      <Filter>璧勬簮鏂囦欢</Filter>
-    </None>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="res\Servo.ico">
-      <Filter>璧勬簮鏂囦欢</Filter>
-    </Image>
+    <Natvis Include="$(MSBuildThisFileDirectory)..\..\natvis\wil.natvis" />
   </ItemGroup>
   <ItemGroup>
     <Manifest Include="res\application.exe.manifest" />
   </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="AlarmManager.cpp" />
+    <ClCompile Include="BlButton.cpp" />
+    <ClCompile Include="Configuration.cpp" />
+    <ClCompile Include="Context.cpp" />
+    <ClCompile Include="HsmsAction.cpp" />
+    <ClCompile Include="HsmsPassive.cpp" />
+    <ClCompile Include="Log.cpp" />
+    <ClCompile Include="LogDlg.cpp" />
+    <ClCompile Include="LogEdit.cpp" />
+    <ClCompile Include="Model.cpp" />
+    <ClCompile Include="SecsTestDlg.cpp" />
+    <ClCompile Include="Servo.cpp" />
+    <ClCompile Include="ServoDlg.cpp" />
+    <ClCompile Include="ServoGraph.cpp" />
+    <ClCompile Include="stdafx.cpp" />
+    <ClCompile Include="TerminalDisplayDlg.cpp" />
+    <ClCompile Include="SECSConfigManager.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="AlarmManager.h" />
+    <ClInclude Include="BlButton.h" />
+    <ClInclude Include="Common.h" />
+    <ClInclude Include="Configuration.h" />
+    <ClInclude Include="Context.h" />
+    <ClInclude Include="HsmsAction.h" />
+    <ClInclude Include="HsmsPassive.h" />
+    <ClInclude Include="Log.h" />
+    <ClInclude Include="LogDlg.h" />
+    <ClInclude Include="LogEdit.h" />
+    <ClInclude Include="Model.h" />
+    <ClInclude Include="Resource.h" />
+    <ClInclude Include="SecsTestDlg.h" />
+    <ClInclude Include="Servo.h" />
+    <ClInclude Include="ServoDlg.h" />
+    <ClInclude Include="ServoGraph.h" />
+    <ClInclude Include="stdafx.h" />
+    <ClInclude Include="targetver.h" />
+    <ClInclude Include="TerminalDisplayDlg.h" />
+    <ClInclude Include="SECSConfigManager.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Servo.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\Servo.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+    <None Include="res\Servo.rc2" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="ReadMe.txt" />
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index a88bb3d..0b50b45 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -9,7 +9,6 @@
 #include "Common.h"
 #include "Log.h"
 #include "SecsTestDlg.h"
-#include "AlarmManager.h"
 #include <chrono>
 #include <thread>
 #include <cmath>

--
Gitblit v1.9.3