Forráskód Böngészése

20251110001 异常报警,状态切换型修改

向羽 孟 5 hónapja
szülő
commit
b9c2931cb2

+ 27 - 0
TestWork.DLL/AlarmTools/AlarmMessageList.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CCDCount.DLL.AlarmTools
+{
+    public enum AlarmMessageList
+    {
+        系统异常 = 0,
+        相机实例创建失败 = 1,
+        开启相机失败 = 2,
+        相机采集开始失败 = 3,
+        相机采集停止失败 = 4,
+        识别线程启动失败 = 5,
+        识别线程停止失败 = 6,
+        待识别队列数据堆积 = 7,
+        PLC通讯连接失败 = 8,
+        结果发送线程启动失败 = 9,
+        结果发送线程停止失败 = 10,
+        未检测到相机 = 11,
+        相机加载失败 = 12,
+        数据分配线程启动失败 = 13,
+        数据分配线程停止失败 = 14,
+    }
+}

+ 151 - 0
TestWork.DLL/AlarmTools/SystemAlarm.cs

@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using CCDCount.MODEL.AlarmModel;
+
+namespace CCDCount.DLL.AlarmTools
+{
+    public static class SystemAlarm
+    {
+        private static List<AlarmMessModel> AlarmMessList = new List<AlarmMessModel>()
+        {
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.系统异常,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.相机实例创建失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.开启相机失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.相机采集开始失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.相机采集停止失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.识别线程启动失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.识别线程停止失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.待识别队列数据堆积,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.PLC通讯连接失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.结果发送线程启动失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.结果发送线程停止失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.未检测到相机,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.相机加载失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.数据分配线程启动失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+            new AlarmMessModel()
+            {
+                ID = (int)AlarmMessageList.数据分配线程停止失败,
+                AlarmType = "SystemException",
+                IsAlarm =false
+            },
+        };
+
+        /// <summary>
+        /// 开启指定警告
+        /// </summary>
+        /// <param name="ID"></param>
+        public static void AlarmAlert(AlarmMessageList ID,string Message, string AlarmPath)
+        {
+            var alarm = AlarmMessList.Find(x => x.ID == (int)ID);
+            if (alarm == null || alarm.IsAlarm)
+            {
+                return;
+            }
+            else
+            {
+                var ChanegAlarm = AlarmMessList.Find(x => x.ID == (int)ID);
+                ChanegAlarm.IsAlarm = true;
+                ChanegAlarm.AlarmDateTime = DateTime.Now;
+                ChanegAlarm.AlarmPath = AlarmPath;
+                ChanegAlarm.AlarmMess = Message;
+
+                FaultLog.RecordErrorMessage(alarm.AlarmMess+",Path:"+ ChanegAlarm.AlarmPath);
+            }
+        }
+
+        /// <summary>
+        /// 关闭指定警告
+        /// </summary>
+        public static void AlarmCancel(AlarmMessageList ID)
+        {
+            AlarmMessList.Find(x => x.ID == (int)ID).IsAlarm = false;
+        }
+
+        /// <summary>
+        /// 获取所有警告
+        /// </summary>
+        public static List<AlarmMessModel> GetAllAlarm()
+        {
+            return AlarmMessList;
+        }
+
+        /// <summary>
+        /// 获取所有已触发警告
+        /// </summary>
+        public static List<AlarmMessModel> GetAlarm()
+        {
+            return AlarmMessList.Where(x => x.IsAlarm == true).ToList();
+        }
+    }
+}

+ 2 - 0
TestWork.DLL/CCDCount.DLL.csproj

@@ -71,6 +71,8 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AlarmTools\AlarmMessageList.cs" />
+    <Compile Include="AlarmTools\SystemAlarm.cs" />
     <Compile Include="AuditTrail\BatchRecordClass.cs" />
     <Compile Include="AuditTrail\ErrorMessageRecordClass.cs" />
     <Compile Include="AuditTrail\FormulationRecordClass.cs" />

