소스 검색

20251111001 添加系统运行时间监控,暂未添加至展示页面。

向羽 孟 5 달 전
부모
커밋
7e8a1b557b

+ 36 - 1
CCDCountWpf/WpfFrom/MainWindow.xaml.cs

@@ -18,6 +18,7 @@ using System.Windows;
 using System.Windows.Data;
 using System.Windows.Media.Imaging;
 using System.Xml.Serialization;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
 
 namespace CCDCountWpf
 {
@@ -32,6 +33,8 @@ namespace CCDCountWpf
         bool IsShow = false;
         bool IsPLCShow = false;
         SystemMonitor monitor = new SystemMonitor();
+        Stopwatch SystemRunTime = new Stopwatch();
+        long InitRunTime;
         #endregion
 
         #region 窗体事件
@@ -41,6 +44,7 @@ namespace CCDCountWpf
         public MainWindow()
         {
             InitializeComponent();
+            StartSystemRunTime();
             //SetupFullScreen();
             DataContext = ShowMessageBus.ShowBinding;
             if (File.Exists(".\\Config\\CCDCountConfig.xml"))
@@ -163,6 +167,7 @@ namespace CCDCountWpf
         /// <param name="e"></param>
         private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
         {
+            StopSystemRunTime();
             SaveConfig();
             SDKSystem.Finalize();
             if (MessageBus.MainThreadS.Count != 0)
@@ -572,6 +577,36 @@ namespace CCDCountWpf
             ParaValue.DelayBlanking;
         }
 
+        private void StartSystemRunTime()
+        {
+            string localDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+            string systemRunTimePath = Path.Combine(localDataPath, "CCDCount\\SystemRunTime.XML");
+            if (File.Exists(systemRunTimePath))
+            {
+                var systemMessage = XmlStorage.DeserializeFromXml<SystemMessageConfigModel>(systemRunTimePath);
+                InitRunTime = systemMessage.SystemRunTime;
+                TimeSpan timeSpan = TimeSpan.FromTicks(InitRunTime);
+            }
+            SystemRunTime.Start();
+        }
+
+        private void StopSystemRunTime()
+        {
+            string localDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+            string systemruntimefoundPath = Path.Combine(localDataPath, "CCDCount");
+            if (!Directory.Exists(systemruntimefoundPath))
+            {
+                Directory.CreateDirectory(systemruntimefoundPath);
+            }
+            string systemRunTimePath = Path.Combine(systemruntimefoundPath, "SystemRunTime.XML");
+            SystemRunTime.Stop();
+            long ticks = SystemRunTime.ElapsedTicks;
+            XmlStorage.SerializeToXml(new SystemMessageConfigModel()
+            {
+                SystemRunTime = ticks + InitRunTime
+            }, systemRunTimePath);
+        }
+
         private void SetupFullScreen()
         {
             // 隐藏标题栏和边框
@@ -581,7 +616,7 @@ namespace CCDCountWpf
             this.ResizeMode = ResizeMode.NoResize;
 
             // 设置为最顶层窗口
-            this.Topmost = true;
+            //this.Topmost = true;
 
             // 最大化窗口
             this.WindowState = WindowState.Maximized;

+ 1 - 0
CCDCountWpf/WpfPage/AuditTrailPage.xaml.cs

@@ -930,6 +930,7 @@ namespace CCDCountWpf.WpfPage
                 "信息类别",
                 "信息类型",
                 "错误信息",
+                "信息路径",
                 "记录时间",
                 "操作员ID",
             };

+ 2 - 2
CCDCountWpf/WpfPage/MainPage.xaml.cs

@@ -112,7 +112,7 @@ namespace CCDCountWpf.WpfPage
                 //启动单相机实例的全部线程
                 if (!MessageBus.MainThreadS[i].StartMianThread())
                 {
-                    FaultLog.RecordErrorMessage(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "启动失败");
+                    FaultLog.RecordErrorMessage(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "启动失败", "CCDCountWpf:MainPage-RunCameraIdentify");
                     //LOG.error(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "启动失败");
                     MessageBox.Show(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "启动失败");
                     continue;
@@ -133,7 +133,7 @@ namespace CCDCountWpf.WpfPage
                 //启动单相机实例的全部线程
                 if (!MessageBus.MainThreadS[i].StopMianThread())
                 {
-                    FaultLog.RecordErrorMessage(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "关闭失败");
+                    FaultLog.RecordErrorMessage(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "关闭失败", "CCDCountWpf:MainPage-StopCameraIdentify");
                     MessageBox.Show(MessageBus.MainThreadS[i].cameraConfig.DeviceName + "_" + MessageBus.MainThreadS[i].cameraConfig.CameraSNNum + "关闭失败");
                     continue;
                 }

+ 1 - 1
TestWork.DLL/AlarmTools/SystemAlarm.cs

@@ -120,7 +120,7 @@ namespace CCDCount.DLL.AlarmTools
                 ChanegAlarm.AlarmPath = AlarmPath;
                 ChanegAlarm.AlarmMess = Message;
 
-                FaultLog.RecordErrorMessage(alarm.AlarmMess+",Path:"+ ChanegAlarm.AlarmPath);
+                FaultLog.RecordErrorMessage(alarm.AlarmMess,ChanegAlarm.AlarmPath);
             }
         }
 

+ 2 - 1
TestWork.DLL/AuditTrail/ErrorMessageRecordClass.cs

@@ -36,6 +36,7 @@ namespace CCDCount.DLL.AuditTrail
         public string ErrorMessageRecordToPDFReColspan(List<ErroeMesDataModelClass> ErrorMes, List<string> ColSpanNames)
         {
             string SavePath = $"{AppDomain.CurrentDomain.BaseDirectory}PDF\\ErrorMessageRecord.pdf";
+            float[] ColSpanWidth = { 10f, 10f, 40f, 15f, 15f, 10f };
             PDFGenerateTools pDFGenerate = new PDFGenerateTools(SavePath);
             pDFGenerate.InsertText("异常记录", 20, 3);
             pDFGenerate.InsertNewLine();
@@ -45,7 +46,7 @@ namespace CCDCount.DLL.AuditTrail
             }
             pDFGenerate.InsertNewLine();
             pDFGenerate.InsertTable(ErrorMes.Select(o =>
-            new { o.Category, o.MessageType, o.Message, o.DateTime, o.UserID }).ToList(), ColSpanNames, "异常记录");
+            new { o.Category, o.MessageType, o.Message, o.Path, o.DateTime, o.UserID }).ToList(),ColSpanNames,ColSpanWidth, "异常记录");
             pDFGenerate.SavePDF();
             return SavePath;
         }

