소스 검색

修改故障逻辑
设置默认空域

LC 2 달 전
부모
커밋
7327305acd
6개의 변경된 파일113개의 추가작업 그리고 15개의 파일을 삭제
  1. 7 2
      Core/TcpServerFrame.cs
  2. 32 5
      MainWindow.xaml.cs
  3. 5 2
      Models/EquipmentDataModel.cs
  4. 67 2
      Models/FaultDataModel.cs
  5. 1 1
      Models/ViewModel/EquipmentSettingViewModel.cs
  6. 1 3
      Models/ViewModel/TwoRopesViewModel.cs

+ 7 - 2
Core/TcpServerFrame.cs

@@ -569,6 +569,11 @@ namespace SWRIS.Core
             var faultData = ReceiveFaultData(buffer);
             if (faultData != null)
             {
+                var equipmentData = App.Config.Equipments.FirstOrDefault(c => c.IpAddress == client.IpAddress);
+                if (equipmentData != null)
+                {
+                    equipmentData.InUseSensor = faultData.WorkingSensors;
+                }
                 // 处理故障数据
                 FaultDataReceived?.Invoke(this, new FaultDataReceivedEventArgs(client.IpAddress, faultData));
             }
@@ -1098,7 +1103,7 @@ namespace SWRIS.Core
             FaultDataModel faultData = new FaultDataModel();
             var data = verifyData.Data;
             faultData.FaultType = (FaultType)data[0];
-
+            faultData.FaultCode = byteTransform.TransInt32(data, 1);
             return faultData;
         }
         public byte ReceiveStartOrStopDetectionResultData(byte[] buffer)
@@ -1681,7 +1686,7 @@ namespace SWRIS.Core
 
             return (serialNo, buffer);
         }
-
+    
         public void Dispose()
         {
             try

+ 32 - 5
MainWindow.xaml.cs

@@ -9,6 +9,7 @@ using SWRIS.Models.ViewModel;
 using SWRIS.Pages;
 using SWRIS.Repository;
 using System;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.IO;
 using System.Linq;
@@ -191,7 +192,7 @@ namespace SWRIS
                 }
                 else if (equipmentData.RunningStatus.HasFlag(RunningStatus.PreRunning))
                 {
-                    equipmentData.RunningStatus = RunningStatus.TemporalNormal;
+                    equipmentData.RunningStatus = RunningStatus.SpatialNormal;
                     Application.Current.Dispatcher.Invoke(() =>
                     {
                         NoticeBox.Show("自动检测恢复", "通知", MessageBoxIcon.Success, true, 3000);
@@ -199,7 +200,7 @@ namespace SWRIS
                 }
                 else if (equipmentData.RunningStatus.HasFlag(RunningStatus.PreCalibration))
                 {
-                    equipmentData.RunningStatus = RunningStatus.TemporalNormal;
+                    equipmentData.RunningStatus = RunningStatus.SpatialNormal;
                 }
             }
         }
@@ -209,7 +210,32 @@ namespace SWRIS
         private void TcpServer_FaultDataReceived(object sender, FaultDataReceivedEventArgs e)
         {
             var equipmentData = App.DataCenter.Equipments.FirstOrDefault(c => c.IpAddress == e.IpAddress);
-            equipmentData?.Faults.Add(e.FaultData);
+            if (equipmentData != null)
+            {
+                if (equipmentData.Faults.TryGetValue(e.FaultData.FaultType, out var faultData))
+                {
+                    if (e.FaultData.FaultCode == 0)
+                    {
+                        equipmentData.Faults.Remove(e.FaultData.FaultType);
+                    }
+                    else
+                    {
+                        equipmentData.Faults[e.FaultData.FaultType] = e.FaultData;
+                    }
+                }
+                else
+                {
+                    equipmentData.Faults.Add(e.FaultData.FaultType, e.FaultData);
+                }
+                if (equipmentData.Messages.Any())
+                {
+                    equipmentData.Messages.Clear();
+                }
+                foreach (var fault in equipmentData.Faults)
+                {
+                    equipmentData.Messages.Add(fault.ToString());
+                }
+            }
         }
         /// <summary>
         /// 接收实时数据
@@ -249,9 +275,9 @@ namespace SWRIS
             {
                 equipmentData.IsConnect = true;
                 equipmentData.ClientSocket = e.ClientSocket;
-                if (equipmentData.RunningStatus != RunningStatus.TemporalNormal)
+                if (equipmentData.RunningStatus != RunningStatus.SpatialNormal)
                 {
-                    equipmentData.RunningStatus |= RunningStatus.TemporalNormal;
+                    equipmentData.RunningStatus |= RunningStatus.SpatialNormal;
                 }
             }
         }
@@ -484,6 +510,7 @@ namespace SWRIS
                 }
             });
         }