+ 22 - 12
TestWork.DLL/CameraClass.cs

@@ -1,4 +1,5 @@
-using CCDCount.MODEL.CameraClass;
+using CCDCount.DLL.AlarmTools;
+using CCDCount.MODEL.CameraClass;
 using CCDCount.MODEL.ConfigModel;
 using LogClass;
 using MvCameraControl;
@@ -101,17 +102,19 @@ namespace CCDCount.DLL
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Create Device fail!" + DeviceConfig.CameraSNNum + ":" + ex.Message);
+                //FaultLog.RecordErrorMessage("Create Device fail!" + DeviceConfig.CameraSNNum + ":" + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.相机实例创建失败, "Create Device fail!" + DeviceConfig.CameraSNNum + ":" + ex.Message, "DLL:CameraClass-LoadCamereDevice");
                 return Blresult;
             }
-
+            SystemAlarm.AlarmCancel(AlarmMessageList.相机实例创建失败);
             int result = device.Open();
             if (result != MvError.MV_OK)
             {
-                FaultLog.RecordErrorMessage("Open Device fail!" + DeviceConfig.CameraSNNum + ":" + result);
+                //FaultLog.RecordErrorMessage("Open Device fail!" + DeviceConfig.CameraSNNum + ":" + result);
+                SystemAlarm.AlarmAlert(AlarmMessageList.开启相机失败, "Open Device fail!" + DeviceConfig.CameraSNNum + ":" + result, "DLL:CameraClass-LoadCamereDevice");
                 return Blresult;
             }
-
+            SystemAlarm.AlarmCancel(AlarmMessageList.开启相机失败);
             // 判断是否为gige设备
             if (device is IGigEDevice)
             {
@@ -180,18 +183,20 @@ namespace CCDCount.DLL
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Create Device fail!" + CameraSN + ":" + ex.Message);
+                //FaultLog.RecordErrorMessage("Create Device fail!" + CameraSN + ":" + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.相机实例创建失败, "Create Device fail!" + CameraSN + ":" + ex.Message, "DLL:CameraClass-LoadCamereDevice");
                 return Blresult;
             }
-
+            SystemAlarm.AlarmCancel(AlarmMessageList.相机实例创建失败);
             int result = device.Open();
             if (result != MvError.MV_OK)
             {
                 Blresult = false;
-                FaultLog.RecordErrorMessage("Open Device fail!" + CameraSN + ":" + result);
+                //FaultLog.RecordErrorMessage("Open Device fail!" + CameraSN + ":" + result);
+                SystemAlarm.AlarmAlert(AlarmMessageList.开启相机失败, "Open Device fail!" + CameraSN + ":" + result, "DLL:CameraClass-LoadCamereDevice");
                 return Blresult;
             }
-
+            SystemAlarm.AlarmCancel(AlarmMessageList.开启相机失败);
             // 判断是否为gige设备
             if (device is IGigEDevice)
             {
@@ -394,10 +399,12 @@ namespace CCDCount.DLL
                 device.StreamGrabber.SetImageNodeNum(30);
                 device.StreamGrabber.StartGrabbing();
                 result = true;
+                SystemAlarm.AlarmCancel(AlarmMessageList.相机采集开始失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
+                //FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.相机采集开始失败, "Start thread failed!, " + ex.Message, "DLL:CamerClass-StartReceiveFuntion");
                 throw;
             }
             return result;
@@ -414,13 +421,16 @@ namespace CCDCount.DLL
                 int ret = device.StreamGrabber.StopGrabbing();
                 if (ret != MvError.MV_OK)
                 {
-                    FaultLog.RecordErrorMessage($"Stop grabbing failed:{ret:x8}");
+                    //FaultLog.RecordErrorMessage($"Stop grabbing failed:{ret:x8}");
+                    SystemAlarm.AlarmAlert(AlarmMessageList.相机采集停止失败, "Stop grabbing failed:{ret:x8}", "DLL:CamerClass-StopReceiveFuntion");
                     return;
                 }
+                SystemAlarm.AlarmCancel(AlarmMessageList.相机采集停止失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Stop thread failed!, " + ex.Message);
+                //FaultLog.RecordErrorMessage("Stop thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.相机采集停止失败, "Stop thread failed!, " + ex.Message, "DLL:CamerClass-StopReceiveFuntion");
                 throw;
             }
         }