+ 23 - 0
TestWork.DLL/FaultLogClass.cs

@@ -48,6 +48,29 @@ namespace CCDCount.DLL
             });
         }
 
+        /// <summary>
+        /// 记录错误信息
+        /// </summary>
+        /// <param name="Message"></param>
+        /// <param name="userid"></param>
+        public static void RecordErrorMessage(string Message,string path)
+        {
+            Task.Run(() =>
+            {
+                ErroeMesDataModelClass errorMessage = new ErroeMesDataModelClass
+                {
+                    Message = Message,
+                    DateTime = DateTime.Now,
+                    Category = "系统",
+                    MessageType = "异常",
+                    Path = path,
+                    UserID = userid
+                };
+                errorMesSqliteDataClass.InsertErrMessage(errorMessage);
+                FaultError?.Invoke(new ErrorMesDataEventModelClass(errorMessage));
+            });
+        }
+
         /// <summary>
         /// 记录Log信息
         /// </summary>

+ 1 - 1
TestWork.DLL/MainThreadClass.cs

@@ -187,7 +187,7 @@ namespace CCDCount.DLL
             {
                 if(BatchNumber=="")
                 {
-                    FaultLog.RecordErrorMessage($"{cameraConfig.CamerNo}号相机没有批次号,启动失败");
+                    FaultLog.RecordErrorMessage($"{cameraConfig.CamerNo}号相机没有批次号,启动失败", "Dll:MainThreadClass-StartMianThread");
                     return result;
                 }
                 actionMesSqliteDataClass = new ActionMesSqliteDataClass($"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{cameraConfig.CamerNo}\\ActiveObjectData_{BatchNumber}.db");

+ 7 - 1
TestWork.DLL/SqlDataClass/ErrorMesSqliteDataClass.cs

@@ -49,6 +49,7 @@ namespace CCDCount.DLL.SqlDataClass
                         Category TEXT NOT NULL,
                         MessageType TEXT NOT NULL,
                         Message TEXT NOT NULL,
+                        Path TEXT ,
                         DateTime TEXT NOT NULL,
                         UserID INTEGER NOT NULL
                 )";
