using OrpaonEMS.Core.ChannelModel; using OrpaonEMS.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Channels; using System.Threading.Tasks; using Prism.Mvvm; using System.Collections.ObjectModel; namespace OrpaonEMS.App.Models { /// /// PCS报警模型 /// public class PcsAlarmModel : BindableBase { /// /// 报警通道数据 /// public Channel AlarmChannel { get; set; } /// /// 实例化函数 /// public PcsAlarmModel(Channel channel) { AlarmChannel = channel; foreach (var itemAlarmCell in ListAlarmWord1) { itemAlarmCell.PubPcsAlarmEventHandler += ItemAlarmCell_PubPcsAlarmEventHandler; } foreach (var itemAlarmCell in ListAlarmWord2) { itemAlarmCell.PubPcsAlarmEventHandler += ItemAlarmCell_PubPcsAlarmEventHandler; } foreach (var itemAlarmCell in ListAlarmWord3) { itemAlarmCell.PubPcsAlarmEventHandler += ItemAlarmCell_PubPcsAlarmEventHandler; } foreach (var itemAlarmCell in ListAlarmWord4) { itemAlarmCell.PubPcsAlarmEventHandler += ItemAlarmCell_PubPcsAlarmEventHandler; } foreach (var itemAlarmCell in ListAlarmWord5) { itemAlarmCell.PubPcsAlarmEventHandler += ItemAlarmCell_PubPcsAlarmEventHandler; } } private ObservableCollection _ListAlarmContent=new ObservableCollection(); /// ///报警内容 /// public ObservableCollection ListAlarmContent { get { return _ListAlarmContent; } set { _ListAlarmContent = value; RaisePropertyChanged(); } } public string _CurAlarmMsg; /// /// 当前报警数据 /// public string CurAlarmMsg { get { return _CurAlarmMsg; } set { _CurAlarmMsg = value; RaisePropertyChanged(); } } private int _AlarmCount; /// /// 报警个数 /// public int AlarmCount { get { return _AlarmCount; } set { _AlarmCount = value; RaisePropertyChanged(); } } /// /// 报警发布事件 /// /// /// /// private void ItemAlarmCell_PubPcsAlarmEventHandler(object sender, Core.EventHandMsg.PcsAlarmCellEventHandMsg AlarmData) { //统计个数 var Count1 = ListAlarmWord1.Where(a => a.State == true).Count(); var Count2 = ListAlarmWord2.Where(a => a.State == true).Count(); var Count3 = ListAlarmWord3.Where(a => a.State == true).Count(); var Count4 = ListAlarmWord4.Where(a => a.State == true).Count(); var Count5 = ListAlarmWord5.Where(a => a.State == true).Count(); AlarmCount = Count1 + Count2 + Count3 + Count4 + Count5; if (AlarmData.State)//报警发生 { CurAlarmMsg = AlarmData.Content; if (!ListAlarmContent.Contains(AlarmData.Content)) { ListAlarmContent.Add(AlarmData.Content); } Console.WriteLine($"时间:{DateTime.Now.ToString()}:PCS报警激活:{AlarmData.Content} "); } else//报警消失 { if (AlarmData.Content== CurAlarmMsg) { CurAlarmMsg =""; } Console.WriteLine($"时间:{DateTime.Now.ToString()}:PCS报警消失:{AlarmData.Content} "); if (ListAlarmContent.Contains(AlarmData.Content)) { ListAlarmContent.Remove(AlarmData.Content); } //报警结束,可以采集数据 AlarmChannel.Writer.WriteAsync(new AlarmChannelData() { MsgTime = DateTime.Now, alarmChannel = new AlarmChannel() { Content = AlarmData.Content, StartTime = AlarmData.CurTimeInfo.StartTime, EndTime = AlarmData.CurTimeInfo.EndTime, AlarmDur = (decimal)AlarmData.CurTimeInfo.AlarmDur, Level = AlarmData.Level, } }); } //报警个数为0,那么就清空报警数据了 if (AlarmCount == 0) { ListAlarmContent.Clear(); return; } } #region 报警字信息 private ushort _AlarmWord1; /// /// 报警字1 /// public ushort AlarmWord1 { get { return _AlarmWord1; } set { if (_AlarmWord1 != value) { foreach (var itemAlarm in ListAlarmWord1) { itemAlarm.State = ComHelper.GetBitValue(value, itemAlarm.BitIndex); } _AlarmWord1 = value; } } } private ushort _AlarmWord2; /// /// 报警字1 /// public ushort AlarmWord2 { get { return _AlarmWord2; } set { if (_AlarmWord2 != value) { foreach (var itemAlarm in ListAlarmWord2) { itemAlarm.State = ComHelper.GetBitValue(value, itemAlarm.BitIndex); } _AlarmWord2 = value; } } } private ushort _AlarmWord3; /// /// 报警字3 /// public ushort AlarmWord3 { get { return _AlarmWord3; } set { if (_AlarmWord3 != value) { foreach (var itemAlarm in ListAlarmWord3) { itemAlarm.State = ComHelper.GetBitValue(value, itemAlarm.BitIndex); } _AlarmWord3 = value; } } } private ushort _AlarmWord4; /// /// 报警字4 /// public ushort AlarmWord4 { get { return _AlarmWord4; } set { if (_AlarmWord4 != value) { foreach (var itemAlarm in ListAlarmWord4) { itemAlarm.State = ComHelper.GetBitValue(value, itemAlarm.BitIndex); } _AlarmWord4 = value; } } } private ushort _AlarmWord5; /// /// 报警字5 /// public ushort AlarmWord5 { get { return _AlarmWord5; } set { if (_AlarmWord5 != value) { foreach (var itemAlarm in ListAlarmWord5) { itemAlarm.State = ComHelper.GetBitValue(value, itemAlarm.BitIndex); } _AlarmWord5 = value; } } } #endregion #region 报警集合数据 /// /// PCS 故障字 1 /// 集合 /// public List ListAlarmWord1 { get; set; } = new List() { new PcsAlarmCell(){Content="FPGA 硬件故障-A 相硬件过流",BitIndex=0 }, new PcsAlarmCell(){Content="FPGA 硬件故障-B 相硬件过流",BitIndex=1 }, new PcsAlarmCell(){Content="FPGA 硬件故障-C 相硬件过流",BitIndex=2 }, new PcsAlarmCell(){Content="FPGA 硬件故障-N 相硬件过流",BitIndex=3 }, new PcsAlarmCell(){Content="FPGA 硬件故障-单元直压故障",BitIndex=6 }, new PcsAlarmCell(){Content="FPGA 硬件故障-开关电源欠压",BitIndex=9 }, new PcsAlarmCell(){Content="FPGA 软件故障-A 相 IGBT 故障",BitIndex=10 }, new PcsAlarmCell(){Content="FPGA 硬件故障-B 相 IGBT 故障",BitIndex=11 }, new PcsAlarmCell(){Content="FPGA 硬件故障-C 相 IGBT 故障",BitIndex=12 }, new PcsAlarmCell(){Content="FPGA 硬件故障-N 相 IGBT 故障",BitIndex=13 }, new PcsAlarmCell(){Content="FPGA 硬件故障-过温故障",BitIndex=14 }, }; /// /// PCS 故障字 2 /// 集合 /// public List ListAlarmWord2 { get; set; } = new List() { new PcsAlarmCell(){Content="ARM 软件故障-A 相输出过流",BitIndex=0 }, new PcsAlarmCell(){Content="ARM 软件故障-A 相输出速断",BitIndex=1 }, new PcsAlarmCell(){Content="ARM 软件故障-B 相输出过流",BitIndex=2 }, new PcsAlarmCell(){Content="ARM 软件故障-B 相输出速断",BitIndex=3 }, new PcsAlarmCell(){Content="ARM 软件故障-C 相输出过流",BitIndex=4 }, new PcsAlarmCell(){Content="ARM 软件故障-C 相输出速断",BitIndex=5 }, new PcsAlarmCell(){Content="ARM 软件故障-N 相输出速断",BitIndex=6 }, new PcsAlarmCell(){Content="ARM 软件故障-N 相输出速断",BitIndex=7 }, new PcsAlarmCell(){Content="ARM 软件故障-交流过压",BitIndex=8 }, new PcsAlarmCell(){Content="ARM 软件故障-交流欠压",BitIndex=9 }, new PcsAlarmCell(){Content="ARM 软件故障-交流过频",BitIndex=10 }, new PcsAlarmCell(){Content="ARM 软件故障-交流欠频",BitIndex=11 }, new PcsAlarmCell(){Content="ARM 软件故障-电压 THDU 超限",BitIndex=12 }, new PcsAlarmCell(){Content="ARM 软件故障-系统缺相",BitIndex=13 }, new PcsAlarmCell(){Content="ARM 软件故障-系统相序错误",BitIndex=14 }, new PcsAlarmCell(){Content="ARM 软件故障-直流极性反接",BitIndex=15 }, }; /// /// PCS 故障字 3 /// 集合 /// public List ListAlarmWord3 { get; set; } = new List() { new PcsAlarmCell(){Content="ARM 软件故障-直流母线软件过压",BitIndex=0 }, new PcsAlarmCell(){Content="ARM 软件故障-直流母线软件欠压",BitIndex=1 }, new PcsAlarmCell(){Content="ARM 软件故障-系统过频率",BitIndex=2 }, new PcsAlarmCell(){Content="ARM 软件故障-系统欠频率",BitIndex=3 }, new PcsAlarmCell(){Content="ARM 软件故障-直流充电过流",BitIndex=4 }, new PcsAlarmCell(){Content="ARM 软件故障-直流放电过流",BitIndex=5 }, new PcsAlarmCell(){Content="ARM 软件故障-孤岛保护",BitIndex=6 }, new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=7 }, new PcsAlarmCell(){Content="ARM 软件故障-交流主接合闸故障",BitIndex=8 }, new PcsAlarmCell(){Content="ARM 软件故障-交流主接分闸故障",BitIndex=9 }, new PcsAlarmCell(){Content="ARM 软件故障-交流软启合闸故障",BitIndex=10 }, new PcsAlarmCell(){Content="ARM 软件故障-交流软启分闸故障",BitIndex=11 }, new PcsAlarmCell(){Content="ARM 软件故障-直流主接合闸故障",BitIndex=12 }, new PcsAlarmCell(){Content="ARM 软件故障-直流主接分闸故障",BitIndex=13 }, new PcsAlarmCell(){Content="ARM 软件故障-直流软启合闸故障",BitIndex=14 }, new PcsAlarmCell(){Content="ARM 软件故障-直流软启合闸故障",BitIndex=15 }, }; /// /// PCS 故障字 4 /// 集合 /// public List ListAlarmWord4 { get; set; } = new List() { new PcsAlarmCell(){Content="ARM 软件故障-铁电参数存储错误",BitIndex=0 }, new PcsAlarmCell(){Content="ARM 软件故障-直流软起失败",BitIndex=1 }, new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=2 }, new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=3 }, new PcsAlarmCell(){Content="ARM 软件故障-起机条件不满足",BitIndex=4 }, new PcsAlarmCell(){Content="ARM 软件故障-运行中开关故障",BitIndex=5 }, new PcsAlarmCell(){Content="ARM 软件故障-逆变启动超时",BitIndex=6 }, new PcsAlarmCell(){Content="ARM 软件故障-参数下发设置错误",BitIndex=7 }, new PcsAlarmCell(){Content="ARM 软件故障-BMS 通讯故障",BitIndex=8 }, new PcsAlarmCell(){Content="ARM 软件故障-BMS 温度异常",BitIndex=9 }, new PcsAlarmCell(){Content="ARM 软件故障-BMS 跳机",BitIndex=10 }, new PcsAlarmCell(){Content="ARM 软件故障-BMS 电池告警",BitIndex=11 }, new PcsAlarmCell(){Content="ARM 软件故障-DCDC 通讯故障",BitIndex=12 }, new PcsAlarmCell(){Content="ARM 软件故障-EMS 通讯故障",BitIndex=13 }, new PcsAlarmCell(){Content="ARM 软件故障-急停或熔芯故障",BitIndex=14 }, new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=15 }, }; /// /// PCS 故障字 5 /// 集合 /// public List ListAlarmWord5 { get; set; } = new List() { new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=0 }, new PcsAlarmCell(){Content="ARM 软件故障-电池软件过压",BitIndex=1 }, new PcsAlarmCell(){Content="ARM 软件故障-电池软件欠压",BitIndex=2 }, new PcsAlarmCell(){Content="ARM 软件故障-母线不平衡异常",BitIndex=3 }, new PcsAlarmCell(){Content="ARM 软件故障-母线半直压过压",BitIndex=4 }, new PcsAlarmCell(){Content="ARM 软件故障-DCDC 启动超时",BitIndex=5 }, new PcsAlarmCell(){Content="ARM 软件故障-保留",BitIndex=6 }, //new PcsAlarmCell(){Content="xxx",BitIndex=7 }, //new PcsAlarmCell(){Content="xxx",BitIndex=8 }, //new PcsAlarmCell(){Content="xxx",BitIndex=9 }, //new PcsAlarmCell(){Content="xxx",BitIndex=10 }, //new PcsAlarmCell(){Content="xxx",BitIndex=11 }, //new PcsAlarmCell(){Content="xxx",BitIndex=12 }, //new PcsAlarmCell(){Content="xxx",BitIndex=13 }, //new PcsAlarmCell(){Content="xxx",BitIndex=14 }, //new PcsAlarmCell(){Content="xxx",BitIndex=15 }, }; #endregion } }