+ 21 - 8
TestWork.DLL/MainThreadClass.cs

@@ -1,4 +1,5 @@
-using CCDCount.DLL.SqlDataClass;
+using CCDCount.DLL.AlarmTools;
+using CCDCount.DLL.SqlDataClass;
 using CCDCount.DLL.Tools;
 using CCDCount.MODEL.CameraClass;
 using CCDCount.MODEL.ConfigModel;
@@ -86,10 +87,12 @@ namespace CCDCount.DLL
         {
             if (!modbusTcpClient.Connect(ipAddress))
             {
-                FaultLog.RecordErrorMessage($"MianThread{cameraConfig.CamerNo}-Modbus通讯连接失败,目标IP:{ipAddress}");
+                //FaultLog.RecordErrorMessage($"MianThread{cameraConfig.CamerNo}-Modbus通讯连接失败,目标IP:{ipAddress}");
+                SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, $"Modbus通讯连接失败,目标IP:{ipAddress}", "DLL:MainThreadClass-ConnectModbus");
                 return;
             }
             IsConnectModbus = true;
+            SystemAlarm.AlarmCancel(AlarmMessageList.PLC通讯连接失败);
         }
 
         /// <summary>
@@ -131,17 +134,21 @@ namespace CCDCount.DLL
                 cameraClass.GetCameraList(out List<CameraInfoClass> list);
                 if (list.Count == 0)
                 {
-                    FaultLog.RecordErrorMessage(string.Format("{0}:没有相机", "MainThreadClass-StartMianThread"));
+                    //FaultLog.RecordErrorMessage(string.Format("{0}:没有相机", "MainThreadClass-StartMianThread"));
+                    SystemAlarm.AlarmAlert(AlarmMessageList.未检测到相机, "未检测到相机", "DLL:MainThreadClass-LoadCamera");
                     // 如果没有相机,则退出
                     return result;
                 }
+                SystemAlarm.AlarmCancel(AlarmMessageList.未检测到相机);
                 // 加载相机
                 // cameraClass.LoadCamereDevice(list.First().DeviceSN);
                 if (!cameraClass.LoadCamereDevice(cameraConfig))
                 {
-                    FaultLog.RecordErrorMessage(string.Format("{0}:相机加载失败", "MainThreadClass-StartMianThread"));
+                    //FaultLog.RecordErrorMessage(string.Format("{0}:相机加载失败", "MainThreadClass-StartMianThread"));
+                    SystemAlarm.AlarmAlert(AlarmMessageList.相机加载失败, "相机加载失败", "DLL:MainThreadClass-LoadCamera");
                     return result;
                 }
+                SystemAlarm.AlarmCancel(AlarmMessageList.相机加载失败);
                 CameraConfigIsChange = false;
             }
             catch(Exception ex)
@@ -666,10 +673,12 @@ namespace CCDCount.DLL
                 IsSwitch = false;
                 if (SwitchIdentifyImageThread != null && SwitchIdentifyImageThread.IsAlive)
                     SwitchIdentifyImageThread.Join();