@@ -64,12 +65,13 @@ namespace CCDCount.DLL.SqlDataClass
                 using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
                 {
                     conn.Open();
-                    string sql = "INSERT INTO ErrMessage (Number, Category, MessageType,Message,DateTime,UserID) VALUES (@Number, @Category, @MessageType,@Message, @DateTime, @UserID)";
+                    string sql = "INSERT INTO ErrMessage (Number, Category, MessageType,Message,Path,DateTime,UserID) VALUES (@Number, @Category, @MessageType,@Message,@Path,@DateTime, @UserID)";
                     var cmd = new SQLiteCommand(sql, conn);
                     cmd.Parameters.AddWithValue("@Number", Message.Number);
                     cmd.Parameters.AddWithValue("@Category", Message.Category);
                     cmd.Parameters.AddWithValue("@MessageType", Message.MessageType);
                     cmd.Parameters.AddWithValue("@Message", Message.Message);
+                    cmd.Parameters.AddWithValue("@Path", Message.Path);
                     cmd.Parameters.AddWithValue("@DateTime", Message.DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); // 格式化为字符串
                     cmd.Parameters.AddWithValue("@UserID", Message.UserID);
                     cmd.ExecuteNonQuery();
@@ -96,6 +98,7 @@ namespace CCDCount.DLL.SqlDataClass
                             Category = reader["Category"].ToString(),
                             MessageType = reader["MessageType"].ToString(),
                             Message = reader["Message"].ToString(),
+                            Path = reader["Path"].ToString(),
                             UserID = Convert.ToInt32(reader["UserID"]),
                             // 解析时间字符串
                             DateTime = DateTime.Parse(reader["DateTime"].ToString())
@@ -128,6 +131,7 @@ namespace CCDCount.DLL.SqlDataClass
                             Category = reader["Category"].ToString(),
                             MessageType = reader["MessageType"].ToString(),
                             Message = reader["Message"].ToString(),
+                            Path = reader["Path"].ToString(),
                             UserID = Convert.ToInt32(reader["UserID"]),
                             // 解析时间字符串
                             DateTime = DateTime.Parse(reader["DateTime"].ToString())
@@ -163,6 +167,7 @@ namespace CCDCount.DLL.SqlDataClass
                             Category = reader["Category"].ToString(),
                             MessageType = reader["MessageType"].ToString(),
                             Message = reader["Message"].ToString(),
+                            Path = reader["Path"].ToString(),
                             UserID = Convert.ToInt32(reader["UserID"]),
                             // 解析时间字符串
                             DateTime = DateTime.Parse(reader["DateTime"].ToString())
@@ -196,6 +201,7 @@ namespace CCDCount.DLL.SqlDataClass
                             Category = reader["Category"].ToString(),
                             MessageType = reader["MessageType"].ToString(),
                             Message = reader["Message"].ToString(),
+                            Path = reader["Path"].ToString(),
                             UserID = Convert.ToInt32(reader["UserID"]),
                             // 解析时间字符串
                             DateTime = DateTime.Parse(reader["DateTime"].ToString())

+ 54 - 0
TestWork.DLL/Tools/PDFGenerateTools.cs

@@ -314,6 +314,60 @@ namespace CCDCount.DLL.Tools
             document.Add(table);
         }
 
+        /// <summary>
+        /// 插入表格
+        /// </summary>
+        /// <param name="dataList">数据列表</param>
+        /// <param name="tableName">表名</param>
+        public void InsertTable<T>(List<T> dataList, List<string> Colspan,float[] ColWidth, string tableName = "表头") where T : class
+        {
+            if (IsSave)
+            {
+                return;
+            }
+
+            if (dataList == null || dataList.Count == 0)
+            {
+                return; // 如果数据为空则直接返回
+            }
+
+            Font FontValue = new Font(baseFont, 12);
+
+            // 使用反射获取类的属性作为列
+            var properties = typeof(T).GetProperties();
+            if (properties.Length != Colspan.Count) { return; }
+            PdfPTable table = new PdfPTable(Colspan.Count);
+            table.SetWidths(ColWidth);
+            table.WidthPercentage = 100; // 表格宽度为页面宽度的100%
+
+            // 添加表名作为表头(跨所有列)
+            PdfPCell cell = new PdfPCell(new Phrase(tableName, FontValue));
+            cell.Colspan = Colspan.Count;
+            cell.HorizontalAlignment = Element.ALIGN_CENTER;
+            table.AddCell(cell);
+
+            // 添加属性名作为列标题
+            foreach (var prop in Colspan)
+            {
+                PdfPCell headerCell = new PdfPCell(new Phrase(prop, FontValue));
+                headerCell.HorizontalAlignment = Element.ALIGN_CENTER;
+                table.AddCell(headerCell);
+            }
+
+            // 添加数据行
+            foreach (var data in dataList)
+            {
+                foreach (var prop in properties)
+                {
+                    var value = prop.GetValue(data)?.ToString() ?? "";
+                    table.AddCell(new Phrase(value, FontValue));
+                }
+            }
+
+            // 将表格添加到文档
+            document.Add(table);
+        }
+
         /// <summary>
         /// 插入表格
         /// </summary>

+ 1 - 0
TestWork.MODEL/CCDCount.MODEL.csproj

@@ -68,6 +68,7 @@
     <Compile Include="ConfigModel\CamerasConfig.cs" />
     <Compile Include="ConfigModel\FormulationConfigClass.cs" />
     <Compile Include="ConfigModel\SaveConfigModel.cs" />
+    <Compile Include="ConfigModel\SystemMessageConfigModel.cs" />
     <Compile Include="PlcModel\PlcParaModelClass.cs" />
     <Compile Include="PlcModel\PlcStaticModelClass.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />

+ 13 - 0
TestWork.MODEL/ConfigModel/SystemMessageConfigModel.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CCDCount.MODEL.ConfigModel
+{
+    public class SystemMessageConfigModel
+    {
+        public long SystemRunTime { get; set;}
+    }
+}