+
         private void WindowX_Loaded(object sender, RoutedEventArgs e)
         {
             NavigateToPage("Home");

+ 5 - 2
Models/EquipmentDataModel.cs

@@ -49,6 +49,8 @@ namespace SWRIS.Models
         private uint detectionNo;
         private bool disableAlarm;
         private int[] inUseSensor = new int[] { 1, 2, 3, 4 };
+
+ 
         /// <summary>
         /// 钢丝绳绳号
         /// </summary>
@@ -349,11 +351,12 @@ namespace SWRIS.Models
             set { inUseSensor = value; OnPropertyChanged(nameof(InUseSensor)); }
         }
         public ObservableCollection<AlarmDataModel> Alarms { get; set; } = new ObservableCollection<AlarmDataModel>();
-        public ObservableCollection<FaultDataModel> Faults { get; set; } = new ObservableCollection<FaultDataModel>();
-        public ObservableCollection<LimitModel> Limits { get; set; } = new ObservableCollection<LimitModel>();
+        public Dictionary<FaultType, FaultDataModel> Faults { get; set; } = new Dictionary<FaultType, FaultDataModel>();
         public ObservableCollection<string> Messages { get; set; } = new ObservableCollection<string>();
+        public ObservableCollection<LimitModel> Limits { get; set; } = new ObservableCollection<LimitModel>();
         public Coordinates[] ChartSource { get; internal set; }
         public Queue<double> RecentSpeeds { get; internal set; } = new Queue<double>();
+
         public void AddSpeedData(double speed)
         {
             // 更新数据窗口

+ 67 - 2
Models/FaultDataModel.cs

@@ -1,4 +1,6 @@
 using SWRIS.Enums;
+using System;
+using System.Collections.Generic;
 
 namespace SWRIS.Models
 {
@@ -9,8 +11,71 @@ namespace SWRIS.Models
         /// </summary>
         public FaultType FaultType { get; set; }
         /// <summary>
-        /// 故障位置
+        /// 故障代码
         /// </summary>
-        public uint[] Positions { get; set; }
+        public int FaultCode { get; set; }
+        /// <summary>
+        /// 在用传感器编号列表
+        /// </summary>
+        public int[] WorkingSensors => GetWorkingSensors(FaultCode);
+        /// <summary>
+        /// 故障传感器编号列表
+        /// </summary>
+        public int[] FaultySensors => GetFaultySensors(FaultCode);
+
+        public override string ToString()
+        {
+            if (FaultType == FaultType.Encoder)
+            {
+                return $"编码器故障";
+            }
+            else
+            {
+                return $"第[{string.Join(",",FaultySensors)}]路传感器故障";
+            }
+        }
+
+        /// <summary>
+        /// 根据故障码,返回无故障的传感器编号数组
+        /// </summary>
+        /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
+        /// <returns>无故障的传感器编号数组,如 [1,2,3,4] 表示全正常</returns>
+        private static int[] GetWorkingSensors(int faultCode)
+        {
+            var workingList = new List<int>();
+
+            // 检查每一位,1 左移 (i-1) 位
+            for (int i = 1; i <= 4; i++)
+            {
+                int bitMask = 1 << (i - 1);  // 第i路对应的位掩码:1,2,4,8
+                if ((faultCode & bitMask) == 0)
+                {
+                    workingList.Add(i);  // 该位为0,表示无故障
+                }
+            }
+
+            return workingList.ToArray();
+        }
+
+        /// <summary>
+        /// 根据故障码,返回故障的传感器编号数组
+        /// </summary>
+        /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
+        /// <returns>故障的传感器编号数组,如 [] 表示全正常,[4] 表示第4路故障</returns>
+        private static int[] GetFaultySensors(int faultCode)
+        {
+            var faultyList = new List<int>();
+
+            for (int i = 1; i <= 4; i++)
+            {
+                int bitMask = 1 << (i - 1);  // 第i路对应的位掩码:1,2,4,8
+                if ((faultCode & bitMask) != 0)  // 这里改为 != 0
+                {
+                    faultyList.Add(i);  // 该位为1,表示有故障
+                }
+            }
+
+            return faultyList.ToArray();
+        }
     }
 }

+ 1 - 1
Models/ViewModel/EquipmentSettingViewModel.cs

@@ -25,7 +25,7 @@ namespace SWRIS.Models.ViewModel
         private RiskLevel soundRiskLevel = RiskLevel.Moderate;
         private ParameterData parameter;
         private bool isConnected;
-        private RunningStatus runningStatus;
+        private RunningStatus runningStatus= RunningStatus.SpatialNormal;
         /// <summary>
         /// 绳号
         /// </summary>

+ 1 - 3
Models/ViewModel/TwoRopesViewModel.cs

@@ -1,6 +1,4 @@
-using System.ComponentModel;
-
-namespace SWRIS.Models.ViewModel
+namespace SWRIS.Models.ViewModel
 {
     public class TwoRopesViewModel : RopeViewBaseModel
     {