+                SystemAlarm.AlarmCancel(AlarmMessageList.数据分配线程停止失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("MainThreadClass-StopSwitchThread:Stop thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.数据分配线程停止失败, "stop thread failed!, " + ex.Message, "DLL:MainThreadClass-StopSwitchThread");
+                //FaultLog.RecordErrorMessage("MainThreadClass-StopSwitchThread:Stop thread failed!, " + ex.Message);
                 Console.WriteLine("MainThreadClass-StopSwitchThread:Stop thread failed!, " + ex.Message);
                 throw;
             }
@@ -730,10 +739,12 @@ namespace CCDCount.DLL
                 IsSend = true;
                 SendBottLogicMessageThread = new Thread(SendBottLogicMessageProcess);
                 SendBottLogicMessageThread.Start();
+                SystemAlarm.AlarmCancel(AlarmMessageList.结果发送线程启动失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("MianThread-StartSendBottLogicMessageThread:Start thread failed!, " + ex.Message);
+                //FaultLog.RecordErrorMessage("MianThread-StartSendBottLogicMessageThread:Start thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.结果发送线程启动失败, "MianThread-StartSendBottLogicMessageThread:Start thread failed!, " + ex.Message, "DLL:MainThreadClass-StartSendBottLogicMessageThread");
                 Console.WriteLine("MianThread-StartSendBottLogicMessageThread:Start thread failed!, " + ex.Message);
                 throw;
             }
@@ -750,10 +761,12 @@ namespace CCDCount.DLL
                 if (SendBottLogicMessageThread != null && SendBottLogicMessageThread.IsAlive)
                     SendBottLogicMessageThread.Join();
                 //if (modbusTcpClient != null) modbusTcpClient.Disconnect();
+                SystemAlarm.AlarmCancel(AlarmMessageList.结果发送线程停止失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
+                //FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.结果发送线程停止失败, "MianThread-StopSendBottLogicMessageThread:Stop thread failed!, " + ex.Message, "DLL:MainThreadClass-StopSendBottLogicMessageThread");
                 throw;
             }
         }
@@ -792,7 +805,7 @@ namespace CCDCount.DLL
                     {
                         if (!SendQueue.TryDequeue(out sendMessage))
                         {
-                            FaultLog.RecordErrorMessage("MainThreadClass-SendBottLogicMessageProcess-SendQueue.TryDequeue failed!");
+                            //FaultLog.RecordErrorMessage("MainThreadClass-SendBottLogicMessageProcess-SendQueue.TryDequeue failed!");
                         }
                     }
                     if (sendMessage != 0)

+ 5 - 2
TestWork.DLL/PLCManagementClass.cs

@@ -1,4 +1,5 @@
-using CCDCount.DLL.Tools;
+using CCDCount.DLL.AlarmTools;
+using CCDCount.DLL.Tools;
 using CCDCount.MODEL.PlcModel;
 using System;
 using System.Linq;
@@ -30,11 +31,13 @@ namespace CCDCount.DLL
         {
             if (!modbusTcpClient.Connect(ipAddress))
             {
-                FaultLog.RecordErrorMessage($"Modbus通讯连接失败,目标IP:{ipAddress}");
+                //FaultLog.RecordErrorMessage($"Modbus通讯连接失败,目标IP:{ipAddress}");
+                SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, $"Modbus通讯连接失败,目标IP:{ipAddress}", "DLL:PLCManagementClass-ConnectModbus");
                 isConnect = false;
                 return;
             }
             isConnect = true;
+            SystemAlarm.AlarmCancel(AlarmMessageList.PLC通讯连接失败);
         }
         /// <summary>
         /// 归零置为True

+ 12 - 4
TestWork.DLL/ShuLiClass.cs

@@ -1,4 +1,5 @@
-using CCDCount.MODEL.ConfigModel;
+using CCDCount.DLL.AlarmTools;
+using CCDCount.MODEL.ConfigModel;
 using CCDCount.MODEL.ShuLiModel;
 using LogClass;
 using MvCameraControl;
@@ -285,10 +286,12 @@ namespace CCDCount.DLL
                     Priority = ThreadPriority.Highest
                 };
                 IdentifyImageProcessThread.Start();
