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
}
}