瀏覽代碼

20260307001 更改ConfigModel的布局,添加Config管理工具并增加了使用演示

向羽 孟 1 月之前
父節點
當前提交
94ab8e257e

+ 128 - 0
MvvmScaffoldFrame48.DLL/ConfigTools/ConfigService.cs

@@ -0,0 +1,128 @@
+using MvvmScaffoldFrame48.Model.StorageModel.Configs;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.DLL.ConfigTools
+{
+    public class ConfigService : IConfigService
+    {
+        #region 属性
+        /// <summary>
+        /// 单例
+        /// </summary>
+        private static ConfigService instance;
+        public static ConfigService Instance => instance;
+
+        /// <summary>
+        /// 相机进程参数
+        /// </summary>
+        private List<CameraProcessConfigModel> _camerasConfig;
+        public List<CameraProcessConfigModel> CamerasProcessConfig => _camerasConfig;
+        #endregion
+
+        #region 公共事件
+
+        /// <summary>
+        /// 加载参数
+        /// </summary>
+        /// <returns></returns>
+        public bool LoadAsync()
+        {
+            bool result = false;
+            if (!Directory.Exists(".\\Config\\"))
+            {
+                Directory.CreateDirectory(".\\Config\\");
+                return result;
+            }
+            GetCameraProcessConfig();
+            LoadConfigEvent?.Invoke(this, EventArgs.Empty);
+            result = true;
+            return result;
+        }
+
+        /// <summary>
+        /// 保存参数
+        /// </summary>
+        public void SaveAsync()
+        {
+            if (!Directory.Exists(".\\Config\\"))
+            {
+                Directory.CreateDirectory(".\\Config\\");
+            }
+            SaveCameraProcessConfig();
+        }
+        #endregion
+
+        #region 回调事件
+        /// <summary>
+        /// 加载参数的回调方法
+        /// </summary>
+        public event EventHandler LoadConfigEvent; 
+        /// <summary>
+        /// 保存参数的回调方法
+        /// </summary>
+        public event EventHandler SaveConfigEvent;
+        #endregion
+
+        #region 私有事件
+        private void GetCameraProcessConfig()
+        {
+            if (File.Exists(".\\Config\\CameraConfig.xml"))
+            {
+                _camerasConfig = XMLReadWrite.DeserializeFromXml<List<CameraProcessConfigModel>>(".\\Config\\CameraProcessConfig.xml");
+            }
+            else
+            {
+                //测试用代码,此处应为创建空配置,后续由图形界面控制新建配置
+                _camerasConfig = new List<CameraProcessConfigModel>()
+                {
+                    CreateCameraConfiguration(0, "ProcessingAlgorithm_CCDShuLi"),
+                };
+            }
+        }
+
+        private void SaveCameraProcessConfig()
+        {
+            XMLReadWrite.SerializeToXml(_camerasConfig, ".\\Config\\CameraProcessConfig.xml");
+        }
+
+
+        /// <summary>
+        /// 创建新的相机配置
+        /// </summary>
+        private CameraProcessConfigModel CreateCameraConfiguration(int cameraId, string ProcessingAlgorithm)
+        {
+            var config = new CameraProcessConfigModel
+            {
+                CameraId = cameraId,
+                CameraSN = "K53474176",
+                IsEnabled = true
+            };
+
+            switch (ProcessingAlgorithm)
+            {
+                case "ProcessingAlgorithm":
+                    config.ProcessingAlgorithmName = "ProcessingAlgorithm";
+                    config.AlgorithmParameters = XMLReadWrite.SerializeToString(new ProcessingAlgorithmConfigModel()
+                    {
+                        Threshold = 0.5,
+                        MinArea = 100,
+                        EnableFiltering = true,
+                        FilterType = "FilterType"
+                    });
+                    break;
+                case "ProcessingAlgorithm_CCDShuLi":
+                    config.ProcessingAlgorithmName = "ProcessingAlgorithm_CCDShuLi";
+                    config.AlgorithmParameters = XMLReadWrite.SerializeToString(new ShuLiConfigClassModel());
+                    break;
+            }
+
+            return config;
+        }
+        #endregion
+    }
+}

+ 1 - 1
MvvmScaffoldFrame48.DLL/ImageAlgorithm/ProcessingAlgorithm.cs

@@ -2,7 +2,7 @@
 using MvCameraControl;
 using MvvmScaffoldFrame48.DLL.ConfigTools;
 using MvvmScaffoldFrame48.Model.ResultModel;
-using MvvmScaffoldFrame48.Model.StorageModel.ProcessingConfig;
+using MvvmScaffoldFrame48.Model.StorageModel.Configs;
 using System;
 using System.Collections.Generic;
 using System.Linq;

+ 1 - 1
MvvmScaffoldFrame48.DLL/ImageAlgorithm/ProcessingAlgorithm_CCDShuLi.cs

@@ -4,7 +4,7 @@ using MvvmScaffoldFrame48.DLL.LogTools;
 using MvvmScaffoldFrame48.DLL.SystemTools;
 using MvvmScaffoldFrame48.DLL.ThreadManager;
 using MvvmScaffoldFrame48.Model.StorageModel.ImageAlgorithm.ShuLI;
-using MvvmScaffoldFrame48.Model.StorageModel.ProcessingConfig;
+using MvvmScaffoldFrame48.Model.StorageModel.Configs;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;

+ 1 - 0
MvvmScaffoldFrame48.DLL/MvvmScaffoldFrame48.Dll.csproj

@@ -82,6 +82,7 @@
     <Compile Include="CameraTools\HikCamera.cs" />
     <Compile Include="CameraTools\HikVision.cs" />
     <Compile Include="CommunicationTools\ModbusTcpClient.cs" />
+    <Compile Include="ConfigTools\ConfigService.cs" />
     <Compile Include="ConfigTools\XMLReadWrite.cs" />
     <Compile Include="FileTools\PDFGenerate.cs" />
     <Compile Include="ImageAlgorithm\BoundRectangleClass.cs" />

+ 1 - 1
MvvmScaffoldFrame48.DLL/ThreadManager/CameraGroup.cs

@@ -4,7 +4,7 @@ using MvvmScaffoldFrame48.DLL.CameraTools;
 using MvvmScaffoldFrame48.DLL.LogTools;
 using MvvmScaffoldFrame48.DLL.SystemTools;
 using MvvmScaffoldFrame48.Model.ResultModel;
-using MvvmScaffoldFrame48.Model.StorageModel.SystemConfig;
+using MvvmScaffoldFrame48.Model.StorageModel.Configs;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;

+ 5 - 73
MvvmScaffoldFrame48.DLL/ThreadManager/ThreadManager.cs

@@ -4,8 +4,7 @@ using MvvmScaffoldFrame48.DLL.CameraTools;
 using MvvmScaffoldFrame48.DLL.ConfigTools;
 using MvvmScaffoldFrame48.Model.ResultModel;
 using MvvmScaffoldFrame48.Model.StorageModel.ImageAlgorithm.ShuLI;
-using MvvmScaffoldFrame48.Model.StorageModel.ProcessingConfig;
-using MvvmScaffoldFrame48.Model.StorageModel.SystemConfig;
+using MvvmScaffoldFrame48.Model.StorageModel.Configs;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -26,10 +25,9 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
         private readonly CameraGroup[] _cameraGroups = new CameraGroup[1];
         // 通信线程
         private readonly CommunicationThread _communicationThread;
-        // 相机配置参数
-        private List<CameraProcessConfigModel> _cameraConfigurations;
 
         private static ThreadManager _instance = new ThreadManager();
+        private ConfigService configService = ConfigService.Instance;
         #endregion
 
         #region 构造函数
@@ -39,7 +37,7 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
         private ThreadManager()
         {
             // 加载相机配置
-            LoadCameraConfigurations();
+            configService.LoadAsync();
 
             // 获取相机列表
             HikVision.GetCameraList(out List<IDeviceInfo> cameraInfoList);
@@ -48,7 +46,7 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
             for (int i = 0; i < _cameraGroups.Count(); i++)
             {
                 // 加载对应相机位的配置参数
-                var CheckConfig = _cameraConfigurations.Where(c => c.CameraId == i);
+                var CheckConfig = configService.CamerasProcessConfig.Where(c => c.CameraId == i);
                 if(CheckConfig.Count() == 0) 
                 {
                     _cameraGroups[i] = null;
@@ -104,7 +102,7 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
                     return;
                 }
                 // 更新配置
-                var config = _cameraConfigurations.FirstOrDefault(c => c.CameraId == cameraId);
+                var config = configService.CamerasProcessConfig.FirstOrDefault(c => c.CameraId == cameraId);
                 if (config != null)
                 {
                     config.ProcessingAlgorithmName = algorithmName;
@@ -197,39 +195,6 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
             return cameraId >= 0 && cameraId < _cameraGroups.Count() && _cameraGroups[cameraId].IsRunning;
         }
 
-        /// <summary>
-        /// 为每个相机创建配置
-        /// </summary>
-        private CameraProcessConfigModel CreateCameraConfiguration(int cameraId,string ProcessingAlgorithm)
-        {
-            var config = new CameraProcessConfigModel
-            {
-                CameraId = cameraId,
-                CameraSN = "K53474176",
-                IsEnabled = true
-            };
-
-            switch (ProcessingAlgorithm)
-            {
-                case "ProcessingAlgorithm":
-                    config.ProcessingAlgorithmName = "ProcessingAlgorithm";
-                    config.AlgorithmParameters = XMLReadWrite.SerializeToString(new ProcessingAlgorithmConfigModel()
-                    {
-                        Threshold = 0.5,
-                        MinArea = 100,
-                        EnableFiltering = true,
-                        FilterType = "FilterType"
-                    });
-                    break;
-                case "ProcessingAlgorithm_CCDShuLi":
-                    config.ProcessingAlgorithmName = "ProcessingAlgorithm_CCDShuLi";
-                    config.AlgorithmParameters = XMLReadWrite.SerializeToString(new ShuLiConfigClassModel());
-                    break;
-            }
-
-            return config;
-        }
-
         /// <summary>
         /// 动态更新相机算法参数
         /// </summary>
@@ -248,39 +213,6 @@ namespace MvvmScaffoldFrame48.DLL.ThreadManager
         #endregion
 
         #region 私有方法
-        /// <summary>
-        /// 加载相机配置
-        /// </summary>
-        private void LoadCameraConfigurations()
-        {
-            // 这里可以从XML文件、数据库或其他配置源加载配置
-            if (!Directory.Exists(".\\Config\\"))
-            {
-                Directory.CreateDirectory(".\\Config\\");
-            }
-            if (File.Exists(".\\Config\\CameraConfig.xml"))
-            {
-                _cameraConfigurations = XMLReadWrite.DeserializeFromXml<List<CameraProcessConfigModel>>(".\\Config\\CameraConfig.xml");
-            }
-            else
-            {
-                //测试用代码,此处应为创建空配置,后续由图形界面控制新建配置
-                _cameraConfigurations = new List<CameraProcessConfigModel>()
-                {
-                    CreateCameraConfiguration(0, "ProcessingAlgorithm_CCDShuLi"),
-                };
-            }
-            //SaveCameraConfigurations();
-        }
-
-        private void SaveCameraConfigurations()
-        {
-            if (!Directory.Exists(".\\Config\\"))
-            {
-                Directory.CreateDirectory(".\\Config\\");
-            }
-            XMLReadWrite.SerializeToXml(_cameraConfigurations, ".\\Config\\CameraConfig.xml");
-        }
 
         /// <summary>
         /// 处理相机处理结果

+ 4 - 3
MvvmScaffoldFrame48.MODEL/MvvmScaffoldFrame48.Model.csproj

@@ -64,17 +64,18 @@
     <Compile Include="ResultModel\CameraProcessEventArgsResultModel.cs" />
     <Compile Include="StorageModel\AuditTrail\ErrorMessageRecordModel.cs" />
     <Compile Include="StorageModel\AuditTrail\OperationRecordModel.cs" />
+    <Compile Include="StorageModel\Configs\IConfigService.cs" />
     <Compile Include="StorageModel\HikVisionCamera\CameraImageSizeCModel.cs" />
     <Compile Include="StorageModel\HikVisionCamera\CameraInfoModel.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="StorageModel\ImageAlgorithm\BoundingRectangleMdoel.cs" />
     <Compile Include="StorageModel\ImageAlgorithm\ShuLI\ActiveObjectClassModel.cs" />
-    <Compile Include="StorageModel\ImageAlgorithm\ShuLI\ShuLiConfigClassModel.cs" />
+    <Compile Include="StorageModel\Configs\ShuLiConfigClassModel.cs" />
     <Compile Include="StorageModel\ImageAlgorithm\ShuLI\ValidRegionModel.cs" />
-    <Compile Include="StorageModel\ProcessingConfig\ProcessingAlgorithmConfigModel.cs" />
+    <Compile Include="StorageModel\Configs\ProcessingAlgorithmConfigModel.cs" />
     <Compile Include="StorageModel\SystemAlarm\AlarmMessModel.cs" />
     <Compile Include="StorageModel\SystemAlarm\AlarmTypes.cs" />
-    <Compile Include="StorageModel\SystemConfig\CameraProcessConfigModel.cs" />
+    <Compile Include="StorageModel\Configs\CameraProcessConfigModel.cs" />
     <Compile Include="StorageModel\SystemTools\SystemMessageConfigModel.cs" />
     <Compile Include="UserModel.cs" />
   </ItemGroup>

+ 1 - 1
MvvmScaffoldFrame48.MODEL/StorageModel/SystemConfig/CameraProcessConfigModel.cs → MvvmScaffoldFrame48.MODEL/StorageModel/Configs/CameraProcessConfigModel.cs

@@ -5,7 +5,7 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Xml.Linq;
 
-namespace MvvmScaffoldFrame48.Model.StorageModel.SystemConfig
+namespace MvvmScaffoldFrame48.Model.StorageModel.Configs
 {
     // <summary>
     /// 单个相机处理配置

+ 17 - 0
MvvmScaffoldFrame48.MODEL/StorageModel/Configs/IConfigService.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MvvmScaffoldFrame48.Model.StorageModel.Configs
+{
+    public interface IConfigService
+    {
+        List<CameraProcessConfigModel> CamerasProcessConfig { get; }
+        bool LoadAsync();
+        void SaveAsync();
+        event EventHandler LoadConfigEvent;
+        event EventHandler SaveConfigEvent;
+    }
+}

+ 1 - 1
MvvmScaffoldFrame48.MODEL/StorageModel/ProcessingConfig/ProcessingAlgorithmConfigModel.cs → MvvmScaffoldFrame48.MODEL/StorageModel/Configs/ProcessingAlgorithmConfigModel.cs

@@ -4,7 +4,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace MvvmScaffoldFrame48.Model.StorageModel.ProcessingConfig
+namespace MvvmScaffoldFrame48.Model.StorageModel.Configs
 {
     public class ProcessingAlgorithmConfigModel
     {

+ 1 - 1
MvvmScaffoldFrame48.MODEL/StorageModel/ImageAlgorithm/ShuLI/ShuLiConfigClassModel.cs → MvvmScaffoldFrame48.MODEL/StorageModel/Configs/ShuLiConfigClassModel.cs

@@ -4,7 +4,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace MvvmScaffoldFrame48.Model.StorageModel.ImageAlgorithm.ShuLI
+namespace MvvmScaffoldFrame48.Model.StorageModel.Configs
 {
     public class ShuLiConfigClassModel
     {