+                SystemAlarm.AlarmCancel(AlarmMessageList.识别线程启动失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.识别线程启动失败, "Start thread failed!, " + ex.Message, "DLL:ShuLiClass-StartIdentifyFuntion");
+                //FaultLog.RecordErrorMessage("Start thread failed!, " + ex.Message);
                 throw;
             }
         }
@@ -304,10 +307,12 @@ namespace CCDCount.DLL
                 IsIdentify = false;
                 if (IdentifyImageProcessThread != null && IdentifyImageProcessThread.IsAlive)
                     IdentifyImageProcessThread.Join();
+                SystemAlarm.AlarmCancel(AlarmMessageList.识别线程停止失败);
             }
             catch (Exception ex)
             {
-                FaultLog.RecordErrorMessage("Stop thread failed!, " + ex.Message);
+                //FaultLog.RecordErrorMessage("Stop thread failed!, " + ex.Message);
+                SystemAlarm.AlarmAlert(AlarmMessageList.识别线程停止失败, "Stop thread failed!, " + ex.Message, "DLL:ShuLiClass-StopIdentifyFuntion");
                 throw;
             }
         }
@@ -909,7 +914,10 @@ namespace CCDCount.DLL
                 {
                     //stopwatch.Restart();
                     if (IFrameDatas.Count() > 50)
-                        FaultLog.RecordErrorMessage($"图像数据队列中数据过多,请及时处理!当前数据数量为:{IFrameDatas.Count()}");
+                        SystemAlarm.AlarmAlert(AlarmMessageList.待识别队列数据堆积, $"图像数据队列中数据过多,请及时处理!当前数据数量为:{IFrameDatas.Count()}", "DLL:ShuLIClass-IdentifyImageProcess");
+                        //FaultLog.RecordErrorMessage($"图像数据队列中数据过多,请及时处理!当前数据数量为:{IFrameDatas.Count()}");
+                    else
+                        SystemAlarm.AlarmCancel(AlarmMessageList.待识别队列数据堆积);
                     IFrameDatas.TryDequeue(out IImage IframeData);
                     //是否成功取得数据
                     if (IframeData != null)

+ 41 - 0
TestWork.MODEL/AlarmModel/AlarmMessModel.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CCDCount.MODEL.AlarmModel
+{
+    public class AlarmMessModel
+    {
+        /// <summary>
+        /// 报警信息ID
+        /// </summary>
+        public int ID { get; set; }
+
+        /// <summary>
+        /// 报警类型
+        /// </summary>
+        public string AlarmType { get; set; }
+
+        /// <summary>
+        /// 报警信息
+        /// </summary>
+        public string AlarmMess { get; set; }
+
+        /// <summary>
+        /// 报警信息路径
+        /// </summary>
+        public string AlarmPath { get; set; }
+
+        /// <summary>
+        /// 报警时间
+        /// </summary>
+        public DateTime AlarmDateTime { get; set; }
+
+        /// <summary>
+        /// 是否处于报警状态
+        /// </summary>
+        public bool IsAlarm { get; set; } = false;
+    }
+}

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

@@ -61,6 +61,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AlarmModel\AlarmMessModel.cs" />
     <Compile Include="AuditTrailModel\BatchRecordModel.cs" />
     <Compile Include="CameraClass\CameraImageSizeClass.cs" />
     <Compile Include="CameraClass\CameraInfoClass.cs" />

+ 4 - 0
TestWork.MODEL/SqlDataModel/ErroeMesDataModelClass.cs

@@ -29,6 +29,10 @@ namespace CCDCount.MODEL.SqlDataModel
         /// </summary>
         public string Message { get; set; }
         /// <summary>
+        /// 报错路径
+        /// </summary>
+        public string Path { get; set; }
+        /// <summary>
         /// 记录时间
         /// </summary>
         public DateTime DateTime { get